背景
最近自己在工作中碰到了一个麻烦,那就是在数据迁移时,因为自己一开始的迁移方案不合理,再加上对Navicat的备份还原功能不太熟悉,结果在恢复数据的过程中把测试同事最近两周辛辛苦苦造的测试数据全给弄没了,把测试同事都整的没脾气了…后面我将具体介绍自己的这个失误到底是怎么回事。
另外就是马上要上线了,而自己把用户表中的数据给刷烂了,这导致项目的所有功能都用不了,到处都在报错,让测试同事无法正常测试页面功能是否正常,领导也在旁边催着我快点解决这个问题,这些都让我当时倍感焦灼,生怕自己无法快速解决这些问题。这件事也让我意识到了是时候认真学习下Navicat的备份还原功能了。
下面我将手把手带领大家掌握这种重要技能,学会它的意义在于让你可以随心所欲的操作数据库的中的任何表,以及表中的任何数据,而不用担心出问题,也在于让你工作时更有安全感,以后再也不用担心因为自己把表数据给完坏了而被领导骂,被同事指责。掌握了这个技能,我们在开发中犯多少错误都行!
环境准备
测试数据
创建两张表,部门表和员工表
-- 创建部门表
CREATE TABLE department (
id INT AUTO_INCREMENT PRIMARY KEY COMMENT '部门ID',
name VARCHAR(100) NOT NULL COMMENT '部门名称',
manager_id INT COMMENT '部门经理ID',
location VARCHAR(200) COMMENT '部门所在地',
budget DECIMAL(15, 2) COMMENT '部门预算',
established_date DATE COMMENT '部门成立日期',
email VARCHAR(100) COMMENT '部门邮箱',
phone VARCHAR(20) COMMENT '部门电话',
description TEXT COMMENT '部门描述',
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间'
) COMMENT '部门表';
-- 创建员工表
CREATE TABLE employee (
id INT AUTO_INCREMENT PRIMARY KEY COMMENT '员工ID',
name VARCHAR(100) NOT NULL COMMENT '员工姓名',
department_id INT COMMENT '所属部门ID',
position VARCHAR(100) COMMENT '职位',
salary DECIMAL(15, 2) COMMENT '薪水',
hire_date DATE COMMENT '入职日期',
email VARCHAR(100) COMMENT '员工邮箱',
phone VARCHAR(20) COMMENT '员工电话',
address VARCHAR(200) COMMENT '员工地址',
gender ENUM('Male', 'Female', 'Other') COMMENT '性别',
birth_date DATE COMMENT '出生日期',
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间'
) COMMENT '员工表';
往上面两张表中各自插入10条测试数据:
-- 往部门表中插入10条测试数据
INSERT INTO department (name, manager_id, location, budget, established_date, email, phone, description)
VALUES
('研发部', 1, '北京', 1000000.00, '2010-01-01', 'rd@example.com', '010-12345678', '负责产品研发'),
('市场部', 2, '上海', 500000.00, '2012-05-15', 'marketing@example.com', '021-87654321', '负责市场推广'),
('财务部', 3, '广州', 300000.00, '2011-03-10', 'finance@example.com', '020-11223344', '负责公司财务'),
('人事部', 4, '深圳', 200000.00, '2013-07-20', 'hr@example.com', '0755-55667788', '负责招聘和员工管理'),
('行政部', 5, '杭州', 150000.00, '2014-09-25', 'admin@example.com', '0571-99887766', '负责日常行政事务'),
('销售部', 6, '南京', 800000.00, '2015-11-30', 'sales@example.com', '025-44556677', '负责产品销售'),
('客服部', 7, '武汉', 250000.00, '2016-02-14', 'support@example.com', '027-33445566', '负责客户服务'),
('IT部', 8, '成都', 400000.00, '2017-04-18', 'it@example.com', '028-77889900', '负责IT技术支持'),
('法务部', 9, '重庆', 100000.00, '2018-06-22', 'legal@example.com', '023-11223344', '负责法律事务'),
('采购部', 10, '西安', 300000.00, '2019-08-28', 'purchase@example.com', '029-55667788', '负责采购管理');
-- 往员工表中插入10条测试数据
INSERT INTO employee (name, department_id, position, salary, hire_date, email, phone, address, gender, birth_date)
VALUES
('张三', 1, '研发工程师', 15000.00, '2015-06-01', 'zhangsan@example.com', '13800138001', '北京市海淀区', 'Male', '1990-05-15'),
('李四', 1, '研发经理', 25000.00, '2013-08-15', 'lisi@example.com', '13800138002', '北京市朝阳区', 'Male', '1985-12-20'),
('王五', 2, '市场专员', 12000.00, '2016-07-10', 'wangwu@example.com', '13800138003', '上海市浦东新区', 'Female', '1992-03-25'),
('赵六', 2, '市场经理', 20000.00, '2014-09-05', 'zhaoliu@example.com', '13800138004', '上海市徐汇区', 'Male', '1988-11-30'),
('孙七', 3, '财务主管', 18000.00, '2012-04-20', 'sunqi@example.com', '13800138005', '广州市天河区', 'Female', '1986-07-12'),
('周八', 3, '财务助理', 10000.00, '2018-03-15', 'zhouba@example.com', '13800138006', '广州市越秀区', 'Male', '1993-09-18'),
('吴九', 4, '人事专员', 11000.00, '2017-05-25', 'wujiu@example.com', '13800138007', '深圳市南山区', 'Female', '1991-02-14'),
('郑十', 4, '人事经理', 22000.00, '2015-11-10', 'zhengshi@example.com', '13800138008', '深圳市福田区', 'Male', '1987-04-28'),
('刘十一', 5, '行政助理', 9000.00, '2019-08-05', 'liushiyi@example.com', '13800138009', '杭州市西湖区', 'Female', '1994-06-22'),
('陈十二', 5, '行政经理', 18000.00, '2016-12-15', 'chenshier@example.com', '13800138010', '杭州市滨江区', 'Male', '1989-10-10');
使用Navicat备份数据
上面我们新建了两张表,并且往这两张表中各自插入了10条记录,现在我们来备份这个数据库
右键备份按钮,选择【新建备份】
备份整个数据库
备份整个数据库比较简单,直接点击备份,默认就是备份整个库
我们可以通过这里的【消息日志】看到备份的进度和消息,从而了解Navicat的整个备份过程
上面这样就算是备份成功了
备份后我们可以看到一个备份记录,默认的备份文件的名称是备份时的时间戳,我们将来就是根据这个文件来还原数据。我们还可以对这个备份文件改名字。
下面是我修改备份文件名字后的样子,一般备份文件要体现我们备份的内容,就好像我们平时写代码给变量名命名要见名知意一样。
对整个数据库的备份比较简单,下面我们来看下如何只对库中的部分表进行备份。
备份库中的部分数据
一般来说,我们基本上都最好要做一个整库备份,因为这样数据更加完整,将来可以恢复所有我们想要恢复的数据。
但是,只备份部分数据也有它的优势,那就是备份时间短,而且利用这个备份可以实现只还原我们想要还原的部分数据,而不是还原整个库,所以掌握这两种备份的技巧都很有用!
同样的,第一步也是【新建备份】
然后我们进入到【对象选择】的页签,勾选自己想要备份的数据,这里我只想备份员工表,也就只勾选了员工表,对于自己不需要备份的对象,自己全都取消勾选了。
下面可以看到备份的日志
从下图中我们可以看到一个新的备份文件
从备份中提取sql
我们在前面的两次备份中已经得到了两个备份文件,我们还可以从这两个备份文件中提取出sql,看看备份文件的具体内容。
首先我们看整库备份的那个备份文件:
直接点击【提取】
点击保存即可
可以在【消息日志】中看到提取sql的实时进度和提取过程
然后我们看下提取出的sql内容:
/*
MySQL Backup
Database: csdn
Backup Time: 2025-03-21 20:04:11
*/
SET FOREIGN_KEY_CHECKS=0;
DROP TABLE IF EXISTS `csdn`.`department`;
DROP TABLE IF EXISTS `csdn`.`employee`;
CREATE TABLE `csdn`.`department` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '部门ID',
`name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '部门名称',
`manager_id` int(11) NULL DEFAULT NULL COMMENT '部门经理ID',
`location` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '部门所在地',
`budget` decimal(15, 2) NULL DEFAULT NULL COMMENT '部门预算',
`established_date` date NULL DEFAULT NULL COMMENT '部门成立日期',
`email` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '部门邮箱',
`phone` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '部门电话',
`description` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '部门描述',
`created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`updated_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 11 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '部门表' ROW_FORMAT = Dynamic;
CREATE TABLE `csdn`.`employee` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '员工ID',
`name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '员工姓名',
`department_id` int(11) NULL DEFAULT NULL COMMENT '所属部门ID',
`position` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '职位',
`salary` decimal(15, 2) NULL DEFAULT NULL COMMENT '薪水',
`hire_date` date NULL DEFAULT NULL COMMENT '入职日期',
`email` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '员工邮箱',
`phone` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '员工电话',
`address` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '员工地址',
`gender` enum('Male','Female','Other') CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '性别',
`birth_date` date NULL DEFAULT NULL COMMENT '出生日期',
`created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`updated_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 11 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '员工表' ROW_FORMAT = Dynamic;
BEGIN;
LOCK TABLES `csdn`.`department` WRITE;
DELETE FROM `csdn`.`department`;
INSERT INTO `csdn`.`department` (`id`,`name`,`manager_id`,`location`,`budget`,`established_date`,`email`,`phone`,`description`,`created_at`,`updated_at`) VALUES (1, '研发部', 1, '北京', 1000000.00, '2010-01-01', 'rd@example.com', '010-12345678', '负责产品研发', '2025-03-21 19:51:14', '2025-03-21 19:51:14'),(2, '市场部', 2, '上海', 500000.00, '2012-05-15', 'marketing@example.com', '021-87654321', '负责市场推广', '2025-03-21 19:51:14', '2025-03-21 19:51:14'),(3, '财务部', 3, '广州', 300000.00, '2011-03-10', 'finance@example.com', '020-11223344', '负责公司财务', '2025-03-21 19:51:14', '2025-03-21 19:51:14'),(4, '人事部', 4, '深圳', 200000.00, '2013-07-20', 'hr@example.com', '0755-55667788', '负责招聘和员工管理', '2025-03-21 19:51:14', '2025-03-21 19:51:14'),(5, '行政部', 5, '杭州', 150000.00, '2014-09-25', 'admin@example.com', '0571-99887766', '负责日常行政事务', '2025-03-21 19:51:14', '2025-03-21 19:51:14'),(6, '销售部', 6, '南京', 800000.00, '2015-11-30', 'sales@example.com', '025-44556677', '负责产品销售', '2025-03-21 19:51:14', '2025-03-21 19:51:14'),(7, '客服部', 7, '武汉', 250000.00, '2016-02-14', 'support@example.com', '027-33445566', '负责客户服务', '2025-03-21 19:51:14', '2025-03-21 19:51:14'),(8, 'IT部', 8, '成都', 400000.00, '2017-04-18', 'it@example.com', '028-77889900', '负责IT技术支持', '2025-03-21 19:51:14', '2025-03-21 19:51:14'),(9, '法务部', 9, '重庆', 100000.00, '2018-06-22', 'legal@example.com', '023-11223344', '负责法律事务', '2025-03-21 19:51:14', '2025-03-21 19:51:14'),(10, '采购部', 10, '西安', 300000.00, '2019-08-28', 'purchase@example.com', '029-55667788', '负责采购管理', '2025-03-21 19:51:14', '2025-03-21 19:51:14')
;
UNLOCK TABLES;
COMMIT;
BEGIN;
LOCK TABLES `csdn`.`employee` WRITE;
DELETE FROM `csdn`.`employee`;
INSERT INTO `csdn`.`employee` (`id`,`name`,`department_id`,`position`,`salary`,`hire_date`,`email`,`phone`,`address`,`gender`,`birth_date`,`created_at`,`updated_at`) VALUES (1, '张三', 1, '研发工程师', 15000.00, '2015-06-01', 'zhangsan@example.com', '13800138001', '北京市海淀区', 'Male', '1990-05-15', '2025-03-21 19:51:14', '2025-03-21 19:51:14'),(2, '李四', 1, '研发经理', 25000.00, '2013-08-15', 'lisi@example.com', '13800138002', '北京市朝阳区', 'Male', '1985-12-20', '2025-03-21 19:51:14', '2025-03-21 19:51:14'),(3, '王五', 2, '市场专员', 12000.00, '2016-07-10', 'wangwu@example.com', '13800138003', '上海市浦东新区', 'Female', '1992-03-25', '2025-03-21 19:51:14', '2025-03-21 19:51:14'),(4, '赵六', 2, '市场经理', 20000.00, '2014-09-05', 'zhaoliu@example.com', '13800138004', '上海市徐汇区', 'Male', '1988-11-30', '2025-03-21 19:51:14', '2025-03-21 19:51:14'),(5, '孙七', 3, '财务主管', 18000.00, '2012-04-20', 'sunqi@example.com', '13800138005', '广州市天河区', 'Female', '1986-07-12', '2025-03-21 19:51:14', '2025-03-21 19:51:14'),(6, '周八', 3, '财务助理', 10000.00, '2018-03-15', 'zhouba@example.com', '13800138006', '广州市越秀区', 'Male', '1993-09-18', '2025-03-21 19:51:14', '2025-03-21 19:51:14'),(7, '吴九', 4, '人事专员', 11000.00, '2017-05-25', 'wujiu@example.com', '13800138007', '深圳市南山区', 'Female', '1991-02-14', '2025-03-21 19:51:14', '2025-03-21 19:51:14'),(8, '郑十', 4, '人事经理', 22000.00, '2015-11-10', 'zhengshi@example.com', '13800138008', '深圳市福田区', 'Male', '1987-04-28', '2025-03-21 19:51:14', '2025-03-21 19:51:14'),(9, '刘十一', 5, '行政助理', 9000.00, '2019-08-05', 'liushiyi@example.com', '13800138009', '杭州市西湖区', 'Female', '1994-06-22', '2025-03-21 19:51:14', '2025-03-21 19:51:14'),(10, '陈十二', 5, '行政经理', 18000.00, '2016-12-15', 'chenshier@example.com', '13800138010', '杭州市滨江区', 'Male', '1989-10-10', '2025-03-21 19:51:14', '2025-03-21 19:51:14')
;
UNLOCK TABLES;
COMMIT;
我们可以看到导出的sql文件的sql中的确是包含了库中的所有数据,而且基本上都是先删除表,然后重新插入数据,起到一个重置和恢复的效果。
同样的,我们看下那个只还原了员工表的备份中的sql
下面是只备份员工表的sql
/*
MySQL Backup
Database: csdn
Backup Time: 2025-03-21 20:30:26
*/
SET FOREIGN_KEY_CHECKS=0;
DROP TABLE IF EXISTS `csdn`.`employee`;
CREATE TABLE `csdn`.`employee` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '员工ID',
`name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '员工姓名',
`department_id` int(11) NULL DEFAULT NULL COMMENT '所属部门ID',
`position` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '职位',
`salary` decimal(15, 2) NULL DEFAULT NULL COMMENT '薪水',
`hire_date` date NULL DEFAULT NULL COMMENT '入职日期',
`email` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '员工邮箱',
`phone` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '员工电话',
`address` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '员工地址',
`gender` enum('Male','Female','Other') CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '性别',
`birth_date` date NULL DEFAULT NULL COMMENT '出生日期',
`created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`updated_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 11 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '员工表' ROW_FORMAT = Dynamic;
BEGIN;
LOCK TABLES `csdn`.`employee` WRITE;
DELETE FROM `csdn`.`employee`;
INSERT INTO `csdn`.`employee` (`id`,`name`,`department_id`,`position`,`salary`,`hire_date`,`email`,`phone`,`address`,`gender`,`birth_date`,`created_at`,`updated_at`) VALUES (1, '张三', 1, '研发工程师', 15000.00, '2015-06-01', 'zhangsan@example.com', '13800138001', '北京市海淀区', 'Male', '1990-05-15', '2025-03-21 19:51:14', '2025-03-21 19:51:14'),(2, '李四', 1, '研发经理', 25000.00, '2013-08-15', 'lisi@example.com', '13800138002', '北京市朝阳区', 'Male', '1985-12-20', '2025-03-21 19:51:14', '2025-03-21 19:51:14'),(3, '王五', 2, '市场专员', 12000.00, '2016-07-10', 'wangwu@example.com', '13800138003', '上海市浦东新区', 'Female', '1992-03-25', '2025-03-21 19:51:14', '2025-03-21 19:51:14'),(4, '赵六', 2, '市场经理', 20000.00, '2014-09-05', 'zhaoliu@example.com', '13800138004', '上海市徐汇区', 'Male', '1988-11-30', '2025-03-21 19:51:14', '2025-03-21 19:51:14'),(5, '孙七', 3, '财务主管', 18000.00, '2012-04-20', 'sunqi@example.com', '13800138005', '广州市天河区', 'Female', '1986-07-12', '2025-03-21 19:51:14', '2025-03-21 19:51:14'),(6, '周八', 3, '财务助理', 10000.00, '2018-03-15', 'zhouba@example.com', '13800138006', '广州市越秀区', 'Male', '1993-09-18', '2025-03-21 19:51:14', '2025-03-21 19:51:14'),(7, '吴九', 4, '人事专员', 11000.00, '2017-05-25', 'wujiu@example.com', '13800138007', '深圳市南山区', 'Female', '1991-02-14', '2025-03-21 19:51:14', '2025-03-21 19:51:14'),(8, '郑十', 4, '人事经理', 22000.00, '2015-11-10', 'zhengshi@example.com', '13800138008', '深圳市福田区', 'Male', '1987-04-28', '2025-03-21 19:51:14', '2025-03-21 19:51:14'),(9, '刘十一', 5, '行政助理', 9000.00, '2019-08-05', 'liushiyi@example.com', '13800138009', '杭州市西湖区', 'Female', '1994-06-22', '2025-03-21 19:51:14', '2025-03-21 19:51:14'),(10, '陈十二', 5, '行政经理', 18000.00, '2016-12-15', 'chenshier@example.com', '13800138010', '杭州市滨江区', 'Male', '1989-10-10', '2025-03-21 19:51:14', '2025-03-21 19:51:14')
;
UNLOCK TABLES;
COMMIT;
通过sql脚本我们可以看到也是先删除原本的员工表,然后再重新建表,然后再插入数据,跟我们手动恢复表的操作是一样的。可以看到这个只备份员工表的备份文件中的sql也确实是只有和员工表相关的内容。
使用Navicat还原数据
还原整个库
一般不建议这样做,因为还原整个库会导致所有这个库中的所有数据都恢复到备份时的状态,也就是说我们在备份后对库中某些表数据的所有增删改操作的痕迹都会被抹掉。也就是说,备份以后表中新增的数据,新增的数据会全部丢失。
我就是因为还原了整个库而差点被测试同事骂了,因为我把人家辛辛苦苦造好的数据给弄没了…所以一般来说,不建议直接还原整个库,而是只还原自己需要的表或者视图,这样影响会小很多。
另外即便真的需要还原整个库时,在还原前,最好对数据库再次做个备份,方便将来还能将数据库恢复到目前的状态,防止某些特殊情况下不能还原整个库,如果自己没有这个备份,将来就算是想恢复到目前的状态都实现不了。总而言之,一句话,**在对表数据后者表结构做大改动时,一定要提前建好备份!**这是我最近用眼泪和焦虑换来的教训。
在备份前,我们先新增一张表,然后删除一张表,通过这种方式来检验还原是否有效果
我这里删除了员工表和部门表,然后再还原整个库
直接点还原,默认就是还原备份文件中的所有对象。
会有一个弹框,直接点确定即可
可以通过【消息日志】看到还原的进度和过程
可以看到我们删除的表又回来了,而我们新增的表则没有任何影响,因为它不在我们的备份范围内。
这说明我们的还原是有效的!
只还原部分数据
我们可以通过对整库备份的那个文件来还原部分数据,或者使用那个只对部分数据备份的文件来还原部分数据,这两种方式都行。
使用整库备份的文件
在还原前,我先删除员工表,只留下部门表
同样的,选择【还原备份】
在【对象选择】的页签中只勾选自己想要还原的员工表
这里直接点确定即可
通过【消息日志】也可以看到确实只还原了员工表
可以看到员工表确实还原成功了!
使用部分对象备份的文件
同样的,我们再次删除员工表,只留下部门表,然后使用前面的只对员工表备份的那个备份文件进行还原操作。
这里直接点击还原即可,因为这个备份文件中只有一个员工表。
通过【消息日志】也确实可以看到只还原了员工表,其他表没有受到任何影响,这说明我们的还原是有效的。
使用sql文件还原数据
除了使用前面的备份文件外,我们还可以使用前面从备份文件中提取出的sql文件来还原数据。
这里我还是删除员工表,只留下部门表
然后选择我们前面提取的sql文件
点击开始
可以看到我们通过sql文件还原也是有效的
虽然我们直接将sql文件中的内容复制到查询页签中,就像下面这样:
但是不建议这样做,因为如果库中的表特别多,表中的数据特别多的情况下,我们提取的那个sql文件会特别大。如果直接将几万行的sql语句复制到查询页面中去执行,会导致Navicat直接卡死,我过去已经试过了,而直接执行sql文件就没有这个问题,而且Navicat执行sql文件的效率要比在查询页签中逐条执行几万行sql的效率更高。
最后的总结
今天这篇文章我们讲了如何使用Navicat的备份还原功能,以及掌握这个技能对我们开发人员来说有什么意义,具体来说就是可以让我们在开发中更有安全感,让我们可以随心所欲的犯错而且还不用担心产生什么不可控的风险。
另外提醒一句,在做重要操作前先做数据备份是个好习惯!不要忘了这一点。除此之外,我们最好定期对数据做备份,比如每周备份一次数据
觉得有收获的朋友可以点个赞,您的鼓励就是我最大的动力!