今天的坑主要来自于 执行mysqldump命令时,参数的设置。主要涉及的参数为sql_log_bin

基于mysql5.7进行分析

一.bin_log

bin_log就是数据库的日志文件,记录了数据库的操作,它主要用于2个功能

bin_log主要有2个作用

1:数据恢复 如果你的数据库出问题了,而你之前有过备份,那么可以看日志文件,找出是哪个命令导致你的数据库出问题了,想办法挽回损失

2.复制

主从服务器之间同步数据主服务器上所有的操作都在记录日志中,从服务器可以根据该日志来进行

Slaves are configured to read the binary log from the master and

to execute the events in the binary log on the slave's local database

从这可以看到,从机是分为2步进行复制的,第一步,取得日志,第二步回放

二、 GTID-Global Transaction Identifiers

全局事务标识符的基于事务的复制 (GTIDs)。使用GTID时,每个事务都可以在原始服务器上提交并由任何从属应用时进行标识和跟踪; 这意味着在启动新从站或故障转移到新主站时使用GTID来引用日志文件或这些文件中的位置是不必要的,这极大地简化了这些任务

全局事务标识符(GTID)是创建的唯一标识符,并与在源服务器(主服务器)上提交的每个事务相关联。此标识符不仅对其发起的服务器是唯一的,而且在给定复制拓扑中的所有服务器上都是唯一的。

GTID格式 源主机:事务id

GTID = source_id:transaction_id

*GTID分配区分在主服务器上提交的客户端事务和在从服务器上复制的复制事务。

1.在主服务器上提交客户端事务时,如果事务已写入二进制日志,则会为其分配新的GTID。保证客户交易具有单调增加的GTID,而生成的数字之间没有间隙。如果未将客户端事务写入二进制日志(例如,因为事务已被过滤掉,或者事务是只读的),则不会在源服务器上为其分配GTID。

2.复制的事务保留在原始服务器上分配给事务的相同GTID。GTID在复制事务开始执行之前存在,并且即使复制的事务未写入从服务器上的二进制日志,或者在从服务器上过滤掉,也会持久存在。MySQL系统表mysql.gtid_executed用于保存MySQL服务器上应用的所有事务的已分配GTID,但存储在当前活动的二进制日志文件中的事务除外。

!!!

GTID的自动跳过功能意味着在主服务器上提交的事务可以在从服务器上应用不超过一次,这有助于保证一致性。一旦在给定服务器上提交了具有给定GTID的事务,则该服务器将忽略使用相同GTID执行后续事务的任何尝试。不会引发错误,并且不会执行事务中的语句

GTIDs 集合

就是多个GTID或者某个范围的GTIDs集合

mysql.gtid_executed表

GTID存储在数据库中名为的表 gtid_executed中 mysql。对于它表示的每个GTID或GTID集合,该表中的一行包含原始服务器的UUID,以及该集合的起始和结束事务ID

gtid_purged

该集在GTIDs的 gtid_purged系统变量(@@global.gtid_purged)包含已提交在服务器上,但在任何服务器上的二进制日志文件不存在,所有事务的GTIDs。以下类别的GTID在此集合中:

在从站上禁用二进制日志记录时提交的复制事务的GTID

已写入已清除的二进制日志文件的事务的GTID

由语句明确添加到集合中的GTID SET @@global.gtid_purged

三、mysqldump - 数据库备份程序的坑

此命令有众多参数,这次有问题的是

--set-gtid-purged=*value*

此选项通过指示是否向SET @@global.gtid_purged输出添加语句来启用对写入转储文件的全局事务ID(GTID)信息的控制 。此选项还可能导致将语句写入输出,以在重新加载转储文件时禁用二进制日志记录。

下表显示了允许的选项值。默认值为AUTO。

Value

Meaning

OFF

Add no SET statement to the output.

ON

Add a SET statement to the output. An error occurs if GTIDs are not enabled on the server.

AUTO

Add a SET statement to the output if GTIDs are enabled on the server.

添加的SET @@SESSION.SQL_LOG_BIN=0会在这个会话期间不产生bin_log

你需要根据自己的实际需求进行考虑,如果你只是想让你的新设置一个主的从,则不需要记录。但如果你现在有一个老库,你新建立了一个主从的新库,你就必须注意,如果你不产生bin_log,你在新库的主执行了source命令,因为没产生bin_log,所以从是无法复制!!!!切记,这回产生新库的主从不一致问题

