mysql change master导致gtid丢失

change master导致gtid丢失
从innobackupex恢复导致binlog的拉取位置会导致主备gtid不一致。
此类错误通过构造空事务方式无法修复。
此时就需要change master 方式指向失败事件的下一个位点。然后按位点的方式(master_auto_position=0)来拉binlog。

Slave_IO_State: Queueing master event to the relay log
Master_Host: 10.1.1.111
Master_User: repl
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000003
Read_Master_Log_Pos: 478283
Relay_Log_File: relay-bin.000002
Relay_Log_Pos: 361
Relay_Master_Log_File: mysql-bin.000003
Slave_IO_Running: Yes
Slave_SQL_Running: No
Replicate_Do_DB:
Replicate_Ignore_DB:
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
Last_Errno: 1050
Last_Error: Error ‘Table ‘kelvin‘ already exists‘ on query. Default database: ‘test‘. Query: ‘CREATE TABLE `kelvin` (
`id` bigint(20) NOT NULL,
`username` varchar(10) NOT NULL DEFAULT ‘kelvin‘,
`passwd` varchar(4000) NOT NULL DEFAULT ‘kelvin‘,
`createdate` int(10) NOT NULL,
`groups` varchar(2) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8‘
Skip_Counter: 0
Exec_Master_Log_Pos: 151
Relay_Log_Space: 478691
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: NULL
Master_SSL_Verify_Server_Cert: No
Last_IO_Errno: 0
Last_IO_Error:
Last_SQL_Errno: 1050
Last_SQL_Error: Error ‘Table ‘kelvin‘ already exists‘ on query. Default database: ‘test‘. Query: ‘CREATE TABLE `kelvin` (
`id` bigint(20) NOT NULL,
`username` varchar(10) NOT NULL DEFAULT ‘kelvin‘,
`passwd` varchar(4000) NOT NULL DEFAULT ‘kelvin‘,
`createdate` int(10) NOT NULL,
`groups` varchar(2) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8‘
Replicate_Ignore_Server_Ids:
Master_Server_Id: 113306
Master_UUID: 26e3db40-51d4-11e7-adc8-000c29a459b4
Master_Info_File: /opt/56/data/master.info
SQL_Delay: 0
SQL_Remaining_Delay: NULL
Slave_SQL_Running_State:
Master_Retry_Count: 86400
Master_Bind:
Last_IO_Error_Timestamp:
Last_SQL_Error_Timestamp: 170616 00:36:53
Master_SSL_Crl:
Master_SSL_Crlpath:
Retrieved_Gtid_Set: 26e3db40-51d4-11e7-adc8-000c29a459b4:1-1612
Executed_Gtid_Set:
Auto_Position: 1
1 row in set (0.00 sec)

stop slave;
change master to master_log_file=‘Relay_Master_Log_File‘, master_log_pos=Exec_Master_Log_Pos+1,master_auto_position=0;
start slave;

show slave status \G

Slave_IO_State:
Master_Host: 10.1.1.111
Master_User: repl
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000003
Read_Master_Log_Pos: 152
Relay_Log_File: relay-bin.000002
Relay_Log_Pos: 314
Relay_Master_Log_File: mysql-bin.000003
Slave_IO_Running: No
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: 152
Relay_Log_Space: 512
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: NULL
Master_SSL_Verify_Server_Cert: No
Last_IO_Errno: 1236
Last_IO_Error: Got fatal error 1236 from master when reading data from binary log: ‘log event entry exceeded max_allowed_packet; Increase max_allowed_packet on master; the first event ‘mysql-bin.000003‘ at 152, the last event read from ‘/opt/56/binlog/mysql-bin.000003‘ at 152, the last byte read from ‘/opt/56/binlog/mysql-bin.000003‘ at 171.‘
Last_SQL_Errno: 0
Last_SQL_Error:
Replicate_Ignore_Server_Ids:
Master_Server_Id: 113306
Master_UUID: 26e3db40-51d4-11e7-adc8-000c29a459b4
Master_Info_File: /opt/56/data/master.info
SQL_Delay: 0
SQL_Remaining_Delay: NULL
Slave_SQL_Running_State: Slave has read all relay log; waiting for the slave I/O thread to update it
Master_Retry_Count: 86400
Master_Bind:
Last_IO_Error_Timestamp: 170616 00:39:13
Last_SQL_Error_Timestamp:
Master_SSL_Crl:
Master_SSL_Crlpath:
Retrieved_Gtid_Set:
Executed_Gtid_Set:
Auto_Position: 0
1 row in set (0.00 sec)

当你观察你会发现Master服务器不再要求Slave服务器需要拉才能同步数据的二进制日志。可能的原因包括主服务器过期系统变量 expire_logs_days — — 通过二进制日志或有人手动从Master服务器通过清除二进制日志命令或 rm -f 命令删除二进制日志或者可能是你有一些 cronjob 的档案较旧的二进制日志,要求磁盘空间等。所以,请确保你总是有需要的二进制日志存在于主服务器上,您可以更新您的程序,以保持Slave服务器需要通过监测"Relay_master_log_file"变量Slave显示的Slave状态输出的二进制日志。此外,如果设置了 expire_log_days 在 my.cnf 老 binlogs 自动过期并移除。这意味着当 MySQL 打开一个新的 binlog 文件,它会检查旧的 binlogs,且清除任何早比 expire_logs_days 的值 (单位为天)。略服务器添加一个功能,过期日志基于而年龄的 binlog 文件不是使用的文件的总数量。所以在该配置中,如果你得到穗交通,它可能导致 binlogs 要比你预期的更早消失。详细信息请查看限制 binlog 文件的数目。

CHANGE MASTER TO MASTER_LOG_FILE=‘Relay_Master_Log_File+1‘, MASTER_LOG_POS=4;

show slave status \G
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 10.1.1.111
Master_User: repl
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000004
Read_Master_Log_Pos: 68299
Relay_Log_File: relay-bin.000002
Relay_Log_Pos: 68469
Relay_Master_Log_File: mysql-bin.000004
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: 68299
Relay_Log_Space: 68667
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: 113306
Master_UUID: 26e3db40-51d4-11e7-adc8-000c29a459b4
Master_Info_File: /opt/56/data/master.info
SQL_Delay: 0
SQL_Remaining_Delay: NULL
Slave_SQL_Running_State: Slave has read all relay log; waiting for the slave I/O thread to update it
Master_Retry_Count: 86400
Master_Bind:
Last_IO_Error_Timestamp:
Last_SQL_Error_Timestamp:
Master_SSL_Crl:
Master_SSL_Crlpath:
Retrieved_Gtid_Set: 26e3db40-51d4-11e7-adc8-000c29a459b4:10008-10152
Executed_Gtid_Set: 26e3db40-51d4-11e7-adc8-000c29a459b4:10008-10152
Auto_Position: 0
1 row in set (0.00 sec)

最后使用  pt-table-checksum 和 pt-table-sync 检查数据一致性问题

时间: 2024-10-05 22:22:02

mysql change master导致gtid丢失的相关文章

mysql主从复制-CHANGE MASTER TO 语法详解

1 简介    配置mysql主从复制时,在从机上需要进行CHANGE MASTER TO操作,以确定需要同步的主机IP,用户名,密码,binlog文件,binlog位置等信息. 2 基本语法与实例    2.1 CHANGE MASTER TO的语法如下: CHANGE MASTER TO option [, option] ...   option:       MASTER_BIND = 'interface_name'      MASTER_HOST = 'host_name'    

mysql主从之基于gtid的主从复制

一 GITD介绍 1.1 gtid的含义 Global Transaction Identifier,全局事务标识 阿里云的rds目前已经使用gtid 基于gtid的主从复制原理 每个mysql数据库上都有一个唯一uuid 每个事务生成一个id gtid由上面两者组合: uuid+事务id 1.2 优势 相对使用binlog+位置的方法来说 gtid让配置主从更加方便 从提升为主时比较方便 二 配置 2.1 主库的配置 [mysqld] bind-address=0.0.0.0 port=330

MySQL的Master/Slave集群安装和配置

本文讲述MySQL的Master/Slave集群安装和配置,安装的版本是最新的稳定版本GA 5.6.19. 为了支持有限的HA,我们使用Master/Slave简单的读写分离集群.有限的HA是指当Master不可用时,数据不会丢失,但在Master宕机的情况下是不可写的,必须手工处理故障.如果要支持更高的可用性,可以使用两台Master来做热切换. Master和Slave的MySQL安装是相同的,只是my.cnf的配置不同,需要配置二进制日志文件复制. 没有特殊说明,命名中带#的为root用户

MySQL主(Master)从(Slave)备份;

实验环境: CentOS release 6.6 (Final) 32位 Master:10.10.10.11 Slave1:10.10.10.7 Slave2:10.10.10.8 1) MySQL 安装 (分别在Master,Slave1,Slave2 运行如下命令) [[email protected] ~]# yum install mysql-server mysql -y [[email protected] ~]# service mysqld start 2)配置my.cnf [

mysql (master/slave)复制原理及配置

1 复制概述 Mysql内建的复制功能是构建大型,高性能应用程序的基础.将Mysql的数据分布到多个系统上去,这种分布的机制,是通过将Mysql的某一台主机的数据复制到其它主机(slaves)上,并重新执行一遍来实现的.复制过程中一个服务器充当主服务器,而一个或多个其它服务器充当从服务器.主服务器将更新写入二进制日志文件,并维护文件的一个索引以跟踪日志循环.这些日志可以记录发送到从服务器的更新.当一个从服务器连接主服务器时,它通知主服务器从服务器在日志中读取的最后一次成功更新的位置.从服务器接收

change master to到一个不存在的主库或主库无法连接

本文测试当主库无法连接时,从库的复制状态. 1.设置主库 在从库上, 将主库设置为//127.0.0.1或一个无法连接的主库: MASTER_HOST='//127.0.0.1' 或 MASTER_HOST='_' 设置复制: mysql> stop slave; Query OK, 0 rows affected (0.00 sec) mysql> mysql> CHANGE MASTER TO MASTER_HOST='//127.0.0.1', MASTER_PORT=3306,M

mysql 主从复制change master to

CHANGE MASTER TO命令用于slave配置连接master的信息,例如master host.master port等. 关于CHANGE MASTER TO命令,总结几点使用心得. 在CHANGE MASTER TO之前,slave 的复制线程(I/O线程,SQL线程)必须停止,可以使用 STOP SLAVE 来停止. 如果一些参数不指定,则其参数值使用以前设置的值. 如果使用了参数RELAY_LOG_FILE 或者RELAY_LOG_POS,relay log文件会被保留, re

MySQL 5.7基于GTID复制的常见问题和修复步骤(一)

[问题一] 复制slave报错1236,是较为常见的一种报错 Got fatal error 1236 from master when reading data from binary log: 'The slave is connecting using CHANGE MASTER TO MASTER_AUTO_POSITION = 1, but the master has purged binary logs containing GTIDs that the slave require

MySQL 5.7基于GTID复制的常见问题和修复步骤(二)

[问题二] 有一个集群(MySQL5.7.23)切换后复制slave报1236,其实是不小心在slave上执行了事务导致 Got fatal error 1236 from master when reading data from binary log: 'The slave is connecting using CHANGE MASTER TO MASTER_AUTO_POSITION = 1, but the master has purged binary logs containin