在实例存活的情况,可以在实例状态中查询ALL_GTID。

在实例崩溃的情况,无法在实例状态中查询ALL_GTID。可以通过查询BINLOG中的Previous-GTIDs计算来获得ALL_GTID。

下面列举与ALL_GTID相关的变量。

与ALL_GTID相关的变量

Previous-GTIDs

Previous-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 to

set @@global.gtid_purged='xxx';

set @@global.gtid_purged='xxx'; 的影响:

将 从实例 的ALL_GTID手工置为xxx, 在通过GTID方式建立复制时不会出错.

将更新Binlog中记录的Previous-GTIDs (由于Binlog不可改变, 将产生新的Binlog, 记录新的Previous-GTIDs).

MySQL 5.7中set gtid_purged的行为变更

问题描述

回顾一下备份恢复的流程:

拉取备份,进行还原

change master to

set @@global.gtid_purged='xxx';

现象: 发现有一台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?id=75767

官方解释: 在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语句。

mysql数据库备份出错_mysql数据库备份成功,再还原却失败,什么原相关推荐

  1. mysql频繁查询出错_Mysql数据库频繁查询错误解决方案

    TcpTimedWaitDelay和MaxUserPort设置 描述:确定 TCP/IP 可释放已关闭连接并重用其资源前,必须经过的时间.关闭和释放之间的此时间间隔通称 TIME_WAIT 状态或两倍 ...

  2. mysql还原数据库名一样_MySQL数据库的多种备份与多种还原

    一.备份 1.mysqldump 方法备份 mysqldump备份很简单,格式如下: mysqldump -u用户名 -p密码 数据库名> XX.sql 路径 例如: mysqldump -ur ...

  3. 为什么navicat12 连接远程数据库的时候,测试连接成功,但是打开失败?

    为什么navicat12 连接远程数据库的时候,测试连接成功,但是打开失败?

  4. mysql 备份文件太大_mysql数据库太大了怎么备份

    本地: 1.进入MySQL目录下的bin文件夹:e:回车:e:\>cd mysql\bin 回车2.导出数据库:mysqldump -u?用户名 -p 数据库名 > 导出的文件名范例:my ...

  5. mysql数据库备份总结_MySQL数据库备份总结

    一个企业的正常运行,数据的完整性是最关键的:所以我们需要在工作中要很熟练的掌握数据的备份与恢复方法:下面是对Mysql数据库备份的三种方法总结,希望对大家会有所帮助 备份开始前的工作环境准备: 1.创 ...

  6. mysql的数据备份问题_mysql数据库备份的问题

    我有一个MySQL数据库,MySQL安装环境是==============假想环境:MySQL安装位置:C:\mysqlfile论坛数据库名称为:oiptvMySQLroot密码:123456数据库备 ...

  7. mysql英文版数据库备份方法_mysql数据库太大了如何备份与还原

    命令:mysqlhotcopy 这个命令会在拷贝文件之前会把表锁住,并把数据同步到数据文件中,以避免拷贝到不完整的数据文件,是最安全快捷的备份方法. 命令的使用方法是: mysqlhotcopy -u ...

  8. mysql备份数据库某表格_mysql数据库的备份以及表格数据之间的复制

    #####-------------mysql数据备份以及表间数据的复制-------------------##### ##----------------我的mysql学习(二)--------- ...

  9. mysql异地备份原理_Mysql数据库异地备份

    Mysql数据库异地备份 一. 简介 1.1 增量备份简介 增量备份是指在一次全备份或上一次增量备份后,以后每次的备份只需备份与前一次相比增加或者被修改的文件.这就意味着,第一次增量备份的对象是进行全 ...

最新文章

  1. mysql自定义序号_MySQL数据库之在mysql中给查询的结果添加序号列
  2. 开发团队如何完成一个项目?
  3. amesim安装失败_Win10系统安装AMEsim14的方法【图文教程】
  4. PyQt之Eric:成功解决No module named 'my_image_rc'
  5. poj 1201 差分约束
  6. python自动化运维快速入门pdf下载_Python自动化运维快速入门
  7. python解释器的安装
  8. 【分享】U盘大小的随身电脑 – Cotton Candy
  9. opengles系列-绘制三角形
  10. 【UIKit】键盘设计2
  11. 虚拟机使用本地服务器配置,虚拟机搭建本地云服务器配置
  12. 关于民族类型的下拉框
  13. 【性能之旅】Andrew 领衔,RWP 团队再临北京
  14. 家庭局域网_玩转Windows 10家庭组,轻松共享局域网资源,人人都可以做到
  15. java中人民币的符号怎么打_打印机打印人民币符号¥
  16. destoon网站转移空间教程
  17. mdf数据库文件打开
  18. PS|你真的了解PS吗?
  19. [附源码]Java计算机毕业设计SSM鞍山丘比特房屋租赁管理系统
  20. MapWindow GIS二次开发

热门文章

  1. DRM-内容数据版权加密保护技术学习(上):视频文件打包实现(转)
  2. 【荐】中国最有潜力的十位企业家(IT行业占大半)
  3. WIN10下gnuplot 的安装
  4. Jacobi迭代法与Gauss-Seidel迭代法
  5. Golang库学习笔记 Gin(一)
  6. Linux双网卡NAT共享上网
  7. latex二元关系符号
  8. [Python学习笔记]h5py入门讲解
  9. Delphi 中自定义异常及异常处理的一般方法
  10. JavaScript对TreeView的操作全解