投资菜地

屋后的一亩三分绿色菜园地

2019-11-26

数据库主从备份

PG SQL

备份

首先,需要修改postgresql.conf文件的几个参数修改如下:

wal_level = ‘replica’
archive_mode = ‘on’
### %p会被要被归档的文件路径所替代,而%f只会被文件名所替代。如果你需要在命令中嵌入一个真正的%字符,可以使用%%
archive_command = 'copy  /y  "%p"  "D:\\archive\\%f"'

        archive_mode = ‘on’

        archive_command = ‘copy  /y  ”%p”  ”D:\archive\%f”’

之后需要重启数据库使配置生效。

连接到服务器执行命令:

-- 开始一次非排他的备份 pg_start_backup(label text [, fast boolean [, exclusive boolean ]])
select pg_start_backup('backup_label', false, false);

-- 结束一次非排他的备份
select * from pg_stop_backup(false);

     

主从

PostgreSQL数据库本身提供三种HA模式:

  1. 基于日志文件的复制

  Master库向Standby库异步传输数据库的WAL日志,Standby解析日志并把日志中的操作重新执行,以实现replication功能。缺点在于Master库必须等待每个WAL日志填充完整后才能发给Standby,如果在填充WAL日志的过程中Master库宕机,未发送的日志内的事务操作会全部丢失。

  1. 异步流复制模式

  Master库以流模式向Standby库异步传输数据库的WAL日志,Standby解析收到的内容并把其中的操作重新执行,以实现replication功能。这种方式和“基于日志文件的复制”相比不需要等待整个WAL日志填充完毕,大大降低了丢失数据的风险,但在Master库事务提交后,Standby库等待流数据的时刻发生Master宕机,会导致丢失最后一个事务的数据。同时备库可以配置成HOT Standby,可以向外提供查询服务,供分担负载。

  1. 流同步复制模式(Synchronous Replication)

  顾名思义,是流复制模式的同步版本。向Master库发出commit命令后,该命令会被阻塞,等待对应的WAL日志流在所有被配置为同步节点的数据库上提交后,才会真正提交。因此只有Master库和Standby库同时宕机才会丢数据。多层事务嵌套时,子事务不受此保护,只有最上层事务受此保护。纯读操作和回滚不受此影响。同时备库可以配置成HOT Standby,可以向外提供查询服务,供分担负载。采用这种模式的性能损耗依据网络情况和系统繁忙程度而定,网络越差越繁忙的系统性能损耗越严重。

主服务器

创建备份账号:

create role repl login replication encrypted password '123456';

修改postgresql.conf并重启

wal_level= logical
max_wal_senders = 32 # 这个设置了可以最多有几个流复制连接,不少于从服务器数量
wal_keep_segments = 256 # 设置流复制保留的最多的xlog数目
wal_sender_timeout = 60s # 设置流复制主机发送数据的超时时间
max_connections = 100 # 这个设置要注意下,从库的max_connections必须要大于主库的

archive_mode = on
# 归档logfile segment
archive_command =  'test ! -f /pg_archive/%f && cp %p /pg_archive/%f' 
synchronous_standby_names = ''   #standby application name, in recover.conf 如果Standby库无响应Master库会被hung住,多个使用逗号分隔,异步使用空。
hot_standby=on

增加从服务器权限

vim /var/lib/pgsql/9.6/data/pg_hba.conf
#  添加如下内容 
host    replication     repl            10.0.1.0/24             md5 
host    all             repl            10.0.1.1/24             trust

从服务器

执行pg_basebackup

pg_basebackup -F p –progress -D /data/pgsql/data2 -h 10.12.12.10 -p 5432 -U replica –password

/data/pgsql/data2这个目录是空的

开源项目(更多)