版權聲明:轉載請注明出處,謝謝配合。 https://blog.csdn.net/zyhlwzy/article/details/80569422
MySQL 主從復制的方式有多種,本文主要演示基於基於日志(binlog)的主從復制方式。
MySQL 主從復制(也稱 A/B 復制) 的原理
-
Master將數據改變記錄到二進制日志(binary log)中,也就是配置文件log-bin指定的文件,
這些記錄叫做二進制日志事件(binary log events); -
Slave 通過 I/O 線程讀取 Master 中的 binary log events 並寫入到它的中繼日志(relay log);
-
Slave 重做中繼日志中的事件, 把中繼日志中的事件信息一條一條的在本地執行一次,完
成數據在本地的存儲, 從而實現將改變反映到它自己的數據(數據重放)。
主從配置需要注意的點
-
主從服務器操作系統版本和位數一致;
-
Master 和 Slave 數據庫的版本要一致;
-
Master 和 Slave 數據庫中的數據要一致;
-
Master 開啟二進制日志, Master 和 Slave 的 server_id 在局域網內必須唯一;
主從配置的簡要步驟
Master 上的配置
- 安裝數據庫;
- 修改數據庫配置文件, 指明 server_id, 開啟二進制日志(log-bin);
- 啟動數據庫, 查看當前是哪個日志, position 號是多少;
- 登錄數據庫, 授權數據復制用戶(IP 地址為從機 IP 地址, 如果是雙向主從, 這里的還需要授權本機的 IP 地址, 此時自己的 IP 地址就是從 IP 地址);
- 備份數據庫(記得加鎖和解鎖);
- 傳送備份數據到 Slave 上;
- 啟動數據庫;
以下步驟, 為單向主從搭建成功, 想搭建雙向主從需要的步驟:
- 登錄數據庫, 指定 Master 的地址、 用戶、 密碼等信息(此步僅雙向主從時需要);
- 開啟同步, 查看狀態;
Slave 上的配置
- 安裝數據庫;
- 修改數據庫配置文件, 指明 server_id(如果是搭建雙向主從的話, 也要開啟二進制
日志 log-bin); - 啟動數據庫, 還原備份;
- 查看當前是哪個日志, position 號是多少(單向主從此步不需要, 雙向主從需要);
- 指定 Master 的地址、 用戶、 密碼等信息;
- 開啟同步, 查看狀態。
1、主節(Master)點配置
修改 Master 的配置文件/etc/my.cnf
vi /etc/my.cnf
- 1
在my.cnf文件中加入如下配置內容
[mysqld] log-bin=mysql-bin server-id=1
- 1
- 2
- 3
2、從節點(Slave)配置
修改 Slave 的配置文件/etc/my.cnf
vi /etc/my.cnf
- 1
在my.cnf文件中加入如下配置內容
[mysqld] server-id=2
- 1
- 2
3、創建用於復制操作的用戶
在主節點創建一個用戶repl,用於從節點鏈接主節點時使用。
mysql> CREATE USER 'repl'@'192.168.199.198' IDENTIFIED WITH mysql_native_password BY 'Ron_master_1'; mysql> GRANT REPLICATION SLAVE ON *.* TO 'repl'@'192.168.199.198';
- 1
- 2
刷新授權表信息
mysql> flush privileges;
- 1
4、獲取主節點當前binary log文件名和位置(position)
mysql> SHOW MASTER STATUS;
- 1
5、在從(Slave)節點上設置主節點參數
mysql> CHANGE MASTER TO MASTER_HOST='192.168.199.149', MASTER_USER='repl', MASTER_PASSWORD='Ron_master_1', MASTER_LOG_FILE='binlog.000006', MASTER_LOG_POS=856;
- 1
- 2
- 3
- 4
- 5
- 6
6、查看主從同步狀態
mysql> show slave status\G;
- 1
7、開啟主從同步
mysql> start slave;
- 1
8、再查看主從同步狀態
mysql> show slave status\G;
- 1
查看狀態時,可能會出現I/O任務啟動失敗的情況,即如下錯誤:
Last_IO_Error: Fatal error: The slave I/O thread stops because master and slave have equal MySQL server ids; these ids must be different for replication to work (or the –replicate-same-server-id option must be used on slave but this does not always make sense; please check the manual before using it).
這是因為在MySQL主從結構中,從機上的server_id和主機上的server_id不能相同,我們可以看一下主機上的server_id和從機上的server_id是否相同。
mysql> show variables like 'server_id';
- 1
主機:
從機:
這里我們把從機的server_id改成2
mysql> set global server_id=2; #此處的數值和my.cnf里設置的一樣就行
- 1
9、重新開啟同步並查看裝態
mysql> start slave;
mysql> show slave status\G;
- 1
- 2

開啟主從之后,如果狀態如上圖所示,那么說明主從信息就已經配置好了,接下來我們測試一下在主機上創建一個數據庫,然后在從機上是否能夠同步創建。
首先看一下我們主機和從機除了MySQL本身自帶的數據庫之前目前是沒有任何數據的。

