MySQL运维实战(7.1) 开启GTID复制

俊达2年前技术文章1137

MySQL从5.6版本开始支持GTID复制。开启GTID之后,主库上执行的每一个事务都有一个全局唯一的ID。GTID由两部分组成:server_uuid和事务序列号。初始化数据库时,会生成一个全局唯一的server_uuid,server_uuid保存在datadir下的auto.cnf中:

# cat auto.cnf
[auto]
server-uuid=e7ce5684-09b8-11ee-9dd0-fa8338b09400


如果删除auto.cnf,重启实例时会重新生成。事务序列号在事务提交时按顺序生成。

GTID事务复制到备库时,GTID保持不变。开启GTID有很多优点:

1、MySQL会记录执行过的GTID事务,这样就可以避免重复执行同一个事务。如果没有开启GTID,change master时如果指定的位点不对,可能会重复执行事务,引起主备数据不一致或复制中断。

2、change master时支持自动定位,mysql会根据当前实例已经执行过的GTID事务,自动判断需要同步哪些binlog。


1、主库开启GTID

除了常规的参数,主库需要配置enforce_gtid_consistency和gtid_mode

enforce_gtid_consistency=ON
gtid_mode=ON

log_bin=/data/mysql5.6/binlog/binlog
log_slave_updates=ON
binlog_format=ROW
server_id=234


2、主库创建复制账号

3、备库配置

5.6版本开启GTID时,备库也必须开启log-bin和log-slave-updates,否则无法启动实例。

enforce_gtid_consistency=ON
gtid_mode=ON

log_bin=/data/mysql5.6/binlog/binlog

log_slave_updates=ON
binlog_format=ROW
server_id=236


5.6版本开启GTID,不设置log-bin和log-slave-updates,实例无法启动:

2023-06-14 14:56:35 23275 [ERROR] --gtid-mode=ON or UPGRADE_STEP_1 or UPGRADE_STEP_2 requires --log-bin and --log-slave-updates
2023-06-14 14:56:35 23275 [ERROR] Aborting


从5.7版本开始,备库不开启binlog和log-slave-updates也可以使用GTID。




4、备库初始化


这一步和非GTID的步骤基本一样。不过开启GTID后,通常需要记录GTID_PURGED,作为复制的起点。

/opt/mysql5.7/bin/mysqldump -uroot -h127.0.0.1 -P3357 -pabc123 --all-databases \ 
--master-data=2 --routines --flush-privileges --triggers --events > /tmp/mysql57_dump.sql

  • --gtid-mode=auto:如果数据库开启了GTID,则备份文件中会加入set global GTID_PURGED=xxx;


5、备库创建复制通道

change master to master_host='172.16.121.234',master_port=3356,\
master_user='rep',master_password='rep123', master_auto_position=1;


开启GTID之后,可以在change master时指定master_auto_position=1,启用自动定位。这样就不需要指定具体的binlog位点。slave会根据gtid_executed自动计算需要同步主库的哪些binlog。


相关文章

MySQL运维实战(4.1) MySQL表存储引擎

MySQL表的特点和其他数据库如Oracle、SQL Server相比,mysql有一些特点:MySQL使用插件式存储引擎,同一个数据库中的表可以使用不同的存储引擎。存储引擎决定了表的物理存储格式。表...

MySQL运维实战之ProxySQL(9.2)ProxySQL安装和配置

proxysql安装proxysql提供了各个linux发行版的安装包,我们可以使用操作系统的包管理系统来安装proxysql。这里我们以CentOS 7为例:1、从github下载安装包根据OS版本...

MySQL运维实战(5.1) 字符和编码的基本概念

MySQL运维实战(5.1) 字符和编码的基本概念

字符和编码字符字符是符号,是人们用于交流的各类符号,如26个英文字母、汉字、标点符号、数学运算符、其他语言的字母和符号。编码编码是计算机中以二进制方式存储字符的方式。字符集字符集是字符和编码的映射表。...

MySQL运维实战(1.1)安装部署:使用RPM进行安装部署

MySQL运维实战(1.1)安装部署:使用RPM进行安装部署

我们在生产环境部署mysql时,一般很少使用rpm。用rpm或或者其他包管理器安装mysql,好处是安装简单,而且很多系统可能都自带了某个版本的mysql。但是使用RPM安装也存在一些缺点:1、rpm...

MySQL运维实战(3.3) 管理数据库(database)

数据库使用create database语句创建数据库。创建数据库的账号需要有create权限。创建数据库用户拥有create权限才能创建数据库。-- 例子:创建dba用户,拥有创建数据库名...

MySQL运维实战之备份和恢复(8.3)xtrabackup增量备份

xtrabackup支持增量备份。在做增量备份之前,需要先做一个全量备份。xtrabackup会基于innodb page的lsn号来判断是否需要备份一个page。如果page lsn大于上次备份的l...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。