MySQL复制(三)--基于全局事物标识符(GTID)配置复制

MySQL复制(三)--基于全局事物标识符(GTID)配置复制,第1张

概述基础环境: 主库 从库 服务器IP地址 192.168.10.11 192.168.10.12 版本 5.7.24 5.7.24 已存在的数据库 mysql> show databases; +

 

基础环境:

 主库从库
服务器IP地址192.168.10.11192.168.10.12
版本5.7.245.7.24
已存在的数据库
MysqL> show databases;+--------------------+| Database           || information_schema | lijiamandb         | MysqL              | performance_schema | sys                | testdb             ------------------+
------------------+

 

(一)什么是GTID

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

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

GTID由2部分构成:

GTID = source_ID:transaction_ID

其中source_ID为server_uuID,对单台服务器来说,是一个固定值。transaction_ID是事物的ID。

GTID举例:

3E11FA47-71CA-11E1-9E33-C80AA9429562:23

 

(二)使用GTID配置复制

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

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

[MysqLd]
# 启用GTID
gtID_mode=ONenforce-gtID-consistency=ON

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

 开启gtID后,数据库需要有事物执行,Executed_GtID_Set才会有值MysqL show master status;-----------------+----------+--------------+------------------+----------------------------------------+file              | position | binlog_Do_DB | binlog_Ignore_DB | Executed_GtID_Set                      | master-bin.000027 |      352 |              |                  | caa64a22-481a-11ea-b0f1-000c29fb6200:1 -----------------+----------+--------------+------------------+----------------------------------------+

 

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

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

> grant replication slave on *.* to 'rep'@%' IDentifIEd by 123';

 

(2.3)初始化从库(从)

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

[root@slavedb ~]# MysqLdump -uroot -p123456 -h 192.168.10.11 --single-transaction --all-databases --master-data=2  > master.sql

将备份还原到从库:

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

还原报错:

[root@slavedb ~]# MysqL -uroot -p123456 < master.sql
MysqL: [Warning] Using a password on the command line interface can be insecure.
ERROR 1840 (HY000) at line 24: @@GLOBAL.GTID_PURGED can only be set when @@GLOBAL.GTID_EXECUTED is empty.

处理方法:
[root@slavedb ~]# MysqL -uroot -p123456

MysqL> reset master;
query OK,0 rows affected (0.03 sec)

 

(2.4)从库配置(从)

如果尚未设置从服务器ID,或者当前值与您为主服务器选择的值冲突,请关闭从服务器并编辑[MysqLd]配置文件的 部分以指定唯一的服务器ID。例如:

[MysqLd]server_ID = 2

 

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

这里是与“使用二进制日志文件复制”差别最大的地方,在使用二进制方法时,我们需要指定二进制日志文件的位置(master_log_file,master_log_pos),但是在使用GTID时,MysqL会自动查找位置。

MysqL> CHANGE MASTER TO    -> master_host='192.168.10.11',-> master_port=3306rep1231;query OK,0 rows affected,2 warnings (0.00 sec)

启动从库复制相关进程:

start slave;query OK,1); Font-weight: bold">0 rows affected (0.01 sec)


 (2.6)确认复制状态(从)

在从库执行“ show slave status ”,如果Slave_IO_Running和Slave_sql_Running都是“YES”,说明复制正常。

show slave status \G*************************** 1. row *************************** Slave_IO_State: Waiting for master to send event Master_Host: 192.168.10.11 Master_User: rep Master_Port: 3306 Connect_Retry: 60 Master_Log_file: master000027 Read_Master_Log_Pos: 83440352 Relay_Log_file: slavedb-relay000002 Relay_Log_Pos: 37156249 Relay_Master_Log_file: master 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: Skip_Counter: Exec_Master_Log_Pos: 39897784 Relay_Log_Space: 80699026 Until_Condition: None Until_Log_file: Until_Log_Pos: Master_SSL_Allowed: No Master_SSL_CA_file: Master_SSL_CA_Path: Master_SSL_Cert: Master_SSL_Cipher: Master_SSL_Key: Seconds_Behind_Master: 430Master_SSL_Verify_Server_Cert: No Last_IO_Errno: Last_IO_Error: Last_sql_Errno: Last_sql_Error: Replicate_Ignore_Server_IDs: Master_Server_ID: 1 Master_UUID: caa64a22-000c29fb6200 Master_Info_file: /MysqL/data/master.info sql_Delay: sql_Remaining_Delay: NulL Slave_sql_Running_State: System lock Master_Retry_Count: 86400 Master_Bind: Last_IO_Error_Timestamp: Last_sql_Error_Timestamp: Master_SSL_Crl: Master_SSL_Crlpath: RetrIEved_GtID_Set: caa64a229202-280001 Executed_GtID_Set: caa64a221133885 auto_position: Replicate_Rewrite_DB: Channel_name: Master_TLS_Version: 1 row in set (0.00 sec)

 

【完】

 

 

附录:

MysqL复制(replication)文档集合:

1.复制概述
2.基于二进制日志文件位置(binlog)配置复制
3.基于全局事物标识符(GTID)配置复制
4.多源复制
5.级联复制
6.半同步复制
7.延迟复制
8.复制过滤规则
9.对复制进行故障排除
10.故障切换
11.复制管理
总结

以上是内存溢出为你收集整理的MySQL复制(三)--基于全局事物标识符(GTID)配置复制全部内容,希望文章能够帮你解决MySQL复制(三)--基于全局事物标识符(GTID)配置复制所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/sjk/1152460.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-31
下一篇 2022-05-31

发表评论

登录后才能评论

评论列表(0条)

保存