瀚高数据库数据恢复

548 阅读2分钟

瀚高数据库数据恢复

背景:前段时间数据库需要进行备份恢复,在瀚高工程师指导下完成,下面根据工程师操作文档做一个记录

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

image.png

确定归档路径/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、自定义表空间处理

自定义表空间如下:

image.png

直接可以使用,如果后期需要把该原机恢复的数据库转为生产,需要按照异机恢复的自定义表空间步骤操作,
注意备份时$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         ---新的端口与生产不一样

image.png

文件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
如果日志中有这个(就执行下面语句,没有不用执行)

image.png

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

image.png


--查看备份日志:

image.png


根据原先表空间创建路径

mkdir -p /tablespace/    --根据生产实际修改

mv /data/highgo/data/nodefault  /tablespace

---生产截图如下:

image.png


可以使用如下命令

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

image.png


确定链接正常,执行恢复

注意备份时$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

image.png


如果日志中有这个(就执行下面语句,没有不用执行)

image.png


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设置:        关闭