代码改变世界

【PostgreSQL】PostgreSQL重建与主库不一致的从库

2022-06-25 11:36  abce  阅读(926)  评论(0编辑  收藏  举报

 

场景:从库坏块,与主库不同步了

版本:PostgreSQL 12

1.关闭从库

systemctl stop postgresql

killall -9 postgres

2.检查postgresql.auto.conf的内容

pg_basebackup会使用到该配置文件中的内容,尤其是用于复制的用户名字和密码

# cat /var/lib/postgresql/12/main/postgresql.auto.conf

# Do not edit this file manually!

# It will be overwritten by the ALTER SYSTEM command.

promote_trigger_file='/tmp/failover_5432.trigger'
recovery_target_timeline=latest
primary_conninfo='application_name=pgsql_0_node_1 host=192.168.56.110 port=5432 user=pg_repl password=dZeV9VoLV97CmXy8'

3.移除数据从库的数据

rm -rf /var/lib/postgresql/12/main/*

4.从主库备份数据

# pg_basebackup -h 192.168.56.110 -U pg_repl -Xs -P -R -D /var/lib/postgresql/12/main/

Password:

waiting for checkpoint

其中:

-Xs :避免备份的数据两太大时,防止wal日志被删除

-P: 查看备份的进度

-R: 让pg_basebackup创建standby.signal文件,准备postgresql.auto.conf文件

pg_basebackup在开启备份之前会等待检查点。 如果pg_basebackup等待检查点的时间太长,可以在pg_basebackup后加上参数'-c fast';或直接在主库执行一个检查点:

postgres=# CHECKPOINT;

CHECKPOINT

4.修改目录属主

要保证目录的属主是正确的

chown -R postgres.postgres /var/lib/postgresql/12/main/

5.启动从库

systemctl start postgresql

启动后,从库应该自动跟主库同步了。

6.检查同步状态

在主库端执行

SELECT * FROM pg_stat_replication;