一、物理备份和恢复(gs_basebackup 只能全备)
1.1 备份: gs_basebackup -h 127.0.0.1 -p 5432 -D *** (指定ip、端口、备份目录等)
1.2 异机恢复(原始的数据目录改名保留):
- 停库:gs_ctl stop -D /opt/software/openGauss/data/single_node (数据目录自行替换)
- 将原始的数据文件目录进行备份改名为single_node_orig
- 原路径创建新的single_node目录,拷贝备份数据到single_node目录下,修改用户用户组
- 对新的single_node目录该访问权限为0700
- 修改实例目录下的配置文件postgresql.conf,将port改成原本的端口号,再将shared_buffers改成原本的大小(防止异机的内存不够起不来)
- 启库:gs_ctl start -D /opt/software/openGauss/data/single_node
二、逻辑备份和恢复(gs_dumpall)
2.1 备份: gs_dumpall -h 127.0.0.1 -p 5432 -U*** -W*** --inserts -f *** (指定ip、端口、用户名、密码、保存目录)
2.2 异机恢复:
- 删除目标机中和备份源的库同名库下的所有表
- 将备份的大sql拆分,以'\connect ***'分割到不同的sql文件中,避免执行恢复脚本需要重复输入密码
逻辑恢复脚本如下:
#!/bin/bash
#删除对应库下所有的表(这里只恢复这三个库,templete库无需恢复)
for database in "postgres" "school" "finance" ; do
for table in $(gsql -t -h 127.0.0.1 -p 5432 -Ugauss -WGauss_123 -d $database -c '\dt' | awk -F '|' '{print $2}') ; do
echo drop $table
gsql -t -h 127.0.0.1 -p 5432 -Ugauss -WGauss_123 -d $database -c "drop table $table"
done
done
#这里是脚本执行前手动拆到各个sql文件的。可使用awk或者程序去实现。(init.sql放的是角色和建库语句)
#执行角色和库的创建语句
gsql -h 127.0.0.1 -p 5432 -Ugauss -WGauss_123 -d postgres -f /home/omm/zc_bak_logical/init.sql
#分别执行postgres school finance三个库的恢复语句
gsql -h 127.0.0.1 -p 5432 -Ugauss -WGauss_123 -d finance -f /home/omm/zc_bak_logical/finance.sql
gsql -h 127.0.0.1 -p 5432 -Ugauss -WGauss_123 -d postgres -f /home/omm/zc_bak_logical/postgres.sql
gsql -h 127.0.0.1 -p 5432 -Ugauss -WGauss_123 -d school -f /home/omm/zc_bak_logical/school.sql