1. 程式人生 > 其它 >MYSQL一個裝置上的主從複製實現 (GTID版)-windows

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_RunningSlave_SQL_Running都為Yes,

停止從資料庫的slave

stop slave;

可以再看一下狀態現在Slave_IO_RunningSlave_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下主資料庫表內的資料看下從資料庫是否正常同步。