源端数据库配置修改
在进行PostgreSQL数据库迁移之前,必须确保data目录下的postgresql.conf文件中的三个设置项的符合预期。三个设置项分别是:
1.wal_level

可以设置为replica或logical
minimal --不能通过基础备份和wal日志恢复数据库
replica – 9.6版本以前的archive和hot_standby --该级别支持wal归档和复制。
logical --在replica级别的基础上添加了支持逻辑解码所需的信息
2.archive_mode

开启PostgreSQL的归档模式
3.archive_command
设置归档指令,可以参考如下
在这里插入图片描述

%p - 是归档日志的完整路径
%f - 是归档日志的完整文件名
/home/postgres/backup/pgwal/ – 这个可以自定义,是用来存放之后PGSQL产生的归档日志的。
整条命令的逻辑就是把归档日志拷贝到/home/postgres/backup/pgwal下,做一个备份。
设置完成后,必须重新启动数据库,才能生效。
整个迁移过程中,如果遇到问题,首先排查文件和目录的owner是否为数据库onwer。

源端存量数据打包
在进行全量数据打包之前,需要去存储归档日志的目录下,确认并记录最新的归档日志的文件名。后面传增量数据文件(也就是归档日志)的时候,传输包括这份归档日志在内的,之后的所有归档日志。
命令为: pg_base???backup -Ft -Pv -z -Z5 -p5432 -D /home/postgres/full_backup/
-Ft 把输出的备份文件打包到一个tar包中
-Pv v是配合P的,P为在备份过程中实时打印备份进度,v是打印出正在备份
的具体文件的信息
-z 使用gzip压缩,仅能配合tar输出模式配合使用
-Z5 压缩等级设为5
-D 指定存放压缩包的文件夹路径
/home/postgres/full_backup 自定义存放压缩包的文件夹。当存量数据打包完后,会显示下图。
在这里插入图片描述

这时候全量数据成功打包完成。
在/home/postgres/full_backup中,会生成如下两个压缩包。
在这里插入图片描述

数据传输
在存量数据迁移之前,确保目标端数据库是停止状态。
在这里插入图片描述

先把存量数据(就是之前获得的两个压缩包base.tar.gz和pg_wal.rar.gz)传送到目标端。目标端需要在pgsql文件目录下创建一个data目录,把用户和用户组修改为数据库用户,并且把权限修改为700.
在这里插入图片描述

确保压缩包base.tar.gz和pg_wal.rar.gz在data目录下。

1.先解压base.tar.gz压缩包
在这里插入图片描述

2.把pg_wal.rar.gz放到pg_wal目录下,并解压缩
在这里插入图片描述

3.可以将两个压缩包删除。
4.根据业务情况修改pg_hba.conf和postgresql.conf。监听的IP地址必须修改,archive_command可以根据业务情况修改。
传输增量数据

a)首先关闭源端应用服务
关闭服务应用后,在数据库内输入
select pg_switch_wal();
将内存数据落盘。
关闭源端数据库,确保目标端再想把数据和业务切回到源端时,可以直接使用归档日志进行恢复,不用再导入一遍全量数据。
b)将需要的归档日志传输到目标端指定目录
归档日志所在目录,在第一步的archieve_command中已经设置。
c)确认归档日志的用户和用户组
在传输到目标端之后,确认归档日志的用户和用户组是否属于数据库用户。
d)创建恢复配置文件
在数据库data目录下,创建 recovery.conf文件,用户和用户组设置为数据库用户,用户组。
并且在文件内添加如下行:
restore_command=‘cp /存储目标端归档日志的目录名/%f %p’
保存后启动数据库
e)确认数据一致性
打开数据库,输入如下命令
select pg_current_wal_lsn()
select pg_switch_wal()
在这里插入图片描述

在目标端生成新的归档日志,通过pg_waldump命令,将归档日志转为可读格式,然后查询匹配当前lsn的前一行lsn。比如,当前目标端数据库lsn为E10000D0。
在这里插入图片描述

lsn后面显示的是当前事务的lsn号码。
prev后面显示的是上一个事务的lsn号码。
postgresql通过lsn保证连续性,如果中间有数据出问题,lsn号码会不匹配。
通过归档日志可以知道,当前lsn为E10000D0,之前是E1000098,再之前是E1000028,在这之前是E01B3640。
打开从源端传来的归档日志,找到最后一份归档日志,通过pg_waldump转为可读格式,用tail命令查询最后一行。
在这里插入图片描述

可以看到最后一行是E01B3640。说明数据符合一致性要求。

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