MYSQL一個裝置上的主從複製實現 (GTID版)-windows
只記錄一次在一個裝置上實現mysql主從複製的過程,很詳細,建議收藏,用到的時候照著步驟做就可以,會記錄所有需要注意到的細節和一些容易遇到的坑以及解決辦法!
傳統的主從複製方式:祖傳的master_log_file + master_log_pos的複製方式,以及從零開始的資料庫配置可以參考這篇文章 ----MYSQL一個裝置上的主從複製實現-windows
然後前面的資料庫安裝和配置這篇就不在闡述。
如果需要在同一臺電腦(伺服器)上實現mysql的主從複製備份,需要一個主資料庫和一個從資料庫。
本文使用的是mysql-5.6.39-winx64免安裝版。安裝版的也可以,需要自行找到安裝生成的data所在目錄以及my.ini檔案位置。
因為在這之前我已經安裝好了主資料庫,本文只記錄從資料庫的安裝過程,(主資料庫也是個全新的,會記錄所有的配置)。
主資料庫埠號port = 3307。
從資料庫埠號port = 3308。
因為前面已經做過傳統的主從複製,現在來操作怎麼從傳統的主從複製改為GTID的方式,如果你的資料庫還沒有做過主從複製,可以省略其中的部分內容然後根據需要進行設定:
首先登入兩個資料庫服務(管理員命令視窗登入CMD):
主資料庫:
mysql -uroot -proot --protocol=tcp --host=localhost --port=3307
從資料庫:
mysql -uroot -proot --protocol=tcp --host=localhost --port=3308
檢視從伺服器的slave狀態:
show slave status \G;
mysql> show slave status \G;
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 127.0.0.1
Master_User: user_cp
Master_Port: 3307
Connect_Retry: 60
Master_Log_File: mysql-bin.000013
Read_Master_Log_Pos: 819
Relay_Log_File: DESKTOP-IDKR9K2-relay-bin.000003
Relay_Log_Pos: 605
Relay_Master_Log_File: mysql-bin.000013
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
現在為同步狀態Slave_IO_Running和Slave_SQL_Running都為Yes,
停止從資料庫的slave:
stop slave;
可以再看一下狀態現在Slave_IO_Running和Slave_SQL_Running都為No即可。
然後關閉兩個資料庫的服務。
修改兩個資料庫的my.ini檔案,檔案位置如果是免安裝版的資料庫是在安裝目錄下,如果是直裝版的資料庫檔案一般在這個位置:
C:\Program Files\MySql\MySQL Server x.x\
主從兩個資料庫的my.ini全部在[mysqld]標籤下新增(其他的配置可以參考文章:MYSQL一個裝置上的主從複製實現-windows前面的準備部分,就不在闡述):
#GTID
log-bin=mysql-bin
binlog_format=row
log_slave_updates=1
gtid_mode=on
enforce_gtid_consistency=on
然後重啟兩個資料庫的服務。
然後在從伺服器上做指向,登入從伺服器後執行(最好看一下從伺服器的slave狀態,如果是啟動的話需要先停止):
mysql> CHANGE master TO
-> master_HOST='127.0.0.1',
-> master_PORT=3307,
-> master_USER='root',
-> master_PASSWORD='root',
-> master_AUTO_POSITION=1;
然後啟動從資料庫的slave:
start slave;
然後檢視下從資料庫slave同步的狀態:
show slave status \G;
show slave status \G;
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 127.0.0.1
Master_User: root
Master_Port: 3307
Connect_Retry: 60
Master_Log_File: mysql-bin.000023
Read_Master_Log_Pos: 3627
Relay_Log_File: DESKTOP-IDKR9K2-relay-bin.000002
Relay_Log_Pos: 3837
Relay_Master_Log_File: mysql-bin.000023
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
現在為同步狀態Slave_IO_Running和Slave_SQL_Running都為Yes,
看一下主資料庫的事務資訊:
show master status \G;
show master status \G;
*************************** 1. row ***************************
File: mysql-bin.000023
Position: 3627
Binlog_Do_DB: test
Binlog_Ignore_DB: mysql
Executed_Gtid_Set: 9ac55696-eeaf-11eb-81f4-ecf4bbce2964:1-3
1 row in set (0.00 sec)
看一下從資料庫的事務資訊:
show master status \G;
show master status \G;
*************************** 1. row ***************************
File: mysql-bin.000001
Position: 3726
Binlog_Do_DB:
Binlog_Ignore_DB:
Executed_Gtid_Set: 5c8b0a34-ef72-11eb-86ea-40b076801d54:1,
9ac55696-eeaf-11eb-81f4-ecf4bbce2964:1-3
1 row in set (0.00 sec)
現在事務一直,同步正常,可以CRUD下主資料庫表內的資料看下從資料庫是否正常同步。