热门标签 | HotTags
当前位置:  开发笔记 > 数据库 > 正文

PostgreSQL:使用pg_basebackup搭建流复制环境

早在PostgreSQL9.1版就已新出pg_basebackup工具,用来搭建流复制备库,之前一直没有
  早在 PostgreSQL 9.1 版就已新出 pg_basebackup 工具,用来搭建流复制备库,之前一直没有
实践,今天补上。

    传统的搭建流复制备库步骤为以下: 
    
  1.     select pg_start_backup(); 
  2.     复制数据文件; 
  3.     select pg_stop_backup();
    
    而 pg_basebackup 则省略以上步骤,一步搞定,对于有多个数据目录的库来说,pg_basebackup
    工具比上面步骤要简单多了,并且可以在线操作,下面演示下。


一 环境信息
主机:   笔记本虚拟机
系统:   Red Hat Enterprise Linux Server release 6.2
版本:   PostgreSQL 9.3beta1
主库IP: 192.168.1.36  主机名:redhatB
备库IP: 192.168.1.35  主机名   redhat6
              备注: PostgreSQL 安装略。

二 主库上操作
--2.1 创建复制用户
 CREATE USER repuser
  REPLICATION 
  LOGIN
  CONNECTION LIMIT 2
  ENCRYPTED PASSWORD 'rep123us345er';
   
--2.2 设置 pg_hba.conf,添加以下
 host   replication     repuser          192.168.1.35/32         md5
  
--2.3 设置主库 postgresql.conf 
 checkpoint_segments = 16
archive_mode = on
archive_command = '/bin/date'
max_wal_senders = 3
wal_keep_segments = 16 
max_wal_senders = 3 
 备注:仅列出主要参数,其它参数根据实际情况设置。

--2.4 重载配置文件
 [pg93@redhatB ~]$ pg_ctl reload -D $PGDATA
server signaled
  
--2.5 查看表空间目录
 postgres=# \db
                      List of tablespaces
     Name      |  Owner   |              Location               
---------------+----------+-------------------------------------
 pg_default    | postgres | 
 pg_global     | postgres | 
 tbs_francs    | postgres | /database/pg93/pg_tbs/tbs_francs
 tbs_source_db | postgres | /database/pg93/pg_tbs/tbs_source_db
(4 rows)
  
--2.6 查看数据目录
 [pg93@redhatB pg_xlog]$ echo $PGDATA
/database/pg93/pg_root
备注:先查看表空间目录和数据目录,因为这些目录需要在备库主机上手工创建。
 

三 备库操作
--3.1 创建目录并赋权
 [root@redhat6 pgsql9.3beta1]# mkdir -p /database/pg93/pg_tbs/tbs_francs
[root@redhat6 pgsql9.3beta1]# mkdir -p /database/pg93/pg_tbs/tbs_source_db
[root@redhat6 pgsql9.3beta1]# mkdir -p /database/pg93/pg_root

[root@redhat6 pgsql9.3beta1]# chown -R pg93:pg93 /database/pg93/pg_tbs/tbs_francs
[root@redhat6 pgsql9.3beta1]# chown -R pg93:pg93 /database/pg93/pg_tbs/tbs_source_db
[root@redhat6 pgsql9.3beta1]# chown -R pg93:pg93 /database/pg93/pg_root
[root@redhat6 pgsql9.3beta1]# chmod 0700 /database/pg93/pg_root
  
--3.2 创建 .pgpass
 [pg93@redhat6 ~]$ cat .pgpass
192.168.1.36:1925:replication:repuser:rep123us345er

[pg93@redhat6 ~]$ chmod 0600 .pgpass
备注:注意 .pgpass文件权限为 0600。

--3.3 使用 pg_basebackup 生成备库
[pg93@redhat6 pg93]$ pg_basebackup -D /database/pg93/pg_root -Fp -Xs -v -P -h 192.168.1.36 -p 1925 -U repuser

transaction log start point: 1/1B000024 on timeline 1
pg_basebackup: starting background WAL receiver
651493/651493 kB (100%), 3/3 tablespaces                                         
transaction log end point: 1/1B0000DC
pg_basebackup: waiting for background process to finish streaming ...
pg_basebackup: base backup completed
  备注:这时表空间目录,$PGDATA 目录已经复制过来了,这里使用了 -X 参数,在备份完成之后,
              会到主库上收集 pg_basebackup 执行期间产生的 WAL 日志,在 9.2 版本之后支持 -Xs 即,
              stream 形式,这种模式不需要收集主库的 WAL 文件,而能以 stream 复制方式直接追赶主库。

