只记录一次在一个设备上实现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_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='主数据库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下主数据库表内的数据看下从数据库是否正常同步。