MySQL gtid purge

编程入门 行业动态 更新时间:2024-10-25 14:27:10

<a href=https://www.elefans.com/category/jswz/34/1771279.html style=MySQL gtid purge"/>

MySQL gtid purge

更多深度文章,请关注云计算频道:

GTID 和 START SLAVE

START SLAVE 语法START SLAVE [thread_types] [until_option] [connection_options]如何从multi-threaded slave 转化成 single-threaded modeSTART 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_mode = (ON|ON_PERMISSIVE), bin_log = offgtid 会实时的写入到mysql.gtid_executed表中,且根据executed_gtids_compression_period=N来压缩gtid_mode = (ON|ON_PERMISSIVE), bin_log = ongtid 不会实时的写入到mysql.gtid_executed,executed_gtids_compression_period会失效。

GTID 和 gtid_next

.7/en/replication-options-gtids.html#sysvar_gtid_next三种取值* AUTOMATIC: Use the next automatically-generated global transaction ID.QA: GTID 0923e916-3c36-11e6-82a5-ecf4bbf1f518:1-50 对应的事务顺序,从小到大,一定是顺序执行的吗?答案:错,一般情况下事务是从小到大,顺序执行的。 但是如果再MTS场景,或者是人工设置gtid_next的情况下,就可能不是顺序执行了dba:(none)> show master status;

GTID 和 MHA

请参考MHA源码解析GTID模式下,需要relay-log吗?purge_relay_log设置为on可以吗?* 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的记录非常重要,那么relay log 不完整,会怎么样呢?1) master 创建一张10G的表,然后执行全表更新操作。

总结: relay log不完整,mysql起来后,会重新获取不完整的这个events,sql_thread在回放的时候,如果发现events不完整,会跳过,不会影响到同步。

GTID 和 MTS

MTS_GAPS如果MTS遇到Gap transction怎么办?1. 先解决问题

GTID 生产环境中必须考虑的问题

Migration to GTID replication

Non transactionally safe statement will raise errors now

MySQL Performance in GTID

mysql_upgrade script

Errant transactions

Filtration on the slave

Injecting 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 和 mysqlbinlog

mysqlbinlog 参数:

* --exclude-gtids : 排除这些gtid* --include-gtids : 只打印这些gtid* --skip-gtids : 所有gtid都不打印可以用--skip-gtids 做传统模式的恢复。但是这个是官方不推荐的。mysqlbinlog --skip-gtids binlog.000001 > /tmp/dump.sql

GTID 和 重要函数

gtid_set 用引号扩起来NameDescriptionGTID_SUBSET(subset,set)returns true (1) if all GTIDs in subset are also in set

GTID_SUBTRACT(set,subset)returns only those GTIDs from set that are not in subset

WAIT_FOR_EXECUTED_GTID_SET(gtid_set[, timeout])Wait until the given GTIDs have executed on slave.

WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS(gtid_set[, timeout][,channel])Wait until the given GTIDs have executed on slaveGTID_SUBSET(subset,set)subset 是否是 set 的子集,如果是返回1,不是返回0dba:(none)> SELECT GTID_SUBSET('3E11FA47-71CA-11E1-9E33-C80AA9429562:23','3E11FA47-71CA-11E1-9E33-C80AA9429562:21-57');GTID_SUBTRACT(set,subset)哪些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,以便达到最终一致性

WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS(gtid_set[, timeout][,channel])timeout 默认为0,表示无限等待slave gtid_set全部执行完毕

如果全部执行完毕,会返回执行的gtid的数量。如果没有执行完,会等待timeout秒。如果slave没有起来,或者没有开启gtid,会返回NULLdba:lc> SELECT WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS('0923e916-3c36-11e6-82a5-ecf4bbf1f518:1-3');WAIT_FOR_EXECUTED_GTID_SET(gtid_set[, timeout])含义跟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 的限制和缺点

同事更新nontransactional和transactional的表,会导致gtid问题

CREATE TABLE ... SELECT statements 语法对GTID来说是不安全的

CREATE TEMPORARY TABLE and DROP TEMPORARY TABLE 对GTID也是不安全的

enforce-gtid-consistency 必须设置on,可以避免以上2,3 不安全的statement

sql_slave_skip_counter 不允许执行,可以通过 Injecting empty transactions 来解决

GTID 和 mysqldump的问题,mysqldump 中 sql_log_bin 默认是关闭的.会导致导入master后,不会写入gtid到binlog. ( 可以通过 --set-gtid-purged=OFF 避免 )

GTID and mysql_upgrade, 因为部分系统表是myisam引擎的,会有问题。 (可以通过--write-binlog=off来避免 )

参考文档

官方资料: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第三方资料> ; ; ; ; ; /> /> /> /> /

本文仅代表作者个人观点,不代表SEO研究协会网官方发声,对观点有疑义请先联系作者本人进行修改,若内容非法请联系平台管理员,邮箱cxb5918@163。更多相关资讯,请到SEO研究协会网www.seoxiehui学习互联网营销技术请到巨推学院www.jutuiedu。

更多推荐

MySQL gtid purge

本文发布于:2024-02-12 17:27:52,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1688722.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:MySQL   gtid   purge

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!