--set-gtid-purged重新加载转储文件时, 该选项对二进制日志记录具有以下影响:

--set-gtid-purged=OFF:SET @@SESSION.SQL_LOG_BIN=0;未添加到输出中。

--set-gtid-purged=ON:SET @@SESSION.SQL_LOG_BIN=0;添加到输出中。

--set-gtid-purged=AUTO:SET @@SESSION.SQL_LOG_BIN=0;如果在要备份的服务器上启用了GTID(即,如果AUTO 求值为ON),则会将其添加到输出中。

四、附带,如何判断主从同步完成了

* All binary log files from the master

* All binary log files from the slave

* The output of [`SHOW MASTER STATUS`](https://dev.mysql.com/doc/refman/5.7/en/show-master-status.html "13.7.5.23 SHOW MASTER STATUS Syntax") from the master at the time you discovered the problem

* The output of [`SHOW SLAVE STATUS`](https://dev.mysql.com/doc/refman/5.7/en/show-slave-status.html "13.7.5.34 SHOW SLAVE STATUS Syntax") from the slave at the time you discovered the problem

* Error logs from the master and the slave

一个典型的show slave status的输出

mysql> SHOW SLAVE STATUS\G

*************************** 1. row ***************************

Slave_IO_State: Waiting for master to send event

Master_Host: localhost

Master_User: repl

Master_Port: 13000

Connect_Retry: 60

Master_Log_File: master-bin.000002

Read_Master_Log_Pos: 1307

Relay_Log_File: slave-relay-bin.000003

Relay_Log_Pos: 1508

Relay_Master_Log_File: master-bin.000002

Slave_IO_Running: Yes

Slave_SQL_Running: Yes

Replicate_Do_DB:

Replicate_Ignore_DB:

Replicate_Do_Table:

Replicate_Ignore_Table:

Replicate_Wild_Do_Table:

Replicate_Wild_Ignore_Table:

Last_Errno: 0

Last_Error:

Skip_Counter: 0

Exec_Master_Log_Pos: 1307

Relay_Log_Space: 1858

Until_Condition: None

Until_Log_File:

Until_Log_Pos: 0

Master_SSL_Allowed: No

Master_SSL_CA_File:

Master_SSL_CA_Path:

Master_SSL_Cert:

Master_SSL_Cipher:

Master_SSL_Key:

Seconds_Behind_Master: 0

Master_SSL_Verify_Server_Cert: No

Last_IO_Errno: 0

Last_IO_Error:

Last_SQL_Errno: 0

Last_SQL_Error:

Replicate_Ignore_Server_Ids:

Master_Server_Id: 1

Master_UUID: 3e11fa47-71ca-11e1-9e33-c80aa9429562

Master_Info_File: /var/mysqld.2/data/master.info

SQL_Delay: 0

SQL_Remaining_Delay: NULL

Slave_SQL_Running_State: Reading event from the relay log

Master_Retry_Count: 10

Master_Bind:

Last_IO_Error_Timestamp:

Last_SQL_Error_Timestamp:

Master_SSL_Crl:

Master_SSL_Crlpath:

Retrieved_Gtid_Set: 3e11fa47-71ca-11e1-9e33-c80aa9429562:1-5

Executed_Gtid_Set: 3e11fa47-71ca-11e1-9e33-c80aa9429562:1-5

Auto_Position: 1

Replicate_Rewrite_DB:

Channel_name:

Master_TLS_Version: TLSv1.2

这里最关键的就是2个任务的工作状态,一个是I/O取到的bin_log名字和pos,另一个是SQL线程回放执行的bin_log名字和位置

五.待解决的疑惑

Master_Log_File、Master_Log_File相结合与Relay_Master_Log_File、Exec_Master_Log_Pos比较,如果不一致,是否就代表目前主从是不同步的?

mysql gtid坑_数据库mysqldump的坑相关推荐

  1. mysql 时间 设计模式_数据库时间设计模式

    {"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],&q ...

  2. mysql变红_数据库变成红色紧急

    {"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],&q ...

  3. mysql使用释放资源_数据库--释放mysql数据库资源

    数据库--释放mysql数据库资源 背景 nikeodong 之前做了项目的数据库主从,在全备的过程发现数据库是越来越大了:最后发现是资源不释放的问题. 目的 为了解决 mysql 资源不释放的问题. ...

  4. mysql binlog 订阅_数据库binlog订阅和消费组件canal快速入门

    一.什么是canal 1.定位 Canal是阿里巴巴开源的一款基于mysql数据库binlog增量日志分析提供数据订阅和消费功能的组件 2.原理 Canal模拟MySQL Slave协议,将自己伪装成 ...

  5. mysql gtid深入_深入理解MySQL 5.7 GTID系列(四):mysql.gtid_executedPREVIOUS GTID EVENT

    之所以把MySQL.GTID_EXECUTED表的作用和PREVIOUS GTID EVENT的改变放到一起进行描述是因为它们后面文章探讨的基础.这部分使用到了我自己使用C语言写的原生BINLOG解析 ...

  6. mysql gtid 同步_结合案例说说5.7使用gtid同步后,mysql.gtid_executed引起的从库gtid断层...

    结合案例说说5.7使用gtid同步后,mysql.gtid_executed引起的从库gtid断层,从库重复拉取主库数据,导致数据在从库被重复执行; mysql.gtid_executed,5.7.5 ...

  7. mysql master 重置_[数据库]重置mysql主从同步(MySQL Reset Master

    [数据库]重置mysql主从同步(MySQL Reset Master 0 2012-09-13 16:00:09 在mysql主从同步的过程中,可能会因为各种原因出现主库与从库不同步的情况,网上虽然 ...

  8. 数据库mysql的索引_数据库索引

    数据库索引 编辑 锁定 索引是对数据库表中一列或多列的值进行排序的一种结构,使用索引可快速访问数据库表中的特定信息.如果想按特定职员的姓来查找他或她,则与在表中搜索所有的行相比,索引有助于更快地获取信 ...

  9. mysql gtid 主从_基于GTID搭建主从MySQL

    基于gtid搭建主从MySQL 一.GTID的使用 想让主从之间使用gtid的方式同步数据,需要我们在配置文件中开启mysql对gtid相关的配置信息 找到my.cnf ,在mysqld模块中加入如下 ...

最新文章

  1. 软考之路-网络攻击:主动攻击和被动攻击
  2. python数据结构与算法:二分查找
  3. HDOJ2020 ( 绝对值排序 ) 【水题】
  4. 苹果airpods android,苹果AirPodsPro搭配Android手机实测:支持功能不够完整,购买前要认真考虑...
  5. 2.18 Logistic 损失函数的解释-深度学习-Stanford吴恩达教授
  6. Keil MDK-ARM下载 安装与和谐教程
  7. 每当处于窘境时,想想当初坚持的理由
  8. 扫地机器人什么牌子好?专业人士推荐这五款高端产品
  9. 印度SaaS创企Whatfix获370万美元A轮融资
  10. LeetCode - Remove Duplicates from Sorted List
  11. 不同vlan之间如何ping通_如何利用交换机实现不同VLAN、不同网段之间互访?
  12. RTL8305NB傻瓜式交换机无法工作
  13. word如何绘制斜线表头
  14. java 多边形裁剪_使用 mesh 实现多边形裁剪图片!Cocos Creator!
  15. 康考迪亚计算机科学硕士,康考迪亚大学专业
  16. 查看mysql宕机原因_记录一次mysql宕机的解决办法
  17. pb公共变量怎么找_pb 实用方法
  18. MFC工具箱中各种控件
  19. 测试基础知识考试题目(答案)
  20. vue结合饿了么_vue-饿了么项目总结

热门文章

  1. kite:Python 代码自动补全神器
  2. EFK+sentinl报警机制
  3. 安卓使用videoview进行音频、视频播放,及播放控制
  4. matlab2c使用c++实现matlab函数系列教程-weibpdf函数
  5. matlab2c使用c++实现matlab函数系列教程-binopdf函数
  6. AD16自定义板子大小
  7. 深入理解MR1与MR2的执行流程
  8. 打开无线后无法自动发现连接点的问题
  9. Activiti6.0 安装出错 log4j:ERROR setFile(null,true) call failed.
  10. iOS 9.0系统策略更新