【问题标题】:mysqldump inserts "drop database" statement in the middle of the dumpmysqldump 在转储中间插入“drop database”语句
【发布时间】:2013-04-18 10:33:35
【问题描述】:

我正在使用 mysqldump 从系统中转储数据库。问题是:有时SQL文件在文件的中间包含一个“删除数据库”,不幸的是这些文件的导入失败 - 在我看来很合乎逻辑。

mysqldump命令行如下:

mysqldump -u$USER -p$PASS \
 --default-character-set=utf8 --single-transaction \
 --add-drop-database --add-drop-table \
 --databases $DB

当我尝试重新导入此 SQL 文件时,我收到此错误:ERROR 1146 (42S02) at line 3486: Table 'meta.tx_baauftragsdb_auft' doesn't exist

查看 SQL 转储文件,我看到以下几行:

3470 --
3471 -- Current Database: `meta`
3472 --
3473
3474 /*!40000 DROP DATABASE IF EXISTS `meta`*/;
3475
3476 CREATE DATABASE /*!32312 IF NOT EXISTS*/ `meta` /*!40100 DEFAULT CHARACTER SET utf8 */;
3477
3478 USE `meta`;
3479
3480 --
3481 -- View structure for view `tx_baauftragsdb_view_ueber`
3482 --
3483
3484 /*!50001 DROP TABLE IF EXISTS `tx_baauftragsdb_view_ueber`*/;
3485 /*!50001 DROP VIEW IF EXISTS `tx_baauftragsdb_view_ueber`*/;
3486 /*!50001 CREATE ALGORITHM=UNDEFINED DEFINER=`meta`@`localhost` SQL SECURITY 

... 还有 DROP DATABSE 语句。如果我删除此语句下方的所有内容,则 db 导入就好了,但是......好吧......我想知道这里发生了什么。

谁能告诉我这里发生了什么,为什么会有这个额外的DROP DATABASE 声明,也许我做错了什么?

【问题讨论】:

    标签: mysql mysqldump


    【解决方案1】:

    这是旧版本 MySQL 中的一个错误:http://bugs.mysql.com/bug.php?id=17201

    建议升级:)

    【讨论】:

      【解决方案2】:

      --add-drop-database 选项添加了这一点。它可以确保您获得一个干净的数据库,其内容与进行转储时的内容完全相同。

      每个 CREATE DATABASE 语句之前添加一个 DROP DATABASE 语句

      【讨论】:

      • 啊,我故意添加了--add-drop-database 语句 - 我想要一个干净的导入。但为什么会出现两次,这是个问题。因为它也位于 SQL 转储文件的顶部,在我眼中属于它。
      • 添加在每个 CREATE DATABASE 语句之前。
      • 我认为这是真正的答案。Mysqldump 没有添加两次 drop 语句。它添加了 x 次,其中 x 是创建数据库语句的数量。
      • @rkosegi 如果只转储一个数据库,则不会。
      猜你喜欢
      • 1970-01-01
      • 2015-08-30
      • 2020-02-21
      • 1970-01-01
      • 1970-01-01
      • 2012-03-19
      • 2016-09-18
      • 2017-05-11
      • 2012-05-14
      相关资源
      最近更新 更多