网站整站优化方案,百度网站app下载,报名网站如何做,吉林市做网站哪家好在实例存活的情况#xff0c;可以在实例状态中查询ALL_GTID。在实例崩溃的情况#xff0c;无法在实例状态中查询ALL_GTID。可以通过查询BINLOG中的Previous-GTIDs计算来获得ALL_GTID。下面列举与ALL_GTID相关的变量。与ALL_GTID相关的变量Previous-GTIDsPrevious-GTIDs格式如…在实例存活的情况可以在实例状态中查询ALL_GTID。在实例崩溃的情况无法在实例状态中查询ALL_GTID。可以通过查询BINLOG中的Previous-GTIDs计算来获得ALL_GTID。下面列举与ALL_GTID相关的变量。与ALL_GTID相关的变量Previous-GTIDsPrevious-GTIDs格式如下(环境为MySQL5.7日志手动flush binary logs获得)查看新轮转出的BINLOG下面为mysql-bin.00001中包含的GTID请点击输入图片描述然后再次flush binary logs:请点击输入图片描述mysql-bin.00002中是没有任何GTID的。请点击输入图片描述综上Previous-GTIDs是本身这个BINLOG文件前面的所有BINLOG的集合。请点击输入图片描述全局变量中的GTID相关的变量请点击输入图片描述变量解释:gtid_executed 代表着server上所有事务执行产生的GTID(包含已经被purge的BINLOG中的GTID或者是手动set gtid_purged的GTID)。gtid_purged 代表着已经被purge到的GTID。gtid_purged是gtid_executed的子集。gtid_retrieved 是从机上relay_log中的GTID。ALL_GTID 的计算了解了GTID相关的变量之后可以得到获得实例的All_GTID的集合的方法对象方法存活的Master实例 gtid_executed存活的Slave实例 gtid_executed和gtid_retrieved的并集非存活Master实例 最后一个BINLOG文件的Previous-GTIDs 最后一个BINLOG文件中所有的GTID非存活Slave实例 最后一个BINLOG文件的Previous-GTIDs 最后一个BINLOG文件中所有的GTID在获得非存活实例中的ALL_GTID时最后一个BINLOG文件中的GTID可能不连续(比如事务同时来自于本实例客户端和复制回放)所以需要扫描最后一个BINLOG文件。生产中我们使用Xtrabackup来产生一个 从实例 的流程如下拉取备份进行还原change master toset global.gtid_purgedxxx;set global.gtid_purgedxxx; 的影响:将 从实例 的ALL_GTID手工置为xxx, 在通过GTID方式建立复制时不会出错.将更新Binlog中记录的Previous-GTIDs (由于Binlog不可改变, 将产生新的Binlog, 记录新的Previous-GTIDs).MySQL 5.7中set gtid_purged的行为变更问题描述回顾一下备份恢复的流程:拉取备份进行还原change master toset global.gtid_purgedxxx;现象: 发现有一台MySQL 5.7的Slave服务器恢复后没有产生 正确的Previous-GTIDs。分析分析整个过程解决问题应该分阶段进行手动模拟发现问题。以下为详细步骤手工还原备份环境BINLOG数量Previous-GTIDs状态Xtrabackup 2.4.2 MySQL 5.6 1空Xtrabackup 2.4.2 MySQL 5.7 1空Xtrabackup 2.2.9 MySQL 5.6 1空Xtrabackup 2.2.9 MySQL 5.7 1空可见: 恢复过程不会轮转BINLOG。验证change master和set gtid_purged在不同的MySQL版本中执行的差异环境BINLOG数量Previous-GTIDs状态change master MySQL 5.6 1空change master MySQL 5.7 1空set gtid_purged MySQL 5.6 2正常set gtid_purged MySQL 5.7 1空可见: 执行set gtid_purged时不同版本的MySQL产生了差异验证对不同版本MySQL单独执行set global.gtid_purged;语句。检查结果环境进行的操作BINLOG数量Previous-GTIDs状态MySQL 5.7 reset master; set global.gtid_purged”; 1空MySQL 5.6 reset master; set global.gtid_purged”; 2正常结论参考: http://bugs.mysql.com/bug.php?id75767官方解释: 在5.7版本中执行SET GTID_PURGED语句后binlog_simple_gtid_recovery会给GTID_PURGED计算出一个错误的值。由于5.7中新增了存储GTID的表。所以5.7版本中set global.gtid_purged;语句被改成只修改存放GTID的表。而5.6版本中会进行BINLOG轮转和向Previous_gtids_log_event中添加GTID。如果5.7需要产生和5.6相同结果的话可以在SET GTID_PURGED语句后手动执行flush binary logs语句。