暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

PostgreSQL大库迁移

IT那活儿 2025-05-20
174

点击上方“IT那活儿”公众号--专注于企业全栈运维技术分享,不管IT什么活儿,干就完了!!!


背 景

某业务数据持续上涨,数据库因主机磁盘达到最大值无法扩容,现需要对整个数据库做全量迁移,且业务能停机的时间较短。新老库环境相同,因为数据量大,所以采用较为简单级联方式迁移。

环境介绍:

  • 数据库版本

    PostgreSQL 12.7

  • 源库

    192.168.1.12:5432(主)、192.168.1.13:5432(从)

  • 目标

    192.168.1.14:5432(主)、192.168.1.15:5432(从)


环境准备

2.1 环境查看(12)

select pg_is_in_recovery();

select * from pg_stat_wal_receiver;

select * from pg_stat_replication;

2.2 环境查看(13)

select pg_is_in_recovery();
select * from pg_stat_wal_receiver;
select * from pg_stat_replication;

2.3 环境查看(14)

select pg_is_in_recovery();
select * from pg_stat_wal_receiver;
select * from pg_stat_replication;

2.4 环境查看(15)

select pg_is_in_recovery();
select * from pg_stat_wal_receiver;
select * from pg_stat_replication;

2.5 源库数据准备(12)

\l
\c test
\dn
select count(*) from test.t1;
select * from test.t2;
select * from test.t3;


搭建级联

3.1 停库(14)

pg_ctl -D postgresql/pgdata stop
ps -ef | grep postgresql

3.2 删除数据(14)

cd /postgresql/pgdata
ls -lrth
rm -rf *

3.3 恢复数据(14)

pg_basebackup -D postgresql/pgdata -F p -X stream -c fast -h 192.168.1.13 -p 5432 -U repuser -R

3.4 启动数据库(14)

pg_ctl start -D postgresql/pgdata
psql -h 127.0.0.1 -p 5432
select pg_is_in_recovery();
select * from pg_stat_wal_receiver;
select * from pg_stat_replication;

此时已完成和源端库的级联。

3.5 查看主从状态(13)

select pg_is_in_recovery();
select * from pg_stat_wal_receiver;
select * from pg_stat_replication;


迁 移

4.1 查看从库延迟时间(13、14)

等无延迟后,继续下面操作。

4.2 停业务

4.3 升级为主库(14)

pg_ctl promote -D postgresql/pgdata

4.4 修改配置文件(14)

vi postgresql.auto.conf
# primary_conninfo = 'user=repuser password=123456 host=192.168.1.12 port=5432 sslmode=disable sslcompression=0 gssencmode=disable krbsrvname=postgres target_session_attrs=any'
# primary_conninfo = 'user=repuser password=123456 host=192.168.1.13 port=5432 sslmode=disable sslcompression=0 gssencmode=disable krbsrvname=postgres target_session_attrs=any'

vi postgresql.conf
# primary_conninfo = 'host=192.168.1.15 port=5432 user=repuser passowrd=123456'

4.5 重启数据(14)

pg_ctl restart -D postgresql/pgdata

4.6 业务验证

psql -h 192.168.1.14 -p 5432 -U ys -d test
select count(*) from test.t1;

此时迁移就已完成,业务验证无异常,后续只需把另一个从库拉起来即可。


恢复另一个从库

5.1 停库(15)

pg_ctl -D postgresql/pgdata stop

ps -ef | grep postgresql

5.2 删除数据(15)

cd /postgresql/pgdata
ls -lrth
rm -rf *

5.3 恢复数据(15)

pg_basebackup -D postgresql/pgdata -F p -X stream -c fast -h 192.168.1.14 -p 5432 -U repuser -R
ls -lrth

5.4 启动数据(15)

pg_ctl start -D postgresql/pgdata
psql -h 127.0.0.1 -p 5432
select pg_is_in_recovery();
select * from pg_stat_wal_receiver;
select * from pg_stat_replication;

5.5 环境查看(14)

select pg_is_in_recovery();
select * from pg_stat_wal_receiver;
select * from pg_stat_replication;

总 结:

对于大数据量同环境的迁移,可以采用级联的方式,因为操作简单,对业务影响较小,且不需要额外的工具,通过pg自带的工具即可完成迁移,大大简化了操作和缩短了停机时间。


END


本文作者:朱谊顺(上海新炬中北团队)

本文来源:“IT那活儿”公众号

文章转载自IT那活儿,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论