编译目的
本文章通过代码方式讲解Postgres数据库备份与还原。
常用备份方式
- 流复制备份
- 归档备份
- SQL转储备份
- 热备份
流复制备份
注意事项
- 需要准备2台或2台以上服务器。
- 应用程序写入数据是从主数据库写入。
- 主数据写入数据会自动同步到从数据库。
1.主服务器配置
#创建归档目录
mkdir -p /data/postgres_archivedir
#归档目录授权
chown postgres:postgres /data/postgres_archivedir
#给归档目前设置读写权限
chmod -R 700 /data/postgres_archivedir
#创建数据存储目录
mkdir -p /data/postgres_dbdata
#授权分组
chown postgres:postgres -R /data/postgres_dbdata
chmod -R 700 /data/postgres_dbdata
#初始化数据库
su - postgres -c "/usr/local/postgres12/bin/initdb -D /data/postgres_dbdata"
#登录到postgres用户
su - postgres
#创建repl用户,密码设置为p@123456
createuser -p 15432 --replication -P -e repl
#配置postgres安全策略,wq保存
vi /data/postgres_dbdata/pg_hba.conf
#以下策略加到pg_hba.conf文件的97行下面,否则出现问题。
#需要将192.168.207.170和 192.168.207.171改成你的服务器IP
local all all md5
host replication repl 192.168.207.170/32 md5
host replication repl 192.168.207.171/32 md5
host all all 0.0.0.0/0 md5
#编辑postgres数据库配置文件
vi /data/postgres_dbdata/postgresql.conf
#添加以下内容
listen_addresses = '*'
port = 15432
wal_level = replica
synchronous_commit = on
full_page_writes = on
wal_log_hints = on
min_wal_size = 800MB
archive_mode = on
archive_command ='test ! -f /data/postgres_archivedir/%f && cp %p /data/postgres_archivedir/%f'
max_wal_senders = 10
#还原归档数据
#restore_command = 'cp /data/postgres_archivedir/%f %p'
#清除归档数据
#archive_cleanup_command='pg_archivecleanup /home/sure/mywork/archivedir %r'
#指明要恢复到时间,UTC时间差8小时,所以+08
#recovery_target_time='2022-01-11 14:35:12+08'
#退出postgres用户
exit
#重启postgres服务
systemctl restart postgresql
2.从服务器配置
注意实现
- 参考从服务器数据库及配置
#停止postgres服务
systemctl stop postgresql
#登录到postgres用户
su - postgres
#删除掉之前的数据库
rm -rf /data/postgres_dbdata/*
#将主服务器的数据库备份到从服务器,登录密码:p@123456
#-p 连接端口
#-h ip地址
#-D 指定数据目录
#-U 指定连接用户
#-P 启用进度报告
#-v 启用详细模式
#-R 允许创建恢复配置:创建一个standby.signal文件,并将连接设置追加到数据目录下的postgresql.auto.conf
#-X 用于在备份中包含所需的预写日志文件(WAL 文件)。流的值表示在创建备份时流式传输 WAL
#-C 允许在开始备份之前创建由 -S 选项命名的复制槽
#-S 指定复制槽名称
#备份过程完成后,会创建一个 standby.signal,并将连接信息设置到postgresql.auto.conf文件中
pg_basebackup -p 15432 -h 192.168.207.170 -D /data/postgres_dbdata -U repl -P -v -R -X stream -C -S pgstandby1
#查看连接是否追加
cat /data/postgres_dbdata/postgresql.auto.conf
vi /data/postgres_dbdata/standby.signal
standby_mode = on
#编辑postgres配置文件
vi /data/postgres_dbdata/postgresql.conf
#添加以下内容
hot_standby = on
primary_conninfo = 'user=repl password=Vimicro host=192.168.207.170 port=15432 sslmode=disable sslcompression=0 gssencmode=disable krbsrvname=postgres target_session_attrs=any'
recovery_target_timeline = latest
#注释下面两行,同步数据过来包含这两项
#archive_mode = on
#archive_command ='test ! -f /data/postgres_archivedir/%f && cp %p /data/postgres_archivedir/%f'
exit
#开启服务
systemctl start postgresql
#查看从服务接收状态信息
su - postgres
psql -p 15432
\x
SELECT * FROM pg_stat_wal_receiver;
0 条评论
请不要发布违法违规有害信息,如发现请及时举报或反馈!
还没有人评论呢,速度抢占沙发!