4分钟

任务 4 使用逻辑备份恢复数据库

任务目的

这一步将会指导学员如何通过逻辑备份恢复数据库。这一步的操作需要借助云服务器来实现,完成这一步操作后,可以将数据库恢复至创建备份时间节点的状态。

任务步骤

1.下载备份文件

云数据库 MySQL控制台 中点击数据库右侧的【管理】进入管理界面,在数据库管理页面中选择【备份恢复】>【数据备份列表】,进入数据库备份列表页:

4-4-1 数据备份列表页

选择准备恢复的逻辑备份文件,点击【复制】按钮,复制备份文件的下载链接:

4-4-2 获取备份下载链接

登录先前已经创建好的CVM实例,使用wget命令下载备份文件,由于(同一区域的)CVM和云数据库在内网连通,下载任务将会在极短的时间内完成。执行下方命令进行下载(其中的下载链接需要替换为刚复制的下载链接):

wget -c '<备份文件下载链接>' -O logic_backup.xb

-O后指定下载后保存的文件名,此处定义为logic_backup.xb,学员若自行指定,记得在下方同步进行替换。

下载完成后,可以看到类似下方的提示信息:

2020-03-03 18:02:45 (33.6 MB/s) - ‘logic_backup.xb’ saved [411069/411069]

说明备份文件已经成功下载。

2.解包备份文件

执行下方命令,解包备份文件:

xbstream -x < logic_backup.xb

注:如果学员修改了保存的备份文件名,记得将logic_backup.xb替换为指定的文件名。

解包成功后,输入ls命令,可以在当前目录下看到以.qp后缀结尾的文件,说明解包成功:

4-4-3 解包备份文件

3.提取SQL文件

执行以下命令,解压.qp结尾的文件:

qpress -d <上一步解包出来的文件名> .

注:此处的文件名较长,学员可以输入文件名的前几个字母,然后通过Tab键自动补全。最后的.表示将解压后的文件保存在当前目录,一定要保留,否则将会报错!

提取成功后,输入ls命令,可以在当前目录下看到以.sql后缀结尾的逻辑备份脚本文件,说明解包成功:

4-4-4 提取SQL文件

4.导入数据库

(1)远程登录MySQL。

执行以下命令(内网地址替换为上方获取到的内网地址),访问MySQL实例:

mysql -h <内网地址> -u root -p

输入数据库密码并按下回车完成登录。

执行下方命令,进入test数据库并查看数据库中的所有数据表:

-- 使用数据库 test
USE test;
-- 展示数据库 test 中的所有数据表
SHOW TABLES;

将会展示如下的信息:

MySQL [test]> show tables;
+----------------+
| Tables_in_test |
+----------------+
| address        |
| item           |
| user           |
+----------------+
3 rows in set (0.003 sec)

(2)删除表(用于测试)。

执行下方命令,删除数据表user

-- 删除数据表 user
DROP TABLE user;
-- 展示数据库 test 中的所有数据表
SHOW TABLES;

注意:删除数据表(库)是一件非常危险的事情!在执行删除命令前一定要非常小心,尽量避免在生产环境中进行数据表的删除操作,一旦操作执行完成,表中的数据将会立即消失,如执行数据误删操作可能会造成难以估量的损失!

此时展示出来的数据库test中,数据表user已经被移除:

MySQL [test]> SHOW TABLES;
+----------------+
| Tables_in_test |
+----------------+
| address        |
| item           |
+----------------+
1 row in set (0.003 sec)

接下来要尝试通过逻辑备份来恢复数据库中的内容。

(3)使用SOURCE命令恢复逻辑备份。

执行下方命令,通过逻辑备份恢复数据:

-- 通过逻辑备份恢复数据
SOURCE <逻辑备份文件>

注:上方的 <逻辑备份文件> 需要替换为学员提取的.sql后缀文件,由于在MySQL中无法自动补全,学员可以向上方翻页,复制前方提取的文件名,粘贴到此处(注意不要直接用Ctrl+V快捷键,此命令将会退出MySQL,请使用右键进行复制)。

(4)验证删除表已经成功恢复。

执行上方的操作命令后,数据库的恢复操作将会自动进行,等待数据库恢复完毕后,执行下方命令,再次查看test数据库中的数据表,确认删除的表已经成功恢复:

-- 使用数据库 test
USE test;
-- 展示数据库 test 中的所有数据表
SHOW TABLES;

展示结果如下:

MySQL [test]> SHOW TABLES;
+----------------+
| Tables_in_test |
+----------------+
| address        |
| item           |
| user           |
+----------------+
3 rows in set (0.003 sec)

刚才删除的表如今又能成功展示,说明使用逻辑备份恢复数据库的操作执行成功。