--3.4 设置从库 postgresql.conf 
 hot_standby = on
  

--3.5 设置从库 recovery.conf
--3.5.1 生成 recovery.conf
 [pg93@redhat6 pg_root]$ cp /opt/pgsql9.3beta1/share/recovery.conf.sample  recovery.conf
  
--3.5.2 修改以下参数
 standby_mode = on
primary_cOnninfo= 'host=192.168.1.36 port=1925 user=repuser'
trigger_file = '/database/pg93/pg_root/postgresql.trigger.1925'
  
--3.6 启服务
 [pg93@redhat6 pg_root]$ pg_ctl start -D $PGDATA
server starting
  
--3.7 查看备库进程                     
 [pg93@redhat6 pg_xlog]$ ps -ef | grep pg93
pg93     31398     1  0 21:09 pts/0    00:00:00 /opt/pgsql9.3beta1/bin/postgres -D /database/pg93/pg_root
pg93     31399 31398  0 21:09 ?        00:00:00 postgres: logger process                                 
pg93     31400 31398  0 21:09 ?        00:00:00 postgres: startup process   waiting for 00000001000000010000001A
pg93     31401 31398  0 21:09 ?        00:00:00 postgres: checkpointer process                           
pg93     31402 31398  0 21:09 ?        00:00:00 postgres: writer process                                 
pg93     31403 31398  0 21:09 ?        00:00:00 postgres: stats collector process                        
pg93     31404 31398  0 21:09 ?        00:00:00 postgres: wal receiver process     
  
--3.8 查看主库进程
 [pg93@redhatB pg_xlog]$ ps -ef | grep pg93
pg93      2504     1  0 Jun28 ?        00:00:26 /opt/pgsql9.3beta1/bin/postgres -D /database/pg93/pg_root
pg93      2505  2504  0 Jun28 ?        00:00:00 postgres: logger process                                 
pg93      2507  2504  0 Jun28 ?        00:00:08 postgres: checkpointer process                           
pg93      2508  2504  0 Jun28 ?        00:00:28 postgres: writer process                                 
pg93      2509  2504  0 Jun28 ?        00:00:08 postgres: wal writer process                             
pg93      2510  2504  0 Jun28 ?        00:00:19 postgres: autovacuum launcher process                    
pg93      2511  2504  0 Jun28 ?        00:00:00 postgres: archiver process   last was 000000010000000100000019.00000024.backup
pg93      2512  2504  0 Jun28 ?        00:00:44 postgres: stats collector process                        
pg93     31898  2504  0 21:09 ?        00:00:00 postgres: wal sender process repuser 192.168.1.35(39545) idle
  

四 测试
--4.1 主库
 [pg93@redhatB ~]$ psql
psql (9.3beta1)
Type "help" for help.

postgres=# create table test_1 (id int4,create_time timestamp(0) without time zone);
CREATE TABLE

postgres=# insert into test_1 values (1,now());
INSERT 0 1

postgres=# select * from test_1;
 id |     create_time     
----+---------------------
  1 | 2013-07-01 21:15:34
(1 row)
  

--4.2 备库
 [pg93@redhat6 pg_xlog]$ psql
psql (9.3beta1)
Type "help" for help.

postgres=# select * from test_1 

postgres=# select * from test_1 ;
 id |     create_time     
----+---------------------
  1 | 2013-07-01 21:15:34
(1 row)

 备注:流复制搭建完成。

五 附: pg_basebackup 参数
 [pg93@redhat6 pg_xlog]$ pg_basebackup --help
pg_basebackup takes a base backup of a running PostgreSQL server.

Usage:
  pg_basebackup [OPTION]...

Options controlling the output:
  -D, --pgdata=DIRECTORY receive base backup into directory
  -F, --format=p|t       output format (plain (default), tar)
  -R, --write-recovery-conf
                         write recovery.conf after backup
  -x, --xlog             include required WAL files in backup (fetch mode)
  -X, --xlog-method=fetch|stream
                         include required WAL files with specified method
  -z, --gzip             compress tar output
  -Z, --compress=0-9     compress tar output with given compression level

General options:
  -c, --checkpoint=fast|spread
                         set fast or spread checkpointing
  -l, --label=LABEL      set backup label
  -P, --progress         show progress information
  -v, --verbose          output verbose messages
  -V, --version          output version information, then exit
  -?, --help             show this help, then exit

