PostgreSQL 像 Mysql 一样轻松实现数据复制
PostgreSQL能不能像Mysql一样实现数据的复制?答案是当然可以,下面我们借助一个工具(pg_basebackup),轻松实现它!
简介
想使用它得首先理解它,pg_basebackup 是从postgresql 9.1版本开始提供的一个方便基础备份的工具,它会把整个数据库实例的数据都拷贝出来,而不只是把实例中的部分(如某个数据库或表)单独备份;
工作原理
创建检查点,打开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 表示指定一个备份的标识
一、准备
主: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
二、同步
在从机上执行
[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在线部署,简化了之前的三步操作,另外支持在线数据同步,不需要另外关闭服务保证数据统一