Bug #113400 | mysqldump generates incorrect sql when skipping generated invisible pk | ||
---|---|---|---|
Submitted: | 12 Dec 2023 14:12 | Modified: | 15 Dec 2023 13:44 |
Reporter: | Wen He (OCA) | Email Updates: | |
Status: | Verified | Impact on me: | |
Category: | MySQL Server: mysqldump Command-line Client | Severity: | S2 (Serious) |
Version: | 8.0 | OS: | Any |
Assigned to: | CPU Architecture: | Any | |
Tags: | mysqldump |
[12 Dec 2023 14:12]
Wen He
[12 Dec 2023 16:22]
MySQL Verification Team
Hi Mr. He, Thank you for your bug report. However, we were not able to repeat your test case with our release binary 8.0.35: * mysqlpump returned the following error: mysqlpump is deprecated and will be removed in a future version. Use mysqldump instead. * We have got this output from SHOW CREATE TABLE: t1 CREATE TABLE `t1` (\n `f` int DEFAULT NULL\n) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; Hence, first of all, index is not displayed. Much more important, mysqlpump is no longer maintained. Unsupported.
[13 Dec 2023 3:37]
Wen He
I simplified the case, and changed mysqlpump to mysqldump. Auctually, the bug has nothing to do with the result of `show create table`. The bug is mysqldump generates incorrect sql for recovery. # mysqldump_bug.test CREATE TABLE t1 (my_row_id bigint unsigned NOT NULL AUTO_INCREMENT INVISIBLE, f INT, PRIMARY KEY(my_row_id)); ALTER TABLE t1 ADD INDEX(my_row_id, f); INSERT INTO t1 VALUES (1), (3), (7), (8), (4); --replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR --exec $MYSQL_DUMP --databases test --skip-generated-invisible-primary-key > "$MYSQLTEST_VARDIR/tmp/test.sql" DROP TABLE t1; --exec $MYSQL < $MYSQLTEST_VARDIR/tmp/test.sql remove_file $MYSQLTEST_VARDIR/tmp/test.sql; DROP TABLE t1;
[13 Dec 2023 3:42]
Wen He
test.sql generated by mysqldump has a following sql. CREATE TABLE `t1` ( `f` int DEFAULT NULL, KEY `my_row_id` (`my_row_id`,`f`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; It causes the mysqldump_bug.test fail with the following error. CURRENT_TEST: main.mysqlpump_bug ERROR 1072 (42000) at line 33: Key column 'my_row_id' doesn't exist in table mysqltest: At line 10: Command "$MYSQL < $MYSQLTEST_VARDIR/tmp/test.sql" failed.
[13 Dec 2023 10:32]
MySQL Verification Team
Hi Mr. He, We have run your test case with mysqldump with 8.0.35. On the import of the test2.sql generated by mysqldump into mysql, we get the following error: ERROR 1072 (42000) at line 33: Key column 'my_row_id' doesn't exist in table If you think that this is a bug, please, explain why ...... Thanks in advance.
[13 Dec 2023 10:49]
MySQL Verification Team
Hi Mr. He, Thank you very much for your bug report. As you can see, we repeated the problem you reported. This is a bug in 8.0 and 8.2 production releases. This is now a verified bug report.
[14 Dec 2023 3:11]
Wen He
This patch includes the fix provided in Bug#111292. (*) I confirm the code being submitted is offered under the terms of the OCA, and that I am authorized to contribute it.
Contribution: Bug-113400-mysqlpump-generates-incorrect-sql-when-sk.patch (application/octet-stream, text), 2.52 KiB.
[14 Dec 2023 11:24]
MySQL Verification Team
Hi Mr. He, Thank you for your contribution. This is now a verfied bug with a contribution from the OCA developer.
[14 Dec 2023 15:04]
Georgi Kodinov
mysqlpump is deprecated: https://dev.mysql.com/doc/refman/8.0/en/mysqlpump.html says: mysqlpump is deprecated as of MySQL 8.0.34; expect it to be removed in a future version of MySQL. You can use such MySQL programs as mysqldump and MySQL Shell to perform logical backups, dump databases, and similar tasks instead.
[15 Dec 2023 8:38]
Wen He
First, mysqldump has the same issue. I have already changed mysqlpump to mysqldump in the simplified case. Second, I think if mysqldump generates a sql with invalid sql syntax, it needs a fix.
[15 Dec 2023 13:44]
MySQL Verification Team
Hi, Sorry for the mistake ....... It is corrected now .....