pg_basebackup备份异机器恢复

环境:
OS:Centos 7
DB:pg16(编译安装,centos7已经没有pg16的rpm安装包了)
源库为非归档模式

前提条件:目标主机已经安装好了相同版本的pg,pg16编译安装可以参考如下链接:
https://www.cnblogs.com/hxlasky/p/18548402

1.备份源库
##备份
export PGPASSWORD=postgres
/opt/pg16/bin/pg_basebackup -D "/data/middle/pgbak/basebackup/20241118" -Ft -Pv -U postgres -h 172.16.1.65 -p5432

-D指定的备份文件存放目录需要提前创建好,若已经存在该目录的,目录不能为空

 

2.备份文件上传到目标主机并解压
解压文件
[root@host135 pgtmp]# tar -xzvf 20241118.tar
解压后就是如下3个文件
[root@host135 20241118]# ls
backup_manifest base.tar pg_wal.tar


3.恢复
停掉当前数据库
su - postgres
[postgres@host135 data]$ pg_ctl stop -D /home/middle/pg16/data -l /home/middle/pg16/log/pg_server.log

 

4.删除data目录并创建空的data目录
[postgres@host135 data]$ cd /home/middle/pg16
[postgres@host135 pg16]$ mv data bakdata
[postgres@host135 pg16]$ mkdir data

 

5.创建归档目录
mkdir -p /home/middle/pg16/archivelog

 

6.将备份tar文件解压到数据目录
目前root账号下面操作的,后面需要记得修改权限
base.tar文件解压到data目录,pg_wal.tar解压到归档目录
[root@host135 ~]#tar -xvf /tmp/pgtmp/20241118/base.tar -C /home/middle/pg16/data ##解压数据目录
[root@host135 ~]#tar -xvf /tmp/pgtmp/20241118/pg_wal.tar -C /home/middle/pg16/archivelog/

 

7.修改目录权限
[root@host135 pg16]# cd /home/middle/pg16
[root@host135 pg16]# chown -R postgres:postgres ./data
[root@host135 pg16]# chown -R postgres:postgres ./archivelog

 

8.修改配置文件
su - postgres
vi /home/middle/pg16/data/postgresql.conf 修改如下参数

restore_command = 'cp /home/middle/pg16/archivelog/%f %p'
recovery_target_timeline = 'latest'

 

9.生成recovery.signal标识文件
[postgres@host135 data]$ cd /home/middle/pg16/data
[postgres@host135 data]$ touch recovery.signal

 

10.启动数据库
su - postgres
[postgres@host135 data]$ pg_ctl start -D /home/middle/pg16/data -l /home/middle/pg16/log/pg_server.log

注意修改权限,否则报如下的错误:
2024-11-19 09:47:27.804 CST [4377] LOG: database system is shut down
2024-11-19 02:13:15.302 UTC [20167] FATAL: data directory "/home/middle/pg16/data" has invalid permissions
2024-11-19 02:13:15.302 UTC [20167] DETAIL: Permissions should be u=rwx (0700) or u=rwx,g=rx (0750).

su - root
[root@host134 ~]# chmod 0700 /home/middle/pg16/data

再修改后再次重新启动
[postgres@host135 data]$ pg_ctl start -D /home/middle/pg16/data -l /home/middle/pg16/log/pg_server.log

 

11.登录查看
[postgres@host135 data]$export PGPASSWORD=postgres
[postgres@host135 data]$ psql -h localhost -U postgres -p5432
WARNING: database "postgres" has a collation version mismatch
DETAIL: The database was created using collation version 2.36, but the operating system provides version 2.17.
HINT: Rebuild all objects in this database that use the default collation and run ALTER DATABASE postgres REFRESH COLLATION VERSION, or build PostgreSQL with the right library version.
psql (16.4)

根据提示执行如下命令:
reindex database postgres; ##数据量大的话耗时有点久
postgres=# alter database postgres refresh collation version;
NOTICE: changing version from 2.36 to 2.17
ALTER DATABASE

再次登录查看
[postgres@host135 data]$ psql -h localhost -U postgres -p5432
psql (16.4)
Type "help" for help.

这个时候就没有提示了.

posted @ 2024-11-19 10:50  slnngk  阅读(13)  评论(0编辑  收藏  举报