1. 程式人生 > >MySQL 5.7.22 主從複製配置

MySQL 5.7.22 主從複製配置

一、主從複製原理

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 WorkStation Pro版本:12.5.7 build-5813279

REL版本:6.5

MySQL版本 :5.7.22

Master 伺服器:192.168.1.117

Slave 伺服器 :192.168.1.228

三、準備工作

1. 安裝 MySQL5.7.22 2.如果從伺服器是克隆的主伺服器,則修改 auto.cnf(vi /var/lib/mysql/auto.cnf) 檔案中 server-uuid 值

2. ,不然後面主從複製會報 1593 錯誤,修改完記得重啟MySQL

3.關閉主、從伺服器防火牆:

4.修改主從配置檔案(my.cnf):vi /etc/my.cnf

#master 伺服器地址

## 192.168.78.117(master)

bind-address=192.168.1.117

log_bin=mysql-bin

server_id=117

#slave 伺服器地址

## 192.168.78.228(slave)

bind-address=192.168.1.228

log_bin=mysql-bin

server_id=228

重啟主從 MySQL:

service mysqld restart

注: server_id 必須唯一。

5.master 上建立一個測試資料庫(test):

$ create database test;

$ use test;

$ create table test(id int(11), value varchar(20));

$ insert into test values(1, 'aa'),(2, 'bb'),(3, 'cc');

$ create database test1;

$ use test1;

$ create table test1(id int(11), value varchar(20));

$ insert into test1 values(1, 'aa'),(2, 'bb'),(3, 'cc');

四、主從複製

1.master建立授權使用者: 192.168.78.128(master):

## 建立 test 使用者,指定該使用者只能在主庫 192.168.78.130 上使用 MyPass1! 密碼登入

mysql> create user 'test1'@'192.168.1.228' identified by 'MyPass1!';

## 為 test 使用者賦予 REPLICATION SLAVE 許可權。

mysql> grant replication slave on *.* to 'test1'@'192.168.1.228';

flush privileges; 

## 檢視使用者

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 [email protected]:/tmp

4.slave 匯入 master 資料,使 master-slave 資料保持一致:

192.168.78.130(slave):

$ mysql –u root -p < all.sql

5.使 slave 與 master 建立連線,從而同步(在從伺服器上操作):

mysql> change master to

    -> master_host='192.168.1.117',

    -> master_user='test1',

    -> master_password='MyPass1!',

    -> master_log_file='mysql-bin.000001',

    -> master_log_pos=2193;

mysql> start slave;

mysql> show slave status \G

注:

l master_log_file 和 master_log_pos值為主庫上面執行show master status得到

l 如果 Slave_IO_Running 和 Slave_SQL_Running 都為 Yes,說明配置成功

l 如果其中一項不為 Yes,檢視 Last_IO_Errno 錯誤碼和錯誤資訊,或者檢視 MySQL 日誌資訊並查詢對應問題

五、主從配置檢驗

master 插入一條資料,slave檢視是否成功