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 -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下主数据库表内的数据看下从数据库是否正常同步。

 

上一篇:PTA德州扑克


下一篇:Python开发【第二章】python入门