Bug #82848 | Restarting a slave after seeding it with a mysqldump loses it's position | ||
---|---|---|---|
Submitted: | 2 Sep 2016 15:02 | Modified: | 8 Jun 2017 12:07 |
Reporter: | Daniël van Eeden (OCA) | Email Updates: | |
Status: | Closed | Impact on me: | |
Category: | MySQL Server: mysqldump Command-line Client | Severity: | S1 (Critical) |
Version: | 5.7.14 | OS: | Any |
Assigned to: | CPU Architecture: | Any | |
Tags: | GTID |
[2 Sep 2016 15:02]
Daniël van Eeden
[3 Sep 2016 8:16]
Daniël van Eeden
Some more details: Setup with MySQL Sandbox: make_sandbox 5.7.14 -- --check_port --gtid make_sandbox 5.7.14 -- --check_port --gtid Changed prompt in my.sandbox.cnf to indicate instance A or B. A: RESET MASTER; USE test CREATE TABLE t1 (id SERIAL); FLUSH LOGS; PURGE BINARY LOGS BEFORE NOW(); INSERT INTO t1 VALUES(NULL),(NULL),(NULL); A mysql > SELECT @@global.gtid_purged, @@global.gtid_executed\G *************************** 1. row *************************** @@global.gtid_purged: 00005715-5714-5714-5714-000000005714:1 @@global.gtid_executed: 00005715-5714-5714-5714-000000005714:1-2 1 row in set (0.00 sec) A mysql > SELECT * FROM mysql.gtid_executed; +--------------------------------------+----------------+--------------+ | source_uuid | interval_start | interval_end | +--------------------------------------+----------------+--------------+ | 00005715-5714-5714-5714-000000005714 | 1 | 1 | +--------------------------------------+----------------+--------------+ 1 row in set (0.01 sec) ./my sqldump --all-databases --triggers --routines --events > /tmp/dump.sql B: RESET MASTER; SOURCE /tmp/dump.sql B mysql > SELECT @@global.gtid_purged, @@global.gtid_executed\G *************************** 1. row *************************** @@global.gtid_purged: 00005715-5714-5714-5714-000000005714:1-2 @@global.gtid_executed: 00005715-5714-5714-5714-000000005714:1-2 1 row in set (0.00 sec) B mysql > SELECT * FROM mysql.gtid_executed; +--------------------------------------+----------------+--------------+ | source_uuid | interval_start | interval_end | +--------------------------------------+----------------+--------------+ | 00005715-5714-5714-5714-000000005714 | 1 | 1 | +--------------------------------------+----------------+--------------+ 1 row in set (0.00 sec) ./restart B mysql > SELECT @@global.gtid_purged, @@global.gtid_executed\G *************************** 1. row *************************** @@global.gtid_purged: 00005715-5714-5714-5714-000000005714:1 @@global.gtid_executed: 00005715-5714-5714-5714-000000005714:1 1 row in set (0.00 sec) B mysql > SELECT * FROM mysql.gtid_executed; +--------------------------------------+----------------+--------------+ | source_uuid | interval_start | interval_end | +--------------------------------------+----------------+--------------+ | 00005715-5714-5714-5714-000000005714 | 1 | 1 | +--------------------------------------+----------------+--------------+ 1 row in set (0.00 sec) From /tmp/dump.sql: ... SET @@SESSION.SQL_LOG_BIN= 0; ... SET @@GLOBAL.GTID_PURGED='00005715-5714-5714-5714-000000005714:1-2'; ... DROP TABLE IF EXISTS `gtid_executed`; ... CREATE TABLE `gtid_executed` ( ... INSERT INTO `gtid_executed` VALUES ('00005715-5714-5714-5714-000000005714',1,1); ... SET @@SESSION.SQL_LOG_BIN = @MYSQLDUMP_TEMP_LOG_BIN;
[3 Sep 2016 9:59]
MySQL Verification Team
Hello Daniël, Thank you for the report. Observed this with 5.7.14 build. Thanks, Umesh
[3 Sep 2016 10:00]
MySQL Verification Team
test results
Attachment: 82848.results (application/octet-stream, text), 21.56 KiB.
[3 Sep 2016 10:13]
Daniël van Eeden
Workaround: add '--ignore-table=mysql.gtid_executed' to mysqldump options or add this to my.cnf: ======================== [mysqldump] ignore-table=mysql.gtid_executed ======================== Fix: https://github.com/mysql/mysql-server/pull/94
[3 Sep 2016 10:20]
Daniël van Eeden
Patch https://github.com/mysql/mysql-server/pull/94 (*) I confirm the code being submitted is offered under the terms of the OCA, and that I am authorized to contribute it.
Contribution: 0001-Don-t-dump-mysql.gtid_executed.patch (text/x-patch), 1.20 KiB.
[3 Sep 2016 10:28]
MySQL Verification Team
Bug #81692 marked as duplicate of this one
[3 Sep 2016 11:01]
Daniël van Eeden
Changing category to reflect that this is a mysqldump bug. Changed severity to S1 as this issue might not be noticed until when you restart a slave and then recovering might be difficult. Related: Bug #71565 Please report full GTID state when stopping / start a slave
[4 Sep 2016 15:47]
Daniël van Eeden
A MTR test case. (*) I confirm the code being submitted is offered under the terms of the OCA, and that I am authorized to contribute it.
Contribution: 0002-Add-test-case-for-Bug-82848.patch (text/x-patch), 1.78 KiB.
[8 Jun 2017 12:07]
Jon Stephens
Documented fix in the MySQL 5.7.19 and 8.0.2 changelogs, as follows: MySQL lost its GTID position following a restart when a dump from mysqldump had been used to load data. To keep this problem from occurring, the mysql.gtid_executed table is now excluded from dumps by mysqldump automatically. Closed.