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檢視是否成功