Connection options:
  -d, --dbname=CONNSTR   connection string
  -h, --host=HOSTNAME    database server host or socket directory
  -p, --port=PORT        database server port number
  -s, --status-interval=INTERVAL
                         time between status packets sent to server (in seconds)
  -U, --username=NAME    connect as specified database user
  -w, --no-password      never prompt for password
  -W, --password         force password prompt (should happen automatically)

Report bugs to .
  

六 参考

推荐阅读
  • 本文详细介绍如何使用Python进行配置文件的读写操作,涵盖常见的配置文件格式(如INI、JSON、TOML和YAML),并提供具体的代码示例。 ... [详细]
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • PHP 5.2.5 安装与配置指南
    本文详细介绍了 PHP 5.2.5 的安装和配置步骤,帮助开发者解决常见的环境配置问题,特别是上传图片时遇到的错误。通过本教程,您可以顺利搭建并优化 PHP 运行环境。 ... [详细]
  • 构建基于BERT的中文NL2SQL模型:一个简明的基准
    本文探讨了将自然语言转换为SQL语句(NL2SQL)的任务,这是人工智能领域中一项非常实用的研究方向。文章介绍了笔者在公司举办的首届中文NL2SQL挑战赛中的实践,该比赛提供了金融和通用领域的表格数据,并标注了对应的自然语言与SQL语句对,旨在训练准确的NL2SQL模型。 ... [详细]
  • 在Ubuntu 16.04 LTS上配置Qt Creator开发环境
    本文详细介绍了如何在Ubuntu 16.04 LTS系统中安装和配置Qt Creator,涵盖了从下载到安装的全过程,并提供了常见问题的解决方案。 ... [详细]
  • 本文详细介绍了如何在 Linux 平台上安装和配置 PostgreSQL 数据库。通过访问官方资源并遵循特定的操作步骤,用户可以在不同发行版(如 Ubuntu 和 Red Hat)上顺利完成 PostgreSQL 的安装。 ... [详细]
  • 本文详细分析了Hive在启动过程中遇到的权限拒绝错误,并提供了多种解决方案,包括调整文件权限、用户组设置以及环境变量配置等。 ... [详细]
  • MySQL缓存机制深度解析
    本文详细探讨了MySQL的缓存机制,包括主从复制、读写分离以及缓存同步策略等内容。通过理解这些概念和技术,读者可以更好地优化数据库性能。 ... [详细]
  • MySQL 数据库迁移指南:从本地到远程及磁盘间迁移
    本文详细介绍了如何在不同场景下进行 MySQL 数据库的迁移,包括从一个硬盘迁移到另一个硬盘、从一台计算机迁移到另一台计算机,以及解决迁移过程中可能遇到的问题。 ... [详细]
  • DNN Community 和 Professional 版本的主要差异
    本文详细解析了 DotNetNuke (DNN) 的两种主要版本:Community 和 Professional。通过对比两者的功能和附加组件,帮助用户选择最适合其需求的版本。 ... [详细]
  • XNA 3.0 游戏编程:从 XML 文件加载数据
    本文介绍如何在 XNA 3.0 游戏项目中从 XML 文件加载数据。我们将探讨如何将 XML 数据序列化为二进制文件,并通过内容管道加载到游戏中。此外,还会涉及自定义类型读取器和写入器的实现。 ... [详细]
  • UNP 第9章:主机名与地址转换
    本章探讨了用于在主机名和数值地址之间进行转换的函数,如gethostbyname和gethostbyaddr。此外,还介绍了getservbyname和getservbyport函数,用于在服务器名和端口号之间进行转换。 ... [详细]
  • 本文详细介绍了如何使用ActionScript 3.0 (AS3) 连接并操作MySQL数据库。通过具体的代码示例和步骤说明,帮助开发者理解并实现这一过程。 ... [详细]
  • 在现代网络环境中,两台计算机之间的文件传输需求日益增长。传统的FTP和SSH方式虽然有效,但其配置复杂、步骤繁琐,难以满足快速且安全的传输需求。本文将介绍一种基于Go语言开发的新一代文件传输工具——Croc,它不仅简化了操作流程,还提供了强大的加密和跨平台支持。 ... [详细]
  • 解决微信电脑版无法刷朋友圈问题:使用安卓远程投屏方案
    在工作期间想要浏览微信和朋友圈却不太方便?虽然微信电脑版目前不支持直接刷朋友圈,但通过远程投屏技术,可以轻松实现在电脑上操作安卓设备的功能。 ... [详细]
author-avatar
RvJ手机用户2997047695f
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有