mysql主从复制配置(基于GTID)

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/tianwei7518/article/details/53456943
MySQL 5.6 的新特性之一,是加入了全局事务 ID (GTID) 来强化数据库的主备一致性,故障恢复,以及容错能力。
GTID(Global Transaction Identifiers)是全局事务标识。当使用GTIDS时,在主上提交的每一个事务都会被识别和跟踪,并且运用到所有从MySQL,而且配置主从或者主从切换时不再需要指定 master_log_files和master_log_pos;由于GTID-base复制是完全基于事务的,所以能很简单的决定主从复制的一致性;官方建议Binlog采用Row格式。
GTID的表示方式:
source_id:transaction_id
source_id:表示执行事务的主库的UUID(server_uuid:Mysql5.6的data目录下启动时会生成auto.cnf文件记录了uuid,重启后uuid不变,删除文件后会重新生成新的uuid);
transaction_id:是一个从1开始自增的计数,表示在这个主库上执行的第n个事务;
由于每台Mysql的uuid是全球唯一的,transaction_id自身唯一,就保证了GTID全局唯一性
查询:show variables like 'server_uuid';
要在MySQL 5.6中使用复制功能,其服务配置段[mysqld]中于少应该定义如下选项:
1. binlog-format:二进制日志的格式,有row、statement和mixed几种类型;
需要注意的是:当设置隔离级别为读提交READ-COMMITED必须设置二进制日志格式为ROW,现在MySQL官方认为STATEMENT这个已经不再适合继续使用;但mixed类型在默认的事务隔离级别下,可能会导致主从数据不一致;log-slave-updates(slave更新是否记入日志)、gtid-mode(gtid类型)、enforce-gtid-consistency(强制gtid一致性)、report-port和report-host:用于启动GTID及满足附属的其它需求;
2.master-info-repository(资源库)和relay-log-info-repository:启用此两项,可用于实现在崩溃时保证二进制及从服务器安全的功能;
3.sync-master-info:确保服务器崩溃时无信息丢失;
4.slave-paralles-workers:设定从服务器的SQL线程数;0表示关闭多线程复制功能;值与你要复制的数据库数目相同即可;
5.binlog-checksum校验码、master-verify-checksum和slave-sql-verify-checksum:启用复制有关的所有校验功能;
6.binlog-rows-query-log-events:用于在二进制日志详细记录事件相关的信息,可降低故障排除的复杂度;
7.log-bin:启用二进制日志,这是保证复制功能的基本前提;
8.server-id:同一个复制拓扑中的所有服务器的id号必须惟一;
一、环境
master  192.168.0.109 
slave   192.168.0.110
mysql版本 5.7.12
二、配置
1.master配置
server-id=1
log-bin=mysql-bin
binlog_format=row
log-slave-updates=true
gtid-mode=on
enforce-gtid-consistency=true
master-info-repository=TABLE
relay-log-info-repository=TABLE
sync-master-info=1
slave-parallel-workers=4
binlog-rows-query-log-events=1
binlog-checksum=CRC32 
master-verify-checksum=1
slave-sql-verify-checksum=1
relay_log_purge = 1  
relay_log_recovery = 1
report-port=3306
report-host=192.168.0.109
2.slave配置
server-id=2
log-bin=mysql-bin
binlog_format=row
log-slave-updates=true
gtid-mode=on
enforce-gtid-consistency=true
master-info-repository=TABLE
relay-log-info-repository=TABLE
sync-master-info=1
slave-parallel-workers=4
binlog-rows-query-log-events=1
binlog-checksum=CRC32 
master-verify-checksum=1
slave-sql-verify-checksum=1
relay_log_purge = 1  
relay_log_recovery = 1  
report-port=3306
report-host=192.168.0.110
3.参数说明
binlog_format 
log-slave-updates/gtid-mode/enforce-gtid-consistency/report-port/report-host:用于启动GTID及满足附属的其它需求[其中启动GTID必须同时设置gtid-mode/enforce-gtid-consistency/]  
master-info-repository/relay-log-info-repository : 设置为TABLE,mysql.slave_master_info与 mysql.slave_relay_log_info 中,table都是innodb类型的,支持事务,比文件安全. 默认值是FILE, 比如master info就保存在master.info文件中,relay log info保存在relay-log.info文件中,如果服务器意外关闭,正确的relay info 没有来得及更新到 relay-log.info文件,这样会造成数据丢失
slave-parallel-workers :  开启基于库的多线程复制.默认是0,不开启,最大并发数为1024个线程  
relay_log_purge/relay_log_recovery :启用relaylog的自动修复功能,避免由于网络之类的外因造成日志损坏,主从停止
binlog-checksum/master-verify-checksum/slave-sql-verify-checksum : 启用binlog/relaylog的校验,防止日志出错  
三、开启复制
1.在master上添加复制用户
>create user 'repltest'@'192.168.0.%'  identified by 'Repltest123#@!';
>grant  replication slave on *.* to 'repltest'@'192.168.0.%';
2.在slave配置复制
change master to , 
-> master_host='192.168.0.109', 
-> master_port=3306,
-> master_user='repltest', 
-> master_password='Repltest123#@!',  
-> master_auto_position=1,  
-> master_delay=30;  
参数说明:
master_auto_position  自动寻找position号  
master_delay  延时30秒执行复制,relay日志会及时同步到slave机,只是日志的中的事件会根据事件的时间戳延时30秒执行.此参数具有实用性  
3.开启同步
start slave;
查看状态:show slave status\G;
主要看以下两个参数:[这两个参数如果是yes就表示主从同步正常]  
Slave_IO_Running: Yes    #IO线程
Slave_SQL_Running: Yes  #sql线程
Retrieved_Gtid_Set项:记录了relay日志从Master获取了binlog日志的位置 
Executed_Gtid_Set项:记录本机执行的binlog日志位置,(如果是从机,包括Master的binlog日志位置和slave本身的binlog日志位置)
4.测试
(略)
5.基于GTID复制出错的解决办法
当发现不能复制,IO线程不工作时,或者数据库,表、记录等冲突时。可以将从复制跳过已经丢失的binlog,继续复制或者重新做主从。
 show global variables like 'GTID_EXECUTED';
 stop slave;
set global GTID_PURGED="21ad8db5-f038-11e3-a14a-0200c0a80ad8:1-223937";
start slave;
 与GTID复制相关的参数:

gtid_executed:表示已经在该实例上执行过的事务;执行RESET MASTER可以置空该参数;也可以设置GTID_NEXT执行一个空事务来影响GTID_EXECUTED
gtid_owned:表示正在执行的事务的GTID以及对应的线程ID
gtid_purged:表示被删除的binlog事务GTID,它是GTID_EXCUTED的子集,MySQL5.6.9,该参数无法被设置
gtid_next:是SESSION级别参数,表示下一个事务被执行使用的GTID(show variables like ‘gtid_%’;)

参考文档:

展开阅读全文

没有更多推荐了,返回首页