我正在使用mysqldump从系统转储数据库。问题是:有时SQL文件在文件的MIDDLE中包含一个“删除数据库”,不幸的是这些文件的导入失败了 - 在我看来这很逻辑。
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
声明,也许我做错了什么?
答案 0 :(得分:4)
这是旧版MySQL中的一个错误:http://bugs.mysql.com/bug.php?id=17201
建议升级:)
答案 1 :(得分:2)
--add-drop-database选项补充说明了这一点。它是为了确保您获得一个干净的数据库,其内容与转储时的内容完全相同。
在每个 CREATE DATABASE语句之前添加DROP DATABASE语句