热门标签 | 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 .
  

六 参考

推荐阅读
  • 本文介绍了Oracle数据库中tnsnames.ora文件的作用和配置方法。tnsnames.ora文件在数据库启动过程中会被读取,用于解析LOCAL_LISTENER,并且与侦听无关。文章还提供了配置LOCAL_LISTENER和1522端口的示例,并展示了listener.ora文件的内容。 ... [详细]
  • 本文详细介绍了在ASP.NET中获取插入记录的ID的几种方法,包括使用SCOPE_IDENTITY()和IDENT_CURRENT()函数,以及通过ExecuteReader方法执行SQL语句获取ID的步骤。同时,还提供了使用这些方法的示例代码和注意事项。对于需要获取表中最后一个插入操作所产生的ID或马上使用刚插入的新记录ID的开发者来说,本文提供了一些有用的技巧和建议。 ... [详细]
  • 本文讨论了在数据库打开和关闭状态下,重新命名或移动数据文件和日志文件的情况。针对性能和维护原因,需要将数据库文件移动到不同的磁盘上或重新分配到新的磁盘上的情况,以及在操作系统级别移动或重命名数据文件但未在数据库层进行重命名导致报错的情况。通过三个方面进行讨论。 ... [详细]
  • ubuntu用sqoop将数据从hive导入mysql时,命令: ... [详细]
  • 本文介绍了在Linux下安装和配置Kafka的方法,包括安装JDK、下载和解压Kafka、配置Kafka的参数,以及配置Kafka的日志目录、服务器IP和日志存放路径等。同时还提供了单机配置部署的方法和zookeeper地址和端口的配置。通过实操成功的案例,帮助读者快速完成Kafka的安装和配置。 ... [详细]
  • 本文详细介绍了Linux中进程控制块PCBtask_struct结构体的结构和作用,包括进程状态、进程号、待处理信号、进程地址空间、调度标志、锁深度、基本时间片、调度策略以及内存管理信息等方面的内容。阅读本文可以更加深入地了解Linux进程管理的原理和机制。 ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • 本文介绍了在Linux下安装Perl的步骤,并提供了一个简单的Perl程序示例。同时,还展示了运行该程序的结果。 ... [详细]
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
  • Webmin远程命令执行漏洞复现及防护方法
    本文介绍了Webmin远程命令执行漏洞CVE-2019-15107的漏洞详情和复现方法,同时提供了防护方法。漏洞存在于Webmin的找回密码页面中,攻击者无需权限即可注入命令并执行任意系统命令。文章还提供了相关参考链接和搭建靶场的步骤。此外,还指出了参考链接中的数据包不准确的问题,并解释了漏洞触发的条件。最后,给出了防护方法以避免受到该漏洞的攻击。 ... [详细]
  • Linux磁盘的分区、格式化的观察和操作步骤
    本文介绍了如何观察Linux磁盘的分区状态,使用lsblk命令列出系统上的所有磁盘列表,并解释了列表中各个字段的含义。同时,还介绍了使用parted命令列出磁盘的分区表类型和分区信息的方法。在进行磁盘分区操作时,根据分区表类型选择使用fdisk或gdisk命令,并提供了具体的分区步骤。通过本文,读者可以了解到Linux磁盘分区和格式化的基本知识和操作步骤。 ... [详细]
  • HDFS2.x新特性
    一、集群间数据拷贝scp实现两个远程主机之间的文件复制scp-rhello.txtroothadoop103:useratguiguhello.txt推pushscp-rr ... [详细]
  • 仙贝旅行是日本最大的旅游服务平台之一,为广大用户提供优质的日本定制游服务。随着用户数量的增长,仙贝旅行决定与智齿科技合作,全面替换原有客服系统,打造全新的在线客服体系。该体系具备多渠道快速接入的能力,让仙贝旅行轻松与各个渠道的接入用户完成沟通。同时,机器人与人工协同发力,提升客户服务水平。 ... [详细]
  • 本文介绍了一些Java开发项目管理工具及其配置教程,包括团队协同工具worktil,版本管理工具GitLab,自动化构建工具Jenkins,项目管理工具Maven和Maven私服Nexus,以及Mybatis的安装和代码自动生成工具。提供了相关链接供读者参考。 ... [详细]
  • 本文由编程笔记#小编为大家整理,主要介绍了StartingzookeeperFAILEDTOSTART相关的知识,希望对你有一定的参考价值。下载路径:https://ar ... [详细]
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社区 版权所有