问题
备份数据库
mysqldump -uroot -p database_name tab1 > test.sql; # 远程加 -h
恢复数据库
-
使用的是source,进入数据库以后
use database_name; source test.sql;
-
但是失败了,报错,并且tab1表也被删除了
ERROR 1146 (42S02): Table 'database_name.tab1' doesn't exist ERROR 1146 (42S02): Table 'database_name.tab1' doesn't exist
- 注:原来是有这个表的,但是在执行source以后表就被删除了
解决
- 找了好久都没找到原因,看了一下导出的sql文件,发现是先删除表再创建,然后插入数据,猜测是因为创建的时候失败了,导致没有了表。
-
sql文件开头有这样一段:
-- ---------------------------- -- Table structure for tab1 -- ---------------------------- DROP TABLE IF EXISTS `tab1`; CREATE TABLE `tab1` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL, `phone` varchar(11) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL, `address` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL, `create_at` datetime(6) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=15982 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin; -- ---------------------------- -- Records of tab1 -- ----------------------------
- 既然创建失败了,那就不去删除了,直接用自己原来的数据表(但是用保证表的结构是一致的)。
- 修改sql文件,把上面的两句删掉。
- 再执行source,成功!