MySQL主從複製實現

主從複製原理

MySQL主從複製實現

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日誌的對應關係
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章