Mysql 基于GTID的复制

7 篇文章 0 订阅

一、什么是GTID

GTID(GlobalTransaction ID)是Mysql5.6开始的一种新的主从复制方式,其实现方式和基于日志点的复制存在很大差异。原来基于日志点的复制方式中,从db链接主db从哪个日志文件的偏移量开始增量同步,如果偏移量设置不对就可能造成遗漏或者重复同步数据。GTID复制中,从库会讲主库上所有没有在从库上执行的事务执行一次,并且保证只执行一次。
说了这么多到底什么是GTID呢?gtid 是全局唯一事务ID,并保证每一个在主库上执行的事务都有一个唯一的id
GTID=source_id:transaction_id
优点:
1、可以很方便的进行故障转移
2、从库上不会丢失任何主库上的事务
缺点:
1、故障处理比较复杂
2、对执行的SQL有一定限制
选择复制模式需要考虑的几个问题:
1、版本问题:Mysql5.6后期版本和Mysql5.7(本文采用Mysql5.7测试安装)
2、复制架构及主从切换
3、所有使用的高可用管理插件
4、对应用的支持程度

二、基于日志点主从复制

参考博客:http://blog.csdn.net/hfmbook/article/details/52299302

三、基于GTID复制

安装Mysql的过程就不在细说了,直接开始进入gtid主从复制的配置方式。

3.1 创建复制账号

192.168.1.% 表示IP端为192.168.1.0-255的IP短都有权限访问

#创建账号
grant replication slave on *.* to 'repl'@'192.168.1.%' identified by '123456';
# 立即生效
flush privileges;
3.2 配置主数据库服务器

my.cnf配置内容

[mysqld]
# 根据实际情况自己拟定
basedir = /opt/soft/run/mysql1
datadir = /opt/soft/data/mysql1
#保证mysql集群环境众不存在相同server_id即可
server_id = 100
# binlog日志名称
log_bin = master
# 开启gtid模式
gtid_mode = on
# gtid_mode 开启后必需同时开启 enforce_gtid_consistency,开启此选项后 某些语句不在支持.
# 例如: create table t as select *  from table ;
enforce_gtid_consistency=on
# gtid主从 必需开启项目
log-slave-updates=on
# 根据自己情况拟定,没有特殊需求 默认即可
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
3.3 配置从数据库服务器

my.cnf配置内容

[mysqld]
# 根据实际情况自己拟定
basedir = /opt/soft/run/mysql2
datadir = /opt/soft/data/mysql2
#保证mysql集群环境众不存在相同server_id即可
server_id = 101
# binlog日志名称
log_bin = master
# 开启gtid模式
gtid_mode = on
# gtid_mode 开启后必需同时开启 enforce_gtid_consistency,开启此选项后 某些语句不在支持.
# 例如: create table t as select *  from table ;
enforce_gtid_consistency=on
# gtid主从 必需开启项目
log-slave-updates=on
# 如果不是双主模式,建议看起只读模式 不让其他账号主动写入数据
read_only=on
# 存储主服务器的信息,默认存储在文件这中。
master_info_repository = TABLE
relay_log_info_repository = TABLE
# 配置binlog的格式,分别为1、row 整行都以二进制方式记录到binlog中 2、STATEMENT记录sql到binlog中 3、mixed 根据sql判断分别记录2进制数据和sql到binlog中
binlog_format = mixed 
#binlog只记录修改的列到日志文件中
binlog_row_image=minimal
# 根据自己情况拟定,没有特殊需求 默认即可
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
3.3 启动基于GTID的复制

a、备份主库

mysqldump --single-transaction --master-data=2 --triggers --routines --all--databases -uroot -p > all.sql

b、从库上恢复数据

mysql -uroot -p < all.sql

在从数据库上执行

# 指定master信息
change master to master_host = '192.168.1.11' , master_user = 'repl' , master_password='123456' , master_port = 3306 , master_auto_position = 1 ; 
# 启动从开始复制日志
start slave ; 
# 查看同步状态
show slave status \G 
## 看到 slave_io_running = YES 和 slave_sql_running = YES 后说明主从同步已经启动,可以在主库上插入新增修改几条数据测试下从库上是否能查询到
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值