问题

备份数据库

1
mysqldump -uroot  -p database_name tab1 > test.sql;   # 远程加 -h

恢复数据库

  • 使用的是source,进入数据库以后
1
2
use database_name;
source test.sql;
  • 但是失败了,报错,并且tab1表也被删除了
1
2
ERROR 1146 (42S02): Table 'database_name.tab1' doesn't exist
ERROR 1146 (42S02): Table 'database_name.tab1' doesn't exist
  • :原来是有这个表的,但是在执行source以后表就被删除了

解决

  • 找了好久都没找到原因,看了一下导出的sql文件,发现是先删除表再创建,然后插入数据,猜测是因为创建的时候失败了,导致没有了表。
  • sql文件开头有这样一段:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
-- ----------------------------
-- 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,成功!