简介:更多深度文章,请关注云计算频道:https://yq.aliyun.com/cloudGTID 和 START SLAVESTART SLAVE 语法START SLAVE 如何从multi-threaded slave 转化成 single-threaded modeSTART SLAVE UNTIL SQL_AFTER_MTS_GAPS;S ...
更多深度文章,请关注云计算频道:https://yq.aliyun.com/cloudGTID 和 START SLAVE
START SLAVE [thread_types] [until_option] [connection_options]
START SLAVE UNTIL SQL_AFTER_MTS_GAPS;SET @@GLOBAL.slave_parallel_workers = 0;START SLAVE SQL_THREAD;GTID 和 upgrade 如果 --gtid-mode=ON ,那么在使用upgrade时候,不推荐使用--write-binlog 选项。GTID 和 mysql.gtid_executed
gtid 会实时的写入到mysql.gtid_executed表中,且根据executed_gtids_compression_period=N来压缩
gtid 不会实时的写入到mysql.gtid_executed,executed_gtids_compression_period会失效。GTID 和 gtid_next http://dev.mysql.com/doc/refman/5.7/en/replication-options-gtids.html#sysvar_gtid_next
* AUTOMATIC: Use the next automatically-generated global transaction ID.
答案:错,一般情况下事务是从小到大,顺序执行的。 但是如果再MTS场景,或者是人工设置gtid_next的情况下,就可能不是顺序执行了 dba:(none)> show master status;GTID 和 MHA 请参考MHA源码解析
* replication 架构GTID 和 备份(物理备份+逻辑备份) 物理备份:xtrabackup,其他等逻辑备份:mysqldump,mydumper,mysqlpump等
备份的时候,只要在备份的时候记录下Executed_Gtid_Set($gtid_dump)即可,这个可以用于重新change master;reset master;SET @@GLOBAL.GTID_PURGED="$gtid_dump";change master to master_auto_position=1;
* mysqldump 中 sql_log_bin 默认是关闭的。 SET @@SESSION.SQL_LOG_BIN= 0; 所以这里用途非常重要GTID 和 crash safe slave slave relay log 不完整怎么办?(relay-log-recover=0)relay-log-recover=1 不考虑,因为它会舍弃掉relay log
* 官方解释:1) 非GTID模式下,如何保证slave crash safe 呢?
从上面可以知道,relay log的记录非常重要,那么relay log 不完整,会怎么样呢? 1) master 创建一张10G的表,然后执行全表更新操作。总结: relay log不完整,mysql起来后,会重新获取不完整的这个events,sql_thread在回放的时候,如果发现events不完整,会跳过,不会影响到同步。GTID 和 MTS MTS_GAPS
1. 先解决问题GTID 生产环境中必须考虑的问题 Migration to GTID replicationNon transactionally safe statement will raise errors nowMySQL Performance in GTIDmysql_upgrade scriptErrant transactionsFiltration on the slaveInjecting empty transactions以上问题请参考 GTID原理与实战GTID 和 online升级 online升级丢数据?online升级会报错吗?online升级步骤请参考 GTID原理与实战
Last_IO_Error: Got fatal error 1236 from master when reading data from binary log: "Cannot replicate anonymous transaction when @@GLOBAL.GTID_MODE = ON ..." 两种情况:1)slave的gtid_mode=on时,却还接受着来自master的non-gtid transaction的时候,会报以上错误。2)事实上,不管slave的gtid_mode是on,还是off,只要master的gtid_mode=on,那么整个replication slave,都必须是gtid的事务
Last_IO_Error: The replication receiver thread cannot start because the master has GTID_MODE = ON and this server has GTID_MODE = OFF. slave的gtid_mode=off时,却还接受着来自master的gtid transaction的时候,会报以上错误。GTID 和 mysqlbinlogmysqlbinlog 参数: * --exclude-gtids : 排除这些gtid* --include-gtids : 只打印这些gtid* --skip-gtids : 所有gtid都不打印可以用--skip-gtids 做传统模式的恢复。但是这个是官方不推荐的。mysqlbinlog --skip-gtids binlog.000001 > /tmp/dump.sqlGTID 和 重要函数 gtid_set 用引号扩起来
subset 是否是 set 的子集,如果是返回1,不是返回0 dba:(none)> SELECT GTID_SUBSET("3E11FA47-71CA-11E1-9E33-C80AA9429562:23","3E11FA47-71CA-11E1-9E33-C80AA9429562:21-57");
哪些gtids仅仅是set独有的,subset没有的 dba:(none)> SELECT GTID_SUBTRACT("3E11FA47-71CA-11E1-9E33-C80AA9429562:21-57","3E11FA47-71CA-11E1-9E33-C80AA9429562:21");以上两个函数可以用来干嘛呢?通过GTID_SUBSET,master可以知道slave是否是自己的子集,可以很方便的检查数据一致性通过GTID_SUBTRACT,假设slave是master的子集,那么可以很轻松的将slave没有,master有的gtid发送给slave,以便达到最终一致性
timeout 默认为0,表示无限等待slave gtid_set全部执行完毕如果全部执行完毕,会返回执行的gtid的数量。如果没有执行完,会等待timeout秒。如果slave没有起来,或者没有开启gtid,会返回NULL dba:lc> SELECT WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS("0923e916-3c36-11e6-82a5-ecf4bbf1f518:1-3");
含义跟WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS一样,唯一一个区别就是:如果slave 的replication 线程没有起来,不会返回NULL。 stop slave;dba:lc> SELECT WAIT_FOR_EXECUTED_GTID_SET("0923e916-3c36-11e6-82a5-ecf4bbf1f518:1-3");GTID 的限制和缺点
1.5 Server and Status Variables and Options Added, Deprecated, or Removed in MySQL 5.75.5.4 mysqldump — A Database Backup Program5.6.7 mysqlbinlog — Utility for Processing Binary Log Files13.17 Functions Used with Global Transaction IDs14.4.2.1 CHANGE MASTER TO Syntax14.4.2.6 START SLAVE Syntax14.7.5.34 SHOW SLAVE STATUS Syntax18.1.3 Replication with Global Transaction Identifiers
> http://www.fromdual.ch/things-you-should-consider-before-using-gtid> http://www.fromdual.ch/gtid_in_action> http://www.fromdual.ch/replication-troubleshooting-classic-vs-gtid> http://www.fromdual.ch/replication-in-a-star> http://www.fromdual.com/controlling-worldwide-manufacturing-plants-with-mysql> https://www.percona.com/blog/2014/05/19/errant-transactions-major-hurdle-for-gtid-based-failover-in-mysql-5-6/> https://www.percona.com/blog/2016/12/01/database-daily-ops-series-gtid-replication-binary-logs-purge/> https://www.percona.com/blog/2016/11/10/database-daily-ops-series-gtid-replication/> https://www.percona.com/blog/2015/12/02/gtid-failover-with-mysqlslavetrx-fix-errant-transactions/> https://www.percona.com/blog/2014/05/09/gtids-in-mysql-5-6-new-replication-protocol-new-ways-to-break-replication/本文仅代表作者个人观点,不代表巅云官方发声,对观点有疑义请先联系作者本人进行修改,若内容非法请联系平台管理员,邮箱2522407257@qq.com。更多相关资讯,请到巅云www.yx10011.com学习互联网营销技术请到巅云建站www.yx10011.com。 |