2

我正在使用 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声明,也许我做错了什么?

4

2 回答 2

4

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

建议升级:)

于 2013-04-18T11:15:59.587 回答
2

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

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

于 2013-04-18T10:37:05.203 回答