Bug #21360 | mysqldump error on federated tables | ||
---|---|---|---|
Submitted: | 31 Jul 2006 10:46 | Modified: | 15 Apr 2009 1:36 |
Reporter: | Gianluca Gimigliano | Email Updates: | |
Status: | Closed | Impact on me: | |
Category: | MySQL Server: Federated storage engine | Severity: | S2 (Serious) |
Version: | 5/5.0BK/5.1BK | OS: | Any (Windows/Linux) |
Assigned to: | Satya B | CPU Architecture: | Any |
Tags: | Backup, federated, mysqldump, restore, tables |
[31 Jul 2006 10:46]
Gianluca Gimigliano
[31 Jul 2006 11:10]
Gianluca Gimigliano
I corrected the bug category
[31 Jul 2006 14:50]
MySQL Verification Team
Thank you for the bug report. miguel@hegel:~/dbs/5.0> bin/mysql -uroot prova Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 2 to server version: 5.0.25-debug Type 'help;' or '\h' for help. Type '\c' to clear the buffer. mysql> CREATE TABLE `remoto` ( -> `Id` varchar(20) NOT NULL , -> PRIMARY KEY (`Id`) -> ) ENGINE=FEDERATED DEFAULT CHARSET=latin1 -> CONNECTION='mysql://miguel@192.168.0.33:3306/prova/remoto'; Query OK, 0 rows affected (0.03 sec) mysql> exit Bye miguel@hegel:~/dbs/5.0> bin/mysqldump -B prova -uroot > back.sql miguel@hegel:~/dbs/5.0> bin/mysql -uroot < back.sql ERROR 1031 (HY000) at line 41: Table storage engine for 'remoto' doesn't have this option miguel@hegel:~/dbs/5.0> cat back.sql -- MySQL dump 10.10 -- -- Host: localhost Database: prova -- ------------------------------------------------------ -- Server version 5.0.25-debug
[3 Sep 2006 19:42]
Markus Popp
This looks related to this bug - if it's not please tell me and I'll create a separate bug report: mpopp@suse:~> mysql -u mpopp -p test Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 10 to server version: 5.0.24-max-log Type 'help;' or '\h' for help. Type '\c' to clear the buffer. mysql> create table federated_test ( -> id int unsigned not null auto_increment primary key, -> val int unsigned not null) engine = federated -> connection = 'mysql://mpopp:xxxxxxx@10.0.0.100/test/test'; Query OK, 0 rows affected (4.51 sec) mysql> select * from federated_test; +----+------+ | id | val | +----+------+ | 1 | 3144 | | 2 | 9596 | | 3 | 8547 | | 4 | 3949 | | 5 | 4103 | | 6 | 8670 | | 7 | 1043 | | 8 | 9202 | | 9 | 2883 | | 10 | 6810 | | 11 | 5400 | | 12 | 6569 | | 13 | 6649 | | 14 | 3536 | | 15 | 7734 | | 16 | 8064 | | 17 | 7116 | | 18 | 1391 | | 19 | 5606 | | 20 | 3857 | | 21 | 2469 | | 22 | 773 | +----+------+ 22 rows in set (4.55 sec) mysql> exit Bye mpopp@suse:~> mpopp@suse:~> mysqldump -h 127.0.0.1 -u mpopp -p --databases test > test.sql Enter password: mpopp@suse:~> vi test.sql Content of test.sql: -- MySQL dump 10.10 -- -- Host: 127.0.0.1 Database: test -- ------------------------------------------------------ -- Server version 5.0.24-max-log /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; /*!40101 SET NAMES utf8 */; /*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */; /*!40103 SET TIME_ZONE='+00:00' */; /*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */; /*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; /*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */; /*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */; -- -- Current Database: `test` -- CREATE DATABASE /*!32312 IF NOT EXISTS*/ `test` /*!40100 DEFAULT CHARACTER SET utf8 */; USE `test`; -- -- Table structure for table `federated_test` -- DROP TABLE IF EXISTS `federated_test`; CREATE TABLE `federated_test` ( `id` int(10) unsigned NOT NULL auto_increment, `val` int(10) unsigned NOT NULL, PRIMARY KEY (`id`) ) ENGINE=FEDERATED DEFAULT CHARSET=utf8 CONNECTION='mysql://mpopp:xxxxxxx@10.0.0.100/test/test'; -- -- Dumping data for table `federated_test` -- /*!40000 ALTER TABLE `federated_test` DISABLE KEYS */; LOCK TABLES `federated_test` WRITE; INSERT INTO `federated_test` VALUES (1,3144),(2,9596),(3,8547),(4,3949),(5,4103),(6,8670),(7,1043),(8,9202),(9,2883),(10,6810),(11,5400),(12,6569),(13,6649),(14,3536),(15,7734),(16,8064),(17,7116),(18,1391),(19,5606),(20,3857),(21,2469),(22,773); UNLOCK TABLES; /*!40000 ALTER TABLE `federated_test` ENABLE KEYS */; /*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */; /*!40101 SET SQL_MODE=@OLD_SQL_MODE */; /*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */; /*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */; /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; /*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; /*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; --- The point is here: /*!40000 ALTER TABLE `federated_test` DISABLE KEYS */; LOCK TABLES `federated_test` WRITE; INSERT INTO `federated_test` VALUES (1,3144),(2,9596),(3,8547),(4,3949),(5,4103),(6,8670),(7,1043),(8,9202),(9,2883),(10,6810),(11,5400),(12,6569),(13,6649),(14,3536),(15,7734),(16,8064),(17,7116),(18,1391),(19,5606),(20,3857),(21,2469),(22,773); UNLOCK TABLES; /*!40000 ALTER TABLE `federated_test` ENABLE KEYS */; mysqldump re-inserts the data into the federated table although it is already available through the remote server. In the case of a federated table it would IMHO be enough to only create the table definition, but not insert any data.
[9 Mar 2007 15:07]
Gianluca Gimigliano
Was it fixed in any version??
[21 Mar 2007 11:04]
Kai Voigt
Please add an option to mysqldump to either include INSERT statements for Federated tables or exclude them. Like the -h option for the UNIX tar statement.
[4 Apr 2008 9:59]
Nicolae Namolovan
Will ever this be fixed ?
[9 Jul 2008 16:25]
Chris Calender
The problem here is with the ALTER TABLE command that gets issued before the INSERT. ALTER TABLE cannot be issued on a Federated table: "The FEDERATED storage engine supports SELECT, INSERT, UPDATE, DELETE, and indexes. It does not support ALTER TABLE, or any Data Definition Language statements that directly affect the structure of the table, other than DROP TABLE." http://dev.mysql.com/doc/refman/5.0/en/federated-limitations.html But since mysqldump inserts this command (default with --opt), you get the following error when trying to import this: ERROR 1031 (HY000) at line 40: Table storage engine for 'federated_table' doesn't have this option -- Work-around: If using --opt, then you can also use --skip-disable-keys so that it doesn't add this to the dump file in the first place. This will allow the import to work fine. But if you do not want/need --opt (which is included by default), then you coud use --skip-opt and it will also omit the ALTER TABLE command. Further, you could manually remove the offending ALTER TABLE ... DISABLE KEYS and ALTER TABLE ... ENABLE KEYS if you have other tables in the dump file that you would like to keep this DISABLE/ENABLE KEYS for.
[9 Jul 2008 16:26]
Chris Calender
Markus has a great point above also, but that is different, and should be filed separately as a 'Feature Request'.
[9 Jul 2008 16:35]
Chris Calender
By the way, just for clarity, this is the initial offending statement: /*!40000 ALTER TABLE `federated_test` DISABLE KEYS */; But also don't forget the following (if removing these manually): /*!40000 ALTER TABLE `federated_test` ENABLE KEYS */;
[1 Jan 2009 16:50]
Andrii Nikitin
In my understanding handling FEDERATED tables in mysqldump should be similar to MERGE tables: no data go to backup because these engines have "VIEW" nature: dropping MERGE and FEDERATED tables will not result in data loss. This patch for 5.1 tree, 5.0 will be slightly different. bash-3.2$ diff -u client/mysqldump.c.old client/mysqldump.c --- client/mysqldump.c.old 2008-12-29 16:30:02.000000000 +0100 +++ client/mysqldump.c 2008-12-29 16:38:48.000000000 +0100 @@ -4512,7 +4512,8 @@ SYNOPSIS Check if we the table is one of the table types that should be ignored: - MRG_ISAM, MRG_MYISAM, if opt_delayed, if that table supports delayed inserts. + MRG_ISAM, MRG_MYISAM, FEDERATED, if opt_delayed, if that table supports + delayed inserts. If the table should be altogether ignored, it returns a TRUE, FALSE if it should not be ignored. If the user has selected to use INSERT DELAYED, it sets the value of the bool pointer supports_delayed_inserts to 0 if not @@ -4583,11 +4584,12 @@ } /* - If these two types, we do want to skip dumping the table + If these types, we do want to skip dumping the table data */ if (!opt_no_data && (!my_strcasecmp(&my_charset_latin1, table_type, "MRG_MyISAM") || - !strcmp(table_type,"MRG_ISAM"))) + !my_strcasecmp(&my_charset_latin1, table_type, "MRG_ISAM") || + !my_strcasecmp(&my_charset_latin1, table_type, "FEDERATED"))) result= IGNORE_DATA; } mysql_free_result(res);
[27 Feb 2009 14:00]
Bugs System
A patch for this bug has been committed. After review, it may be pushed to the relevant source trees for release in the next version. You can access the patch from: http://lists.mysql.com/commits/67860 2828 Satya B 2009-02-27 Fix for BUG#21360 - mysqldump error on federated tables When a mysqldump tool is used to dump federated tables, an error is thrown saying storage engine for the table doesn't have this option. mysqldump tries to re-insert the data into the federated table which causes the error. Since the data is already available on the remote server, mysqldump shouldn't try to dump the data again for FEDERATED tables. As stated it the bug page, it can be considered similar to the MERGE ENGINE with "view only" nature. Fixed by adding the "FEDERATED ENGINE" to the exception list to mysqldump tool modified: client/mysqldump.c mysql-test/suite/federated/federated.result mysql-test/suite/federated/federated.test
[17 Mar 2009 12:04]
Bugs System
A patch for this bug has been committed. After review, it may be pushed to the relevant source trees for release in the next version. You can access the patch from: http://lists.mysql.com/commits/69413 2775 Satya B 2009-03-17 Fix for BUG#21360 - mysqldump error on federated tables When a mysqldump tool is used to dump federated tables, an error is thrown saying storage engine for the table doesn't have an option. mysqldump tries to re-insert the data into the federated table which causes the error. Since the data is already available on the remote server, mysqldump shouldn't try to dump the data again for FEDERATED tables. As stated it the bug page, it can be considered similar to the MERGE ENGINE with "view only" nature. Fixed by adding the "FEDERATED ENGINE" to the exception list to ignore the data. modified: client/mysqldump.c mysql-test/r/federated.result mysql-test/t/federated.test
[17 Mar 2009 14:16]
Bugs System
A patch for this bug has been committed. After review, it may be pushed to the relevant source trees for release in the next version. You can access the patch from: http://lists.mysql.com/commits/69425 2775 Satya B 2009-03-17 Fix for BUG#21360 - mysqldump error on federated tables When loading dump created by mysqldump tool an error is thrown saying storage engine for the table doesn't have an option. mysqldump tries to re-insert the data into the federated table which causes the error. Since the data is already available on the remote server, mysqldump shouldn't try to dump the data again for FEDERATED tables. As stated it the bug page, it can be considered similar to the MERGE ENGINE with "view only" nature. Fixed by adding the "FEDERATED ENGINE" to the exception list to ignore the data. modified: client/mysqldump.c mysql-test/r/federated.result mysql-test/t/federated.test
[18 Mar 2009 11:29]
Bugs System
A patch for this bug has been committed. After review, it may be pushed to the relevant source trees for release in the next version. You can access the patch from: http://lists.mysql.com/commits/69572 2775 Satya B 2009-03-18 Fix for BUG#21360 - mysqldump error on federated tables When loading dump created by mysqldump tool an error is thrown saying storage engine for the table doesn't have an option. mysqldump tries to re-insert the data into the federated table which causes the error. Since the data is already available on the remote server, mysqldump shouldn't try to dump the data again for FEDERATED tables. As stated it the bug page, it can be considered similar to the MERGE ENGINE with "view only" nature. Fixed by adding the "FEDERATED ENGINE" to the exception list to ignore the data. modified: client/mysqldump.c mysql-test/r/federated.result mysql-test/t/federated.test
[19 Mar 2009 6:06]
Bugs System
A patch for this bug has been committed. After review, it may be pushed to the relevant source trees for release in the next version. You can access the patch from: http://lists.mysql.com/commits/69677 2775 Satya B 2009-03-19 Fix for BUG#21360 - mysqldump error on federated tables When loading dump created by mysqldump tool an error is thrown saying storage engine for the table doesn't have an option. mysqldump tries to re-insert the data into the federated table which causes the error. Since the data is already available on the remote server, mysqldump shouldn't try to dump the data again for FEDERATED tables. As stated in the bug page, it can be considered similar to the MERGE ENGINE with "view only" nature. Fixed by adding the "FEDERATED ENGINE" to the exception list to ignore the data. modified: client/mysqldump.c mysql-test/r/federated.result mysql-test/t/federated.test
[27 Mar 2009 14:32]
Bugs System
Pushed into 5.0.80 (revid:joro@sun.com-20090327142516-55gumdxj39z6eijj) (version source revid:leonard@mysql.com-20090324072904-7w2lxdxzw8hx1rnm) (merge vers: 5.0.80) (pib:6)
[27 Mar 2009 14:57]
Bugs System
Pushed into 5.1.34 (revid:joro@sun.com-20090327143448-wuuuycetc562ty6o) (version source revid:satya.bn@sun.com-20090319084951-a80qstoos37i3k64) (merge vers: 5.1.34) (pib:6)
[13 Apr 2009 9:22]
Bugs System
Pushed into 6.0.11-alpha (revid:alik@sun.com-20090413084402-snnrocwzktcl88ny) (version source revid:satya.bn@sun.com-20090319090710-fwl594sq9fzpq9mh) (merge vers: 6.0.11-alpha) (pib:6)
[15 Apr 2009 1:36]
Paul DuBois
Noted in 5.0.80, 5.1.34, 6.0.11 changelogs. Restoring a mysqldump dump file containing FEDERATED tables because the file contained the data for the table. Now only the table definition is dumped (because the data is located elsewhere).
[9 May 2009 16:47]
Bugs System
Pushed into 5.1.34-ndb-6.2.18 (revid:jonas@mysql.com-20090508185236-p9b3as7qyauybefl) (version source revid:jonas@mysql.com-20090508185236-p9b3as7qyauybefl) (merge vers: 5.1.34-ndb-6.2.18) (pib:6)
[9 May 2009 17:43]
Bugs System
Pushed into 5.1.34-ndb-6.3.25 (revid:jonas@mysql.com-20090509063138-1u3q3v09wnn2txyt) (version source revid:jonas@mysql.com-20090509063138-1u3q3v09wnn2txyt) (merge vers: 5.1.34-ndb-6.3.25) (pib:6)
[9 May 2009 18:41]
Bugs System
Pushed into 5.1.34-ndb-7.0.6 (revid:jonas@mysql.com-20090509154927-im9a7g846c6u1hzc) (version source revid:jonas@mysql.com-20090509154927-im9a7g846c6u1hzc) (merge vers: 5.1.34-ndb-7.0.6) (pib:6)