Postgresql 主从数据库备份

一。   内网环境测试  (192.168.8.20    192.168.8.21   2台机器安装路径均和外网保持一致)

Root    

启动命令:
/mapbar/app/pgsql/bin/postgres -D /mapbar/app/pgsql/data
/mapbar/db/program/postgresql-9.2.4/bin/postgres -D /mapbar/db/data




一。 修改主机的配置文件,然后重启数据库:

1. 添加复制的用户:

su  postgres
/mapbar/app/pgsql/bin/psql postgres  
Create user repl superuser password '111qqq,,,';

2. 修改pg_hba.conf 文件:

vi /mapbar/app/pgsql/data/pg_hba.conf  (这里8.20, 8.21 最好都加上 要不以后备机切主机也需要增加权限ip)
host    replication     repl         192.168.8.21/0      password

3. 修改postgresql.conf 文件:

wal_level = hot_standby	
max_wal_senders = 5
listen_addresses = '*'

(  这段不用了  写的不对
archive_mode =on  --开启归档
archive_command ='test ! -f /mapbar/app/pgsql/archive_log/%f && cp %p /mapbar/app/pgsql/archive_log/%f' 
)


hot_standby = on

4.  重启数据库



二。  修改备机的配置文件,然后关闭备机数据库:

1. 修改 recovery.conf: (此文件是从: /mapbar/db/program/postgresql-9.2.4/share   下面的recovery.conf.sample  文件拷贝到data下 改名而得)

standby_mode = on
primary_conninfo = 'host=192.168.8.20 port=5432 user=repl password=111qqq,,,'


三。     主机执行命令:(或者到bin下面执行 ./psql)

Su postgres:
psql -c "select pg_start_backup('initial_backup');"
Su  root:
rsync -cva -P --inplace --exclude=*pg_xlog* /mapbar/app/pgsql/data/ 192.168.8.21:/mapbar/db/data/
Su postgres:
psql -c "select pg_stop_backup();"

四。   启动备机的数据库:

五。  测试新加入一个user用户:

 看看备机数据库有没有这个用户


=========================   备机切主机    ===================================

六。 如果想从备机切换到主机:

备机:
1. recovery.conf 增加:

trigger_file = '/mapbar/sh/trigger.kenyon'

2. 重启数据库

3. 停掉主机的数据库 

4. 备机执行:

touch /mapbar/sh/trigger.kenyon    (创建了一个文件,数据库可以读到就切换为主机)

这时候:recovery.conf 文件已经变成了  recovery.done

5. 切换tomcat 连接 8.21的数据库,启动。
添加一个账号: 21AAA 的数据,这时8.20 是没有这个数据的

主机:
6. 拷贝备机的recovery.done  到主机上:recovery.conf:
修改里面的内容:
primary_conninfo = 'host=192.168.8.21 port=5432 user=repl password=111qqq,,,'

(   ================   这一步应该在开始配置的时候就加上, 避免备机数据库的重启
修改备机的 pg_hba.conf 的配置,允许主机访问:
host    replication     repl         192.168.8.20/32      password

重启备机的数据库

)


7. 启动主机:
报错:
FATAL:  timeline 1 of the primary does not match recovery target timeline 2

需要重新从备机 copy data 到主机:
     cd /mapbar/db/program/postgresql-9.2.4/bin/

Su postgres:
./psql -c "select pg_start_backup('initial_backup');"

Su  root:
rsync -cva -P --inplace  /mapbar/db/data/ 192.168.8.20:/mapbar/app/pgsql/data/

Su postgres:
./psql -c "select pg_stop_backup();"

8. 启动主机,这时主机已变成了备用机

使用原备机的数据库创建账号,可以看见原主机也有了账号





相关资料:
http://my.oschina.net/Kenyon/blog/98217

http://www.tuicool.com/articles/rmEnUnN

http://blog.sina.com.cn/s/blog_6cd44dbc0101cbvt.html

http://www.pgsqldb.org:8079/pgdoc/tutorial-zh_cn.html


http://francs3.blog.163.com/blog/static/4057672720149285445881/

猜你喜欢

转载自winder-sety.iteye.com/blog/2188039