瀚高数据库数据恢复
背景:前段时间数据库需要进行备份恢复,在瀚高工程师指导下完成,下面根据工程师操作文档做一个记录
1.检查备份
[root@host-192-168-119-32 ~]# crontab -l
30 23 * * * sh /opt/highgo/hgdb-see-4.5.8/hgdb_backup.sh
cat /opt/highgo/hgdb-see-4.5.8/hgdb_backup.sh
确定归档路径/hgdata/highgo/archive 、备份路径/hgdata/highgo/hgdbbak
cd /hgdata/highgo/dbbak
--查看备份日志(确认备份成功)
cat hgdbbak_日期*.log
2. 备份恢复测试
备份恢复按时间点恢复数据,需要备份文件加对应的归档可以分为异机恢复和原机恢复
2.1原机恢复
原机恢复是在没有其他服务器下,将备份恢复到正在使用的生产服务器上其他位置的一种方式,
需要更换归档路径、端口号、数据存放位置,步骤如下:
1、备份要恢复的备份文件
检查备份成功,将备份文件夹备份
cd /hgdata/highgo/hgdbbak
cp -R hgdbbak_20240418_1 hgdbbak_20240418_1bak备份日期
如
cp -R hgdbbak_20240902_1 hgdbbak_20240902_1bak
使用hgdbbak_20240902_1恢复,这个恢复后备份就不能使用了,所以使用前需要备份这个要恢复的备份文件。
2、自定义表空间处理
自定义表空间如下:
直接可以使用,如果后期需要把该原机恢复的数据库转为生产,需要按照异机恢复的自定义表空间步骤操作,
注意备份时$PGDATA下不能有nodefault夹,如果有备份脚本将执行失败
3、恢复数据库
cd hgdbbak_20240902_1bak
touch recovery.signal -- 告诉数据库进入恢复模式,应用归档
vi postgresql.auto.conf (修改archive_command 和port,剩余的参数添加)
archive_command = 'echo 123' ---关闭产生归档(防止与生产归档冲突)
restore_command = 'cp /hgdata/highgo/archive/%f %p' ---归档路径拷到pg_wal
recovery_target_time= ' 2024-09-02 10:04:00' ---恢复时间点
port =5867 ---新的端口与生产不一样
文件hgdbbak_20240902_1bak赋权限
chmod 700 hgdbbak_20240902_1bak
pg_ctl start -D /hgdata/highgo/hgdbbak/hgdbbak_20240902_1
查看最新数据库日志:(可新开窗口,恢复日志正常,且有新归档restore)
cd hgdb_log/
tail -50f highgodb_18.csv
如果日志中有这个(就执行下面语句,没有不用执行)
psql -U sysdba
select pg_wal_replay_resume();
就可以读写了。
下一步:
登录恢复的数据库
psql -U re_int_govt -p 5867 -d re_int_govt
查看数据表
re_int_govt=> \dt+ oversea_project.dm_country
关联列表
架构模式 | 名称 | 类型 | 拥有者 | 大小 | 描述
-----------------+------------+--------+-------------+-------+------
oversea_project | dm_country | 数据表 | re_int_govt | 48 kB |
(1 行记录)
re_int_govt=> select count(1) from oversea_project.dm_country;
count
-------
197
(1 行记录)
导出需要备份的表,如导出dm_country、dm_dict_item
[root@host-192-168-119-32 ~]# pg_dump -d re_int_govt -t oversea_project.dm_country -t oversea_project.dm_project_info -f backup.sql -U sysdba -p 5867
口令: ****
恢复备份文件
psql -f backup.sql -U sysdba -d re_int_govt &>psq_backup.log
查看恢复日志
cat psq_backup.log
2.2异机恢复
1、传输文件
新机器要和原机器相同CPU、操作系统和相同的数据库版本
把备份文件夹传输到新服务器,使用该文件夹可以恢复到备份时间点,要恢复到特定时间点,还需要把/data/highgo/archive下的归档拷贝到新机器下。
举例(按和原机路径一致)
cp -R hgdbbak_20240418* /data/highgo/data
chmod 700 /data/highgo/data
cd /data/highgo/data
2、自定义表空间处理
注意恢复前需要确认自定义表空间(如果没有无需处理)
cd /data/highgo/data/pg_tblspc
--查看备份日志:
根据原先表空间创建路径
mkdir -p /tablespace/ --根据生产实际修改
mv /data/highgo/data/nodefault /tablespace
---生产截图如下:
可以使用如下命令
mkdir -p /home/highgo
mv /data/highgo/data/nodefault /home/highgo/tablespace
-----取消链接(测试环境)
cd /data/highgo/data/pg_tblspc
unlink 303180 --根据实际情况修改
ln -s /tablespace/t2 303180
确定链接正常,执行恢复
注意备份时$PGDATA下不能有nodefault文件夹,如果有备份脚本将执行失败
3、数据库恢复
cd /data/highgo/data
touch recovery.signal
vi postgresql.auto.conf
restore_command = 'cp /data/highgo/archive/%f %p' --归档路径拷贝到pg_wal
recovery_target_time= ' 2024-04-18 16:04:35' --需要恢复的时间点
如果要恢复到最新
recovery_target_timeline = 'latest' 或者不设置(归档不能断档,根据日志中恢复到的归档确认恢复时间
保存后
pg_ctl start -D /data/highgo/data
数据库日志位置根据参数设置
alter system set logging_collector = on;
alter system set log_directory = 'hgdb_log';
alter system set log_filename = 'highgodb_%d.log';
查看最新数据库日志:(可新开窗口,恢复日志正常,且有新归档restore)
cd /data/highgo/data/hgdb_log/
tail -50f highgodb_18.csv
如果日志中有这个(就执行下面语句,没有不用执行)
psql -U sysdba
select pg_wal_replay_resume();
就可以读写了。
3.其他命令
查看备份文件时间线,值要和备份的数据库对应
pg_controldata -D hgdbbak_20240902_1|grep -i time
最新检查点的 TimeLineID: 1
最新检查点的PrevTimeLineID: 1
track_commit_timestamp设置: 关闭