点击上方“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自带的工具即可完成迁移,大大简化了操作和缩短了停机时间。

本文作者:朱谊顺(上海新炬中北团队)
本文来源:“IT那活儿”公众号

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




