PostgreSQL 像 Mysql 一样轻松实现数据复制

PostgreSQL能不能像Mysql一样实现数据的复制?答案是当然可以,下面我们借助一个工具(pg_basebackup),轻松实现它!

简介

想使用它得首先理解它,pg_basebackup 是从postgresql 9.1版本开始提供的一个方便基础备份的工具,它会把整个数据库实例的数据都拷贝出来,而不只是把实例中的部分(如某个数据库或表)单独备份;

PostgreSQL 像 Mysql 一样轻松实现数据复制

工作原理

创建检查点,打开FPW,创建备份标签(存储检查点位置,时间等信息);通过流复制协议与数据库建立连接,WAL Sender进程向pg_basebackup发送数据库物理文件;pg_basebackup接收到文件后写入目标位置(压缩或不压缩)。

参数说明

可以通过 pg_basebackup --help 详细查看

-h 指定连接的数据库的主机名或IP地址,这里就是主库的ip。

-U 指定连接的用户名,此处是我们刚才创建的专门负责流复制的repl用户。

-F 指定了输出的格式,支持p(原样输出)或者t(tar格式输出)。

-x 表示备份开始后,启动另一个流复制连接从主库接收WAL日志。

-P 表示允许在备份过程中实时的打印备份的进度。

-R 表示会在备份结束后自动生成recovery.conf文件,这样也就避免了手动创建。

-D 指定把备份写到哪个目录,这里尤其要注意一点就是做基础备份之前从库的数据目录(/usr/local/postgresql/data)目录需要手动清空。

-l 表示指定一个备份的标识

PostgreSQL 像 Mysql 一样轻松实现数据复制

一、准备

主:192.168.1.108

从:192.168.1.109

VIP:10.1.11.73

PG 9.2.3

1.主备机安装(略)

由于本篇主要讲述pg_basebackup工具,而PostgreSQL安装则不在这里说明了。

以下修改都是在主机上修改除去第二点,主机开启归档和热备参数,在postgresql.conf文件里面配置

vim /home/pgsql/data/postgresql.conf

max_wal_senders = 1

wal_level = hot_standby

archive_mode = on

archive_command = 'cd ./'

hot_standby = on

wal_keep_segments = 32

2.配置信任关系(主机上都配置,减少切换后的操作)

a.配置

cd ~

vi .pgpass

192.168.1.109:5678:*:repuser:123456

chmod 0400 .pgpass

b.配置pg_hba.conf

vim /home/pgsql/data/pg_hba.conf

host replication repuser 192.168.1.109/32 md5

c.创建流复制用户

postgres=# CREATE USER repuser replication LOGIN CONNECTION LIMIT 3 ENCRYPTED PASSWORD '123456';

d.检查备机的表空间和需要同步的数据文件路径,确保是空的,否则会报错

3、重启pgsql

service postgresql-9.4 restart

PostgreSQL 像 Mysql 一样轻松实现数据复制

二、同步

在从机上执行

[postgres@test ~]$ pg_basebackup -D /home/pgsql/data -Fp -Xs -v -P -h 192.168.1.108 -U repuser -p 5432

transaction log start point: 2/DF000028 on timeline 3

pg_basebackup: starting background WAL receiver

177422/177422 kB (100%), 1/1 tablespace

transaction log end point: 2/DF015EE0

pg_basebackup: waiting for background process to finish streaming ...

pg_basebackup: base backup completed

更改data目录权限

cd /home/pgsql

chown -R postgres.postgres data

三、同步后配置

1.修改reconvery.conf文件

如果主机上是recovery.done,那备机上传过来的这个文件需要改为recovery.conf,另外修改下内容,一般是改下IP密码居多

cd /home/pgsql

cp /usr/pgsql-9.4/share/recovery.conf.sample data/recovery.conf

vim data/recovery.conf

standby_mode = on

primary_conninfo = 'host=192.168.1.108 port=5432 user=repuser password=123456 keepalives_idle=60'

trigger_file = '/home/pgsql/trigger_active.5432'

更改权限

chmod 0600 data/recovery.conf

chown postgres.postgres data/recovery.conf

四、启动验证

service postgresql-9.4 start

五、其它

这个工具印象上是linux的rsync功能外加支持DB在线部署,简化了之前的三步操作,另外支持在线数据同步,不需要另外关闭服务保证数据统一

相关推荐