MySQL主从复制之GTID复制

MySQL主从复制之GTID复制


原文: https://www.cnblogs.com/hmwh/p/9198705.html


GTID复制又叫全局事物ID(global transaction ID),是一个已提交事物的编号,并且是一个全局唯一的编号,MYSQL5.6版本之后在主从复制类型上新增了GTID复制。

GTID是由server_uuid和事物id组成的,即GTID=servier_uuid:transacton_id。Server_uuid是在数据库启动过程中自动生成的,每台机器的server-uuid不一样。UUID存放在数据目录的auto.cnf文件下。而trasaciton_id就是事物提交时由系统顺序分配的一个不会重复的序列号。

 

3.1GTID存在的价值

1、GTID使用master_auto_position=1 代替了基于binlog和position号的主从复制搭建的方式,更便于主从复制的搭建。

2、GTID可以知道事务在最开始是在哪个实例上提交的。

3、GTID方便实现主从之间的failover,再也不用不断的去找position和binlog。

3.2GTID搭建模式

GTID不需要传统的binlog和position号了,而是在从库”change master to”时使用”master_auto_position=1”的方式搭建,这就让操作变得更加方便和可靠了。

 

3.3配置前期准备

在安装好主从数据库之后:

主库需要以下配置:

gtid_mode=on

enforce_gtid_consistency=on

log_bin=on

 

从库需要以下配置:

 

servier-id 主从库不能一样。

gtid_mode=on

enforce_gtid_consistency=on

log_slave_updates=1

 

主库操作:

创建主从复制账号

create user 'rep'@'192.16.20.%' identified by 'mysql';

 

grant replication slave on *.* to 'rep'@'172.16.20.%';

 

show grants for 'rep'@'172.16.20.%';

 

 

如果不同网段建议主从各建各的。

 

初始化:

/usr/local/mysql5.7/bin/mysqldump -S /tmp/mysql3307.sock --single-transaction -uroot -pmysql --master-data=2 -A > slave.sql(我全库导入的有问题,换成绝对路径就行,只用的test库)

 

注意:必须加参数 –master-data=2,让备份出来的文件中记录备份这一刻binlog文件与position号,为搭建主从环境做准备。查看备份文件中记录的当前binlog文件和position号。

 

 

scp salve.sql 172.16.20.21:/binlogbak

 

 

 

test库操作:

mysqldump -S /tmp/mysql3307.sock --single-transaction -uroot -pmysql --master-data=2 --database test > slave_test.sql

 

注意,如果主从GTI不一样,数据一致可以:

set global gtid_purged='*******';

 

 

如果数据不一样,GTID也不一样,建议按照下面先reset从库:reset master;

mysql -S /tmp/mysql3307.sock -uroot -pmysql < slave_test.sql

 

 

注意:多次恢复会报错,因为里面已经有gtid的信息了。

如果你还想继续强制恢复,可以在从库上 reset master ;reset后,gtid_executed,gtid_purged为空。

show global variables like '%gtid%';

 

3.4主从配置

 

1、如果是在已经跑的服务器,你需要重启一下mysql server。

2、启动之前,一定要先关闭master的写入,保证所有slave端都已经和master端数据保持同步。

3、所有slave需要加上skip_slave_start=1的配置参数,避免启动后还是使用老的复制协议。

 

 

在数据库命令行执行配置主从命令。

 

change master to master_host='172.16.20.32',master_port=3307,master_user='rep',master_password='mysql',master_auto_position=1;

 

提示:master_log_file='mysql-binlog.000010',MASTER_LOG_POS=797 这两个参数替换成了 master_auto_position=1

 

 

show slave status\G;

 

 

start slave;

 

stop slave;

reset slave all; 清空从库的所有配置信息。

start slave;

 

 

一般复制建议半同步+GTID 复制:

 

 

 

附带主从参数:

主:

[root@mysql5 ~]# cat /etc/my3307.cnf

[client]

port = 3307

socket = /tmp/mysql5.7.sock

[mysql]

prompt="\u@db \R:\m:\s [\d]> "

no-auto-rehash

[mysqld]

user = mysql

port = 3307

basedir = /usr/local/mysql5.7

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MySQL主从复制GTID(Global Transaction Identifier)是一种用于标识和跟踪事务的机制。GTID是一个全局唯一的标识符,用于确保主从复制中每个事务的唯一性和一致性。它在MySQL 5.6版本中引入,并在之后的版本中得到改进和增强。 使用GTID进行主从复制可以简化配置和管理,并提供更可靠的数据同步。下面是使用GTID进行主从复制的基本步骤: 1. 在主服务器上启用GTID功能: 在主服务器的配置文件(my.cnf)中添加以下参数: ``` [mysqld] server-id=1 log-bin enforce-gtid-consistency=true ``` 启用GTID功能并设置服务器ID和二进制日志。 2. 在从服务器上启用GTID功能: 在从服务器的配置文件中添加以下参数: ``` [mysqld] server-id=2 enforce-gtid-consistency=true ``` 设置服务器ID和启用GTID功能。 3. 配置主从关系: 在主服务器上创建一个用于复制的用户,并授予适当的权限。 4. 在从服务器上配置主服务器信息: 在从服务器上执行以下命令: ``` CHANGE MASTER TO MASTER_HOST='主服务器IP', MASTER_USER='复制用户', MASTER_PASSWORD='复制用户密码', MASTER_AUTO_POSITION=1; ``` 这将配置从服务器以使用GTID复制并将其连接到主服务器。 5. 启动主从复制: 在从服务器上执行以下命令开始复制: ``` START SLAVE; ``` 从服务器将开始从主服务器接收和应用事务。 通过以上步骤,你可以使用GTID实现MySQL主从复制。这种方式可以提供更高的数据一致性和可靠性,并简化了配置和管理过程。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值