MySQL5.7 主從復制配置
一、主從復制原理
MySQL
主從復制是一個異步
的復制
過程,主庫
發送更新事件
到從庫
,從庫
讀取更新記錄
,並執行
更新記錄
,使得從庫
的內容與主庫保持一致
。每一個主從復制
的連接,都有三個線程
。擁有多個從庫
的主庫
為每一個連接
到主庫
的從庫
創建一個 log dump
輸出線程,每一個從庫
都有它自己的 I/O
線程和 SQL
線程。
步驟:
1.主庫
會將所有
的更新
記錄保存到 Binarylog
文件。
2.每當有從庫
連接到主庫
的時候,主庫
都會創建一個 log dump
線程發送 Binarylog
文件到從庫
。
3.當從庫
復制開始的時候,從庫
就會創建兩個線程
進行處理,一個 I/O
線程,一個 SQL
線程。
4.I/O
線程去請求主庫
的 Binarylog
文件,並將得到的 Binarylog
文件寫到 Relaylog
文件中。
5.SQL
線程會讀取 Relaylog
文件中的日誌,並解析
成具體操作
,來實現主從
的操作一致
,而最終數據一致。
二、工具
-
VMware版本:12.0.0
-
Ubuntu版本:16.4
-
MySQL版本 :5.7.18
-
Master 服務器:192.168.128.1
-
Slave 服務器 :192.168.128.3
三、準備工作
1.安裝 MySQL5.7 詳見此處 ,我這裏的配置是,master 是安裝在本地windows環境下的mysql,slave是安裝在虛擬機linux下的mysql
2.如果從服務器
克隆
的主服務器
,則修改 auto.cnf
文件中 server-uuid
值,不然後面主從復制
會報 1593
錯誤,修改完記得重啟MySQL
3.關閉主、從
服務器防火墻
:
root@ubuntu:/etc# ufw disable
4.修改主從配置
文件(my.cnf):
## 192.168.128.1(master) #打開日誌 log_bin=mysql-bin #這個id不要與從數據庫id一樣,改id一般取當前服務器ip地址最後一位 server_id=1 binlog-do-db=cpa #要給從機同步的庫 binlog-ignore-db=mysql #不要給從機同步的庫 #自動清理1天前的log文件 expire_logs_days=1 ## 192.168.128.3(slave) log_bin=mysql-bin server_id=3
重啟
主從 MySQL
註
: server_id
必須唯一。
四、主從復制
1.master
創建授權用戶:192.168.128.1(master)
:
## 創建 test 用戶,指定該用戶只能在主庫 192.168.128.3 上使用 MyPass1! 密碼登錄 mysql> create user ‘test‘@‘192.168.128.3‘ identified by ‘MyPass1!‘; ## 為 test 用戶賦予 REPLICATION SLAVE 權限。 mysql> grant replication slave on *.* to ‘test‘@‘192.168.128.3‘; ## 查看用戶 mysql> select user,host from mysql.user; ## 查看 master 狀態 mysql> show master status;
註
:
這裏的 mysql-bin.000001
和 Position
值 slave
配置時需要用到。
2.將 master
中現有的數據信息導出
:
$ mysqldump -u root -p --all-databases --master-data > all.sql
3.將 all.sql
發送到 slave
服務器 tmp
目錄下:
$ scp all.sql root@192.168.78.130:/tmp
4.slave
導入 master
數據,使 master-slave
數據保持一致
:
$ mysql -uroot -p < all.sql
註:2,3,4步主要作用是使主從數據庫的數據保持一致,這裏如果不會使用命令導出導入sql文件的話,可以借助工具實現,如Navicat
5.使 slave
與 master
建立連接,從而同步:
# 在slave上操作 mysql> change master to -> master_host=‘192.168.128.1‘, -> master_user=‘test‘, -> master_password=‘MyPass1!‘, -> master_log_file=‘mysql-bin.000001‘, -> master_log_pos=1244; mysql> start slave; mysql> show slave status \G
註
:
-
master_log_file
和master_log_pos
值為主庫
上面執行show master status
得到 -
如果
Slave_IO_Running
和Slave_SQL_Running
都為Yes
,說明配置成功
-
如果其中一項不為
Yes
,查看Last_IO_Errno
錯誤碼和錯誤信息
,或者查看MySQL
日誌信息並查找對應問題
五、主從配置檢驗
master
插入一條數據,slave
查看是否成功,
master
刪除一條數據,slave
查看是否成功,
MySQL5.7 主從復制配置