使用vsql工具恢复
功能描述
当待恢复的备份文件是由 vb_dump 或vb_dumpall 导出的纯文本格式(FILE.sql)的文件时,可以使用以下两种方式进行备份文件的恢复:
- 方式一:通过 vsql工具的-f选项执行文件中的命令进行恢复。
- 方式二:使用 vsql连接到数据库后,使用\i元命令进行恢复。
注意事项
- 本节介绍的方式仅用于恢复纯文本格式的备份文件。
- 使用 vsql工具恢复纯文本格式的备份文件时是以追加方式进行导入的。多次导入会造成数据异常。
- 恢复成功后,建议在每个数据库上运行ANALYZE | ANALYSE,优化程序提供有用的统计数据。
- vb_dumpall恢复前,必须确保所有必要的表空间目录为空;否则,对于处在非默认位置的数据库,数据库创建会失败。(可以通过vsql工具的\db元命令列出所有可用的表空间。)
- 方式二中,
\i
元命令用于从文件中读取内容,并将其当作输入,执行查询。更多vsql下的元命令详见vsql。
命令格式
方式一:
vsql -d vexdb -p 5432 -f FILE.sql
- -d:连接的数据库名称,默认为vexdb。
- -p:连接的数据库端口号,默认为5432。
- -f:执行文件FILE.sql中的命令,然后退出。
方式二:
\i FILE
- 使用vsql工具连接到数据库后才能执行-i元命令。
- FILE:待恢复的备份文件名称(包括路径)。
示例
说明
- 示例1~示例3中待恢复的备份文件来自vb_dump的示例4。
- 示例4中待恢复的备份文件来自vb_dumpall的示例2。
示例1
恢复备份文件backup4_2.sql。备份时指定了-C,因此恢复时会自行创建名为test4的数据库。
- 使用vsql工具连接至数据库vexdb。
vsql -d vexdb -p 5432 -r
- 删除名为test4的数据库(如果存在)。
请注意当前操作对业务的影响,谨慎操作。
若预先已存在名为test4的数据库,再次导入时会导致数据重复。drop database if exists test4;
- 执行导入操作。
\i backup4_2.sql
- 导入时会切换连接至test4数据库下,在test4数据库中执行以下语句查询导入结果:
select * from table1; select * from table2; select * from table3;
返回结果如下,表示已成功导入test4库,数据库中的每张表都有且仅有一条数据。name | id -------+---- alice | 1 (1 row) name | id ------+---- jack | 2 (1 row) name | id ------+---- bob | 3 (1 row)
示例2
恢复备份文件backup4_3.sql。备份时指定了-c,表示在导入test4库之前先删除数据库对象。
- 执行以下语句恢复备份文件backup4_3.sql。
vsql -d test4 -p 5432 -f backup4_3.sql
- 连接至数据库test4下。
vsql -d test4 -p 5432 -r
- 使用以下语句查看导入结果:
select * from table1; select * from table2; select * from table3;
返回结果如下,表示已成功导入test4数据库,每张表都有且仅有一条数据,并未重复。name | id -------+---- alice | 1 (1 row) name | id ------+---- jack | 2 (1 row) name | id ------+---- bob | 3 (1 row)
示例3
新建数据库并恢复备份文件backup4_5.sql。备份时仅备份了所有表的定义(模式)。
- 使用vsql工具连接至数据库vexdb下。
vsql -d vexdb -p 5432 -r
- 创建用于导入的数据库db_test。
create database db_test;
- 切换至数据库db_test下。
\c db_test
- 将备份文件导入到当前数据库中。
\i backup4_5.sql
- 导入完成后,查看导入结果。
select * from table1; select * from table2; select * from table3;
返回结果如下,表示已成功将table1、table2、table3导入到数据库db_test中,只包括定义(模式),不包括数据。name | id ------+---- (0 rows) name | id ------+---- (0 rows) name | id ------+---- (0 rows)
示例4
恢复vb_dumpall导出的示例2,备份文件为bak_all.sql。备份时指定了-c,在重新创建数据库之前,会执行SQL语句清理(删除)这些数据库。因此导入后的表数据不会重复。
- 使用vsql工具连接至数据库vexdb。
vsql -d vexdb -p 5432 -r
- 使用如下语句进行恢复:
\i bak_all.sql
- 恢复完成后,验证恢复效果。
select * from student;
返回结果如下,表示恢复成功。
测试表student的数据完成了导入,并且数据不重复。stdno | student_age | grade -------+----------------------+------- 1 | 15.00 | 81 (1 row)