1. 程式人生 > >MySQL5.7 主從復制配置

MySQL5.7 主從復制配置

art AC vmw src mysql- 主服務器 lec serve 自動清理

一、主從復制原理

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.000001Positionslave 配置時需要用到。

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.使 slavemaster 建立連接,從而同步:

# 在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_filemaster_log_pos值為主庫上面執行show master status得到

  • 如果 Slave_IO_RunningSlave_SQL_Running 都為 Yes,說明配置成功

  • 如果其中一項不為 Yes,查看 Last_IO_Errno 錯誤碼和錯誤信息,或者查看 MySQL 日誌信息並查找對應問題

五、主從配置檢驗

master 插入一條數據,slave查看是否成功,

master 刪除一條數據,slave查看是否成功,

技術分享圖片

MySQL5.7 主從復制配置