1. 导出数据
前提条件
- 需要拥有数据库的读权限。
- 如果使用远程转储,远程GaussDB服务器必须允许客户端远程连接。
- 需要对放置导出数据的目录具有写权限。
背景原理
- gs_dump导出数据的原理是使用SQL查询获取数据定义并重新组成SQL语句。如果用户在运行gs_dump时遇到问题,请确认是否具有从数据库中查询相关信息的权限。
- 在运行gs_dump的时候,应该检查输出中是否有任何警告存在(打印在标准错误上的警告信息),特别是根据(控制输出的内容和格式的参数)所列选项输出警告。
- 在运行gs_dump的时候,应该尽量减少对数据库的操作,如频繁的DROP表操作可能会引起加锁失败的问题。如果遇到此类问题,请重新进行备份。
导出示例
以在GaussDB服务器上导出数据为例进行说明,如果是导出远端服务器,需要指定-h等参数。以gaussdba用户身份登录GaussDB服务器。以服务器端口号5432为例,请根据实际情况进行修改。
场景 | 导出命令 |
将mydb数据库导出到一个脚本文件。 | gs_dump mydb -Fp -f dump.sql |
将mydb数据库导出到一个目录中。 | gs_dump mydb -Fd -f dumpdir 说明: 对大型数据库的导出,建议使用并行化的目录格式,如下所示: gs_dump mydb -Fd -f parallelDump -W passwd |
只导出数据定义。 | gs_dump mydb -s -f dumpSchema.sql |
只导出数据。 | gs_dump mydb -a -f dumpData.sql |
导出特定的表inctable。 | gs_dump mydb -t inctable -f dumpTable.sql |
不导出特定的表exctable。 | gs_dump mydb -T exctable -f dumpTable.sql |
加密导出。 | gs_dump mydb -f dumpEncryption.sql --with-encryption=AES128 --with-key=KEY |
恢复前删除已存在的恢复对象。 | gs_dump mydb -c -f dumpClean.sql |
2. 导入数据
GaussDB的客户端工具gsql可以读取由gs_dump生成的备份文件,将备份的数据库恢复到指定的数据库中。
前提条件
- 已经使用gs_dump进行了数据库转储并生成了转储文件(假设为outfile)。
- 所有与转储数据库相关的用户在目标数据库中都已经存在。
背景原理
-
缺省情况下,恢复在遇到错误时仍然继续执行。增加如下参数可以保证在恢复过程中发生错误时停止恢复操作:
gsql --set ON_ERROR_STOP=on dbname < outfile
但是,此方法在发生错误时都只能得到部分恢复了的数据库(恢复了一半)。因此,您可以将整个恢复过程当成一个单独的事务,这样就能够保证成功则全部恢复,失败则全部回滚。可以通过向恢复工具传递 -1或 --single-transaction命令行参数达到此目的。
注意: 导入使用 -1参数时,即时一个很微小的错误也会导致已经运行了好几个小时的恢复过程回滚;gsql支持AES解密导入,以-k参数指定解密密钥。
操作
以gaussdba用户身份登录GaussDB服务器。使用gs_dump生成的文件(outfile)恢复数据库。
恢复场景 | 操作步骤 |
恢复本机数据库。 假设A数据库损坏,利用以前备份的SQL转储文件(outfile)进行恢复。 | 1.连接到默认数据库postgres。 gsql -d postgres 2.删除损坏的数据库A,并使用模板数据库重新创建一个干净的数据库。 DROP DATABASE A; CREATE DATABASE A TEMPLATE template0; 注意: 如果不删除旧数据库,则新导入的数据可能与原数据库中的数据相冲突。 3.恢复到数据库A。 gsql A < oufile |
利用 SQL 转储文件(outfile)在另一台主机上重建数据库。 假设要把主机1上的数据库A恢复到主机2上的数据库B中。 | 1.连接到主机2的默认数据库 postgres。 gsql -d postgres 2.在主机2上创建与A数据库相关的用户。 说明: 相关用户是指在 A 数据库中拥有对象的用户和被赋予 A 数据库中对象权限的用户。 3.使用模板数据库在主机2上创建一个干净的数据库B。 CREATE DATABASE B TEMPLATE template0; 4.在主机1上执行如下命令恢复到数据库 A 到数据库 B 。 gs_dump -h host1 A | gsql -h host2 B 其中 host1 和 host2 请使用主机1和主机2的 IP 地址代替。 |
如果没有错误信息,则说明数据库恢复成功。也可以连接到恢复后的数据库查看数据是否正常。
如果发现ERROR级别的错误信息,请根据错误提示信息排查问题。