平台信息
MasterServer:192.168.3.42
数据库版本:Postgresql9.2.8
端口:5432
数据库的数据目录:/var/lib/pgsql/9.2/data
StandbyServer:192.168.3.41
数据库版本:Postgresql9.2.8
端口:5432
数据库的数据目录:/var/lib/pgsql/9.2/data/
配置
主数据库上的配置
1.在主数据库(42上)的pg_hba.conf文件中添加如下配置项:
[root@tigase2~]# vi /var/lib/pgsql/9.2/data/pg_hba.conf
local all all trust
host all all 127.0.0.1/32 trust
host all all 192.168.3.0/24 trust#设置允许3段的ip为信任
host replication postgres 192.168.3.41/32 trust#设置从数据库同步时使用的用户,以及从数据库的ip地址,此处直接用主数据库的postgres账户,可以自己在主数据上新建一个专用同步账号
2.在主数据库(42上)的postgresql.conf文件中设置如下配置项:
vi/var/lib/pgsql/9.2//data/postgresql.conf
wal_level= hot_standby
checkpoint_segments= 16
archive_mode= on
archive_command= 'cp %p /var/lib/pgsql/9.2/data/pg_archive/%f'
max_wal_senders= 10
wal_keep_segments = 32
log_destination= 'csvlog'
logging_collector= on
log_directory= '/var/log/pgsql/'
log_filename= 'postgresql-%Y-%m-%d_%H%M%S.log'
log_truncate_on_rotation= on
log_rotation_age= 1d
log_rotation_size= 10MB
log_min_duration_statement= 1000ms
log_lock_waits= on
log_statement= 'ddl'
log_timezone= 'PRC'
lc_messages= 'en_US.UTF-8'
lc_monetary= 'en_US.UTF-8
lc_numeric= 'en_US.UTF-8'
lc_time= 'en_US.UTF-8'
deadlock_timeout= 1s
autovacuum= on
log_autovacuum_min_duration= 0
check_function_bodies= on
[root@tigase2data]# mkdir /var/lib/pgsql/9.2/data/pg_archive
[root@tigase2data]# chown -R postgres.postgres pg_archive/
[root@tigase2log]# mkdir /var/log/pgsql
[root@tigase2log]# chown -R postgres.postgres /var/log/pgsql
/var/log下有一个pgsql日志文件,先删除或备份,再建立。
3.重启主数据库,让配置生效:
servicepostgresql-9.2 restart
4.对主数据库做一个基础备份:
使用selectpg_start_backup();命令把数据库切换到备份状态,
[root@tigase2~]# psql -U postgres
postgres=#selectpg_start_backup('t1');
pg_start_backup
-----------------
(1行记录)
postgres=#\q #备份状态下\q先退出,方便拷贝主数据库的数据目录
5.进入主数据库(42上)的数据目录、以及归档文件到从数据库(41上)的数据目录中
[root@tigase2~]# cd /var/lib/pgsql/9.2/
[root@tigase29.2]# cp -r data data.bak #先备份到本地,再scp到从数据库,可直接scp到从数据库。
[root@tigase29.2]# scp -rp data.bak/ root@192.168.3.41:/var/lib/pgsql/9.2/
6.拷贝完成后,结束主数据库的备份状态,再拷贝主数据的存档文件到从数据库。
p[root@tigase2~]# psql -U postgres
ostgres=#selectpg_stop_backup();
NOTICE: pg_stop_backup complete,all required WAL segments have beenarchived
pg_stop_backup
----------------
0/60000E0
成功后data文件下pg_archive会生成存档文件,复制pg_archive文件到从数据库data.bak下,以便等下数据库恢复。
[root@tigase2data]# scp -rp pg_archive/root@192.168.3.41:/var/lib/pgsql/9.2/data.bak/
从数据库上的配置:
先停止postgres服务
[root@tigase19.2]# service postgresql-9.2 stop
把从数据库原data改名为data.backup或直接删除,再将从主数据库拷贝过来的data.bak改名为data.
[root@tigase19.2]# mv data data.backup
[root@tigase19.2]# mv data.bak data
[root@tigase19.2]# chown -R postgres.postgres data
7.在从数据库的配置文件postgresql.conf中,设置如下配置项:
port=5432
hot_standby= on
建立日志文件
[root@tigase1log]# mkdir /var/log/pgsql
[root@tigase1log]# chown -R postgres.postgres /var/log/pgsql
8.编辑并配置recovery.conf,此文件需要新建。
[root@tigase1data]# vi /var/lib/pgsql/9.2/data/recovery.conf
配置如下内容:
restore_command= 'cp /var/lib/pgsql/9.2/data/pg_archive/%f %p' # e.g. 'cp/mnt/server/archivedir/%f %p'
standby_mode= 'on'
primary_conninfo= 'host=192.168.3.42 port=5432 user=postgres password=postgres'
9.删除从主数据库中过来的postmaster.pid文件以及pg_xlog下的文件,然后启动从数据库:
[root@tigase1data]# rm /var/lib/pgsql/9.2/data/postmaster.pid
[root@tigase1data]# rm -fr /var/lib/pgsql/9.2/data/pg_xlog/*
#servicepostgresql-9.2 start
最后把配置recovery.conf里restore-command行注销
#restore_command= 'cp /var/lib/pgsql/9.2/data/pg_archive/%f %p' # e.g. 'cp/mnt/server/archivedir/%f %p'
10登录从服务器查看
[root@tigase1data]# psql -U postgres
postgres=#\l
tigasedb | tigase | UTF8 | zh_CN.UTF-8 | zh_CN.UTF-8 |
tigasedbb| tigase | UTF8 | zh_CN.UTF-8 | zh_CN.UTF-8 |
tigasedbd| tigase | UTF8 | zh_CN.UTF-8 | zh_CN.UTF-8 |
(6行记录)
[root@tigase2~]# psql -U postgres
postgres=#create database tigaseddddd owner tigase;
CREATEDATABASE
[root@tigase1data]# psql -U postgres
postgres=#\l
stgres
tigasedb | tigase | UTF8 | zh_CN.UTF-8 | zh_CN.UTF-8 |
tigasedbb | tigase | UTF8 | zh_CN.UTF-8 | zh_CN.UTF-8 |
tigasedbd | tigase | UTF8 | zh_CN.UTF-8 | zh_CN.UTF-8 |
tigaseddddd| tigase | UTF8 | zh_CN.UTF-8 | zh_CN.UTF-8 |
(7行记录)
postgres=#create database tigase123 owner tigase;
ERROR: cannot execute CREATE DATABASE in a read-only transaction