只记录一次在一个设备上实现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 -p****** --protocol=tcp --host=localhost --port=3307


从数据库:


mysql -uroot -p****** --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='主数据库IP地址',
-> master_PORT=主数据库端口号,
-> master_USER='主数据库用户',
-> master_PASSWORD='主数据库用户密码',
-> 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下主数据库表内的数据看下从数据库是否正常同步。