主從複製原理
1.該過程的第一部分就是master記錄二進制日誌。在每個事務更新數據完成之前,master在二進制日誌記錄這些改變。MySQL將事務寫入二進制日誌。在事件寫入二進制日誌完成後,master通知存儲引擎提交事務。
2.slave將master的Binary Log拷貝到它自己的Relay Log。首先,slave開始一個工作線程——I/O線程。I/O線程在master上打開一個普通的連接,然後開始binlog dump process。binlog dump process從master的二進制日誌中讀取事件,如果已經同步了master,它會睡眠並等待master產生新的事件。I/O線程將這些事件寫入Relay Log。
3.SQL slave thread(SQL從線程)處理該過程的最後一步。SQL Thread從Relay Log中讀取事件,並重放其中的事件,從而更新slave的數據,使其與master中的數據一致。只要該線程與I/O線程保持一致,Relay Log通常會位於OS的緩存中,所以Relay Log的開銷很小。
實現步驟
環境
防火牆和selinux都關閉
master | slave | |
---|---|---|
IP | 192.168.7.71 | 192.168.7.72 |
主機名 | master01 | slave01 |
OS | CentOS7 | CentOS7 |
MySQL版本 | 5.7.28 | 5.7.28 |
1.安裝
略
2.master配置
2.1將以下內容添加到my.cnf文件中,然後重新啓動數據庫。
# vim /etc/my.cnf
[mysqld]
log-bin = mysql-bin
server-id = 1
# 重啓服務
systemctl start mysqld
2.2 創建授權複製賬號
grant replication slave on *.* to repluser@'192.168.7.%' identified by '123.com';
2.3 查看二進制日誌文件名和position信息
mysql> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000001 | 154 | | | |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
3.slave配置
3.1 將以下內容添加到my.cnf文件中,然後重新啓動數據庫。
[mysqld]
server-id = 2
read_only = ON #設爲只讀,但是對超級用戶無效。
3.2 執行以下命令,指定連接主服務的信息。
mysql> CHANGE MASTER TO
-> MASTER_HOST='192.168.7.71',
-> MASTER_USER='repluser',
-> MASTER_PASSWORD='123.com',
-> MASTER_PORT=3306,
-> MASTER_LOG_FILE='mysql-bin.000001',
-> MASTER_LOG_POS=154;
注:一定要確保MASTER_LOG_FILE與文件匹配,並且MASTER_LOG_POS與先前的SHOW MASTER STATUS返回的位置匹配。
3.3 啓動slave
mysql> start slave;
3.4 查看I/O線程和SQL線程狀態,如果爲Yes表示與主服務器同步成功。
mysql> show slave status\G
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.7.71
Master_User: repluser
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000001
Read_Master_Log_Pos: 154
Relay_Log_File: slave01-relay-bin.000002
Relay_Log_Pos: 320
Relay_Master_Log_File: mysql-bin.000001
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
...省略信息...
3.5 和複製功能相關的文件
master.info:用於保存slave連接至master時的相關信息,例如賬號、密碼、服務器地址等
relay-log.info:保存在當前slave節點上已經複製的當前二進制日誌和本地relay log日誌的對應關係