该实验衔接上一次实验:MYSQL学习与数据库综合实验(十)——语句备份与恢复实验(基于Ubuntu18.04中Docker安装的MySQL8实验)
11.1使用mysqldump命令备份DBEM数据库中的salary表
将数据库dbms中的salary表备份到当前所在目录中(你所在文件夹下使用指令的地方)backup文件夹下的salary.sql文件中。
mysqldump -h localhost -P 3307 -u root -p dbms salary > backup/salary.sql


11.2.使用mysqldump命令备份整个DBEM数据库
mysqldump -h localhost -P 3307 -u root -p dbms --default-character-set=utf8 > backup/dbms.sql
将数据库dbms备份到当前所在目录中(你所在文件夹下使用指令的地方)backup文件夹下的dbms.sql文件中。
11.3.删除employee表,然后使用mysql命令,利用上述保存的文件恢复employee表
①首先删除employee表

②从数据库dbms的的全备份dbms.sql中查询employee表的结构(使用sed命令)
sed -e'/./{H;$!d;}' -e 'x;/CREATE TABLE `employee`/!d;q' dbms.sql
通过这个命令我们可以从dbms.sql全备份中查询出来创建employee表的SQL语句,这样就方便我们使用这个结果来创建employee表了。
②使用查询出来的employee表结构语句在MySQL中创建employee表
DROP TABLE IF EXISTS `employee`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!50503 SET character_set_client = utf8mb4 */;
CREATE TABLE `employee` (
`employeeID` char(6) NOT NULL,
`name` char(10) NOT NULL,
`education` char(4) NOT NULL,
`birth` date NOT NULL,
`gender` tinyint(1) NOT NULL DEFAULT '1',
`workYear` tinyint(1) DEFAULT NULL,
`address` varchar(100) DEFAULT NULL,
`phone` char(12) DEFAULT NULL,
`departmentID` char(3:) DEFAULT NULL,
PRIMARY KEY (`employeeID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
这时候我们就将employee表的结构创建出来了。
③从dbms.sql备份中查询出employee表的数据,并保存到employee.sql文件中
grep 'INSERT INTO `employee`' dbms.sql >employee.sql

④从employee.sql中恢复数据到MySQL的dbms数据库中的employee表。
mysql -h localhost -P 3307 -u root -p dbms --default-character-set=utf8 < employee.sql
这个命令中的localhost表示当前主机的ip,端口使用大写的 -P 表示,我服务器的端口是3307,如果导入失败,可以使用你服务器的ip来进行连接数据库试试。
这里使用的是mysql的导入命令,而不是使用 mysqldump哦!并且导入的时候设置了默认的编码,要和导出时候设置的编码一样。这样数据就完整地从全备份数据库dbms.sql中提取出来最终恢复到MySQL数据库了。
ps:在进行导入导出文件是需要设置默认编码,为了防止乱码
11.4.删除salary表的部分数据,然后使用mysqlimport命令及--replace功能恢复salary表,其中salary表的数据备份文件已在11.1中备份好
①首先删除两条数据
②从备份的salary.csv中恢复数据:
mysqlimport -h localhost -P 3307 -u root -p --default-character-set=utf8 --replace dbms salary.csv;
这样数据就完整地从全备份数据库dbms.sql中提取出来最终恢复到MySQL数据库了。
PS:在进行导入导出文件是需要设置默认编码,为了防止乱码