Mysql8.0 主从GTID复制

(一)什么是GTID

GTID全称为全局事物标识符(global transaction identifiers),GTID具有唯一性,与主服务器上提交的每个事务相关联,如果客户端提交事务到主服务器上,则为其分配一个新的GTID,GTID是单调递增的。该标识符不仅对于主数据库是惟一的,而且在给定复制拓扑中的所有服务器上也是唯一的。GTID信息存储在数据库mysql.gtid_executed表中,该表中的一行包含它代表的每个GTID或一组GTID,始发服务器的UUID以及该组的起始和结束事务ID。

如果具有给定GTID的事务已开始在服务器上执行,但尚未提交或回滚,则在具有相同GTID的服务器上启动并发事务的任何尝试都将被阻止。服务器既不开始执行并发事务,也没有将控制权返回给客户端。一旦对事务的第一次尝试提交或回滚,在同一GTID上阻塞的并发会话可能会继续进行。如果第一次尝试回滚,则一个并发会话将继续尝试事务,并且在同一GTID上阻塞的任何其他并发会话将保持阻塞状态。如果进行了第一次尝试,则所有并发会话都将停止阻塞,并自动跳过事务的所有语句。

(二)使用GTID配置复制

(1)开启GTID(主从都需配置)

要启用基于GTID的复制,必须将gtid_mode变量设置为ON,并启用变量enforce_gtid_consistency为ON。

vim /etc/my.cnf 

[mysqld]

# 启用GTID

gtid_mode=ON

enforce-gtid-consistency=ON

配置完成,重启数据库生效。可以使用show master status来查看gtid值

(三)测试开启事务,提交事务、回滚

mysql>  insert into class values(1,'笔记本','北京');

Query OK, 1 row affected (0.11 sec) 

mysql>  insert into class values(2,'CPU','天津');

Query OK, 1 row affected (0.01 sec)

mysql>  insert into class values(3,'显示器','上海');

Query OK, 1 row affected (0.01 sec)

mysql> select * from class;

+----+-----------+---------+

| id | pro_name  | address |

+----+-----------+---------+

|  1 | 笔记本    | 北京    |

|  2 | CPU       | 天津    |

|  3 | 显示器    | 上海    |

+----+-----------+---------+

3 rows in set (0.00 sec)

 

mysql> start transaction;   

Query OK, 0 rows affected (0.00 sec)

 

mysql> insert into class values(4,'显卡','湖南');

Query OK, 1 row affected (0.01 sec)

 

mysql> select * from class;

+----+-----------+---------+

| id | pro_name  | address |

+----+-----------+---------+

|  1 | 笔记本    | 北京    |

|  2 | CPU       | 天津    |

|  3 | 显示器    | 上海    |

|  4 | 显卡      | 湖南    |

+----+-----------+---------+

4 rows in set (0.00 sec)

 

mysql> rollback;  #回滚

Query OK, 0 rows affected (0.01 sec)

在查询,没有ID4的数据了,只要没有提示的事务,都可以回滚的

mysql> select * from class;

+----+-----------+---------+

| id | pro_name  | address |

+----+-----------+---------+

|  1 | 笔记本    | 北京    |

|  2 | CPU       | 天津    |

|  3 | 显示器    | 上海    |

+----+-----------+---------+

3 rows in set (0.00 sec)

(四)开启gtid后,数据库需要有事物执行,Executed_Gtid_Set才会有值

在这里插入图片描述

(1)创建用于复制的用户(主)

每个从服务器都需要使用MySQL的用户和密码连接到主服务器上,因此需要在主服务器上创建MySQL的用户,用于进行复制操作。可以为每个从库单独创建一个账号,也可以使用同一个账号。账号需具有“replication slave”权限

mysql> CREATE USER 'repl'@'192.168.20.%' IDENTIFIED by '123456';

Query OK, 0 rows affected (0.02 sec)

mysql>  grant replication slave on *.* to 'repl'@'192.168.20.%';

Query OK, 0 rows affected (0.02 sec)

(2)初始化从库(从)

备份主数据库,直接在备库节点执行

[root@slavedbdb ~]# mysqldump  -uroot -p123456 -h 192.168.20.40 -p3306 --single-transaction  --master-data=2 --flush-logs --flush-privileges --events --routines  --all-databases > /root/master.sql

[root@slavedb ~]# mysql -uroot -p123456 < /root/master.sql

(3)将从数据库添加到复制环境(从)

注意:这里和使用二进制日志文件复制不同,使用GTID时,MySQL会自动查找位置

mysql> CHANGE MASTER TO

    -> master_host='192.168.20.40',

    -> master_port=3306,

    -> master_user='repl',

    -> master_password='123456',

    -> MASTER_AUTO_POSITION = 1;

Query OK, 0 rows affected, 2 warnings (0.00 sec)

启动从库复制

mysql> start slave;

Query OK, 0 rows affected (0.01 sec)

(4)确认主从复制

在从库执行show slave status 
mysql> show slave status \G

*************************** 1. row ***************************

               Slave_IO_State: Waiting for master to send event

                  Master_Host: 192.168.20.40

                  Master_User: repl

                  Master_Port: 3306

                Connect_Retry: 40

              Master_Log_File: master-bin.000001

          Read_Master_Log_Pos: 587

               Relay_Log_File: slavedb-relay-bin.000002

                Relay_Log_Pos: 4

        Relay_Master_Log_File: master-bin.000001

             Slave_IO_Running: Yes

            Slave_SQL_Running: Yes

              Replicate_Do_DB:

          Replicate_Ignore_DB:

           Replicate_Do_Table:

       Replicate_Ignore_Table:

      Replicate_Wild_Do_Table:

  Replicate_Wild_Ignore_Table:

                   Last_Errno: 0

                   Last_Error: 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值