一、原理
mysql主從配置的流程大體如圖:
1)master會將變動記錄到二進制日志里面;
2)master有一個I/O線程將二進制日志發送到slave;
3) slave有一個I/O線程把master發送的二進制寫入到relay日志里面;
4)slave有一個SQL線程,按照relay日志處理slave的數據;
二、操作步驟
按照原理,我們開啟mysql主從復制,我們大體需要做以下操作:
1)開啟master的二進制日志
2)開啟slave的二進制日志
3)將slave指向master
4)開始復制
三、開啟master二進制日志
1)編輯mysql的配置文件,使用命令:
vim /etc/my.cnf
2)添加二進制日志配置,開啟二進制(master-bin只是日志文件名稱,可以自己指定)
log-bin=master-bin
server-id=1
注意:server-id是要指定的,不然會報錯,每一台指定一個唯一標識符
四、授權
我們需要給slave配置一個用戶/密碼的權限
mysql>GRANT REPLICATION SLAVE ON *.* TO '用戶名'@'slave數據庫的IP地址' IDENTIFIED BY '密碼';
這行命令的意思是:允許在某個IP地址的某個用戶以某個密碼對當前數據庫的所有庫和所有表進行復制操作
注意:以上配置了權限,我們需要刷新以下權限使用命令:
mysql>flush privileges;
或者直接重啟mysql服務:
service mysql restart;
五、查看以下master的狀態
其實主要是查看以下master的日志文件名字,以及文件所在的位置,使用命令:
show master status;
可以看到類似如下信息:
+-------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+-------------------+----------+--------------+------------------+-------------------+
| master-bin.000001 | 1516 | | | |
+-------------------+----------+--------------+------------------+-------------------+
File: 日志文件名稱
Position: 日志所在位置
六、開啟slave的二進制日志
進入slave的服務器
1)編輯mysql的配置文件,使用命令:
vim /etc/my.cnf
2)添加二進制日志配置,開啟二進制(relay-bin只是日志文件名稱,可以自己指定)
log-bin=relay-bin
server-id=2
注意:server-id是要指定的,不然會報錯,每一台指定一個唯一標識符
七、將slave指向master
mysql>CHANGE MASTER TO
>MASTER_HOST='master所在服務器的IP',
>MASTER_USER='master授權的賬號',
>MASTER_PASSWORD='master授權的密碼',
>MASTER_LOG_FILE='master的日志文件名',
>MASTER_LOG_POS=master的日志所在位置;
八、開始主從復制
在slave上執行
mysql>start slave;
我們可以查看slave的運行狀態:
show slave status\G;
可以看到類似如下內容:
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: master的IP地址
Master_User: root
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: master-bin.000001
Read_Master_Log_Pos: 1516
Relay_Log_File: slave-bin.000004
Relay_Log_Pos: 1117
Relay_Master_Log_File: master-bin.000001
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
......
注意:
Slave_IO_Running: YES 表示slave的日志讀取線程開啟
Slave_SQL_Running: YES 表示SQL執行線程開啟
如果有主從復制有錯誤信息其實也可以看到
九、測試
以上我們就將主從復制功能設置完畢了,我們可以通過在master里面創建數據庫,或者表,插入數據等來測試一下
十、注意點
1)開啟了主從復制,slave庫如果寫入數據的話,可能導致數據回滾從而主從復制線程中斷,可以通過以下方式解決:
mysql> stop slave;
mysql> set GLOBAL SQL_SLAVE_SKIP_COUNTER=1;
mysql> start slave;
2)如果要停止slave的復制可以使用命令:
mysql>stop slave;
3)由於主從復制是基於I/O的日志,所以會存在一定延時,如果對數據一致性要求非常高的話,簡單的主從復制在實際環境中會存在問題
參考文章:
1)https://www.cnblogs.com/phpstudy2015-6/p/6485819.html#_label0
2)https://www.linuxidc.com/Linux/2014-02/96945.htm