17.1 MySQL主從介紹html
1. MySQL主從又叫作Replication、AB複製。簡單講就是A和B兩臺機器作主從後,在A上寫數據,另一臺B也會跟着寫數據,二者數據實時同步的mysql
2. MySQL主從是基於binlog的,主上須開啓binlog才能進行主從。sql
3. 主從過程大體有3個步驟數據庫
1)主將更改操做記錄到binlog裏vim
2)從將主的binlog事件(sql語句)同步到從本機上並記錄在relaylog裏centos
3)從根據relaylog裏面的sql語句按順序執行服務器
4. 主上有一個log dump線程,用來和從的I/O線程傳遞binlogide
5. 從上有兩個線程,其中I/O線程用來同步主的binlog並生成relaylog,另一個SQL線程用來把relaylog裏面的sql語句落地測試
MySQL主從原理圖 :ui
17.2 準備工做
1. 在兩個centos系統上安裝mysql,安裝方法見 :
11.3 MySQL安裝(上);11.4 MySQL安裝(中);11.5 MySQL安裝下
2. hao1機器和hao2機器都啓動mysql :
3. 兩個centos系統:設定hao1爲主 hao2爲從 :
hao1查看是否啓動mysql :
[root@hao-01 ~]# ps aux |grep mysql
hao2查看是否啓動mysql :
[root@hao-02 ~]# ps aux |grep mysql
17.3 配置主
1. 編輯/etc/my.cnf配置文件 :
[root@hao-01 ~]# vim /etc/my.cnf
添加內容 :
server-id=128
log_bin=haozc
2. 重啓mysql :
[root@hao-01 ~]# /etc/init.d/mysqld restart
3. 查看/data/mysql/目錄下,生成以(log_bin)haozc開頭的文件 :
[root@hao-01 ~]# ls /data/mysql/haozc.*
4. 進入 /data/mysql/目錄 :
[root@hao-01 ~]# cd /data/mysql/
5. 建立一個新的庫,庫名爲haozc :
[root@hao-01 mysql]# mysql -uroot -phaomima -e "create database haozc"
把ceshiku庫備份並恢復成haozc庫,做爲測試數據
6. 備份mysql數據庫,作測試 :
[root@hao-01 mysql]# mysqldump -uroot -phaomima ceshiku > /tmp/ceshiku.sql
7. 把備份的ceshiku.sql庫文件,恢復到haozc庫 :
[root@hao-01 mysql]# mysql -uroot -phaomima haozc < /tmp/ceshiku.sql
8. hao1機器主 全部mysql數據庫備份到/tmp/下 :
[root@hao-01 mysql]# mysqldump -uroot -phaomima haozc > /tmp/haozc.sql
[root@hao-01 mysql]# mysqldump -uroot -phaomima mysql2 > /tmp/mysql2.sql
[root@hao-01 mysql]# mysqldump -uroot -phaomima zrlog > /tmp/zrlog.sql
[root@hao-01 mysql]# mysqldump -uroot -phaomima ceshiku > /tmp/ceshiku.sql
9. 進入mysql(root用戶下):
[root@hao-01 mysql]# mysql -uroot -phaomima
10. 建立repl用戶,針對ip是hao2從ip :
mysql> grant replication slave on *.* to 'repl'@'192.168.223.129' identified by 'haomima';
11. 表狀態鎖上,暫時不能再寫入數據 :
mysql> flush tables with read lock;
12. 查看紅框中兩個數值,hao2機器從上須要用這兩個數值 :
mysql> show master status;
17.4 配置從
1. 編輯/etc/my.cnf配置文件 :
[root@hao-02 ~]# vim /etc/my.cnf
添加內容:
server-id=129
2. 重啓mysql :
[root@hao-01 ~]# /etc/init.d/mysqld restart
3. 用scp命令複製hao1主/tmp/下全部以.sql備份的mysql數據庫文件,粘貼到本機hao2從的/tmp/目錄下 :
[root@hao-02 ~]# scp 192.168.223.128:/tmp/*.sql /tmp/
4. 若是執行找不到mysql -uroot命令,執行下面命令 :
[root@hao-02 ~]# alias 'mysql=/usr/local/mysql/bin/mysql'
[root@hao-02 ~]# alias 'mysqldump=/usr/local/mysql/bin/mysqldump'
[root@hao-02 ~]# ln -s /usr/local/mysql/bin/mysql /usr/bin
5. 登陸mysql(登陸root用戶) :
[root@hao-02 ~]# mysql -uroot
6. hao2從上建立和hao1主同樣的mysql用戶haozc :
mysql> create database haozc;
mysql> create database mysql2;
mysql> create database ceshiku;
mysql> create database zrlog;
7. 把hao1機器從 同步的.sql 庫文件,恢復到建立對應名稱庫下 :
[root@hao-02 mysql]# mysql -uroot haozc < /tmp/haozc.sql
[root@hao-02 mysql]# mysql -uroot mysql2 < /tmp/mysql2.sql
[root@hao-02 mysql]# mysql -uroot ceshiku < /tmp/ceshiku.sql
[root@hao-02 mysql]# mysql -uroot zrlog < /tmp/zrlog.sql
8. 登陸mysql,執行下面命令 :
(master_password='haomima', master_log_file='haozc.000001',見17.3章12節查看 )
[root@hao-02 ~]# mysql -uroot
mysql> stop slave;
mysql> change master to master_host='192.168.223.128',master_user='repl', master_password='haomima', master_log_file='haozc.000001', master_log_pos=1102;
mysql> start slave;
9. 查看主從配置是否成功 ?
mysql> show slave status\G
10. 在hao1機器主上,把以前鎖定的表解鎖(恢復寫入的操做) :
[root@hao-01 ~]# mysql -uroot -phaomima
mysql> unlock tables;
17.5 測試主從同步
配置參數
1. 主服務器上 :
binlog-do-db= //僅同步指定的庫(其餘庫不一樣步)
binlog-ignore-db= //忽略指定庫(其餘庫都同步)
2. 從服務器上 :
replicate_do_db= //(不經常使用)
replicate_ignore_db= //(不經常使用)
replicate_do_table= //(不經常使用)
replicate_ignore_table= //(不經常使用)
replicate_wild_do_table= //如aming.%, (支持通配符%)
replicate_wild_ignore_table=
測試主從:
1. hao1機器主上操做 :
[root@hao-01 ~]# mysql -uroot -phaomima
切換數據庫 :
mysql> use haozc
查看數據庫下全部表 :
mysql> show tables;
2. hao2機器從上操做 :
[root@hao-02 ~]# mysql -uroot
切換數據庫 :
mysql> use haozc
查看數據庫下全部表 :
mysql> show tables;
3. hao1機器主 刪除表(刪除表結構,慎重使用):
mysql> drop table biao1;
4. hao2機器從 查看全部表,是否還有主上刪除的表 ?
mysql> show tables;
注意:
到主從不能正常同步,提示uuid相同的錯誤。這是由於克隆機器致使。