使用命名管道

使用命名管道

Greenplum数据库允许把命名管道用于gpcrondumpgpdbrestore来备份和恢复Greenplum数据库。在用常规文件备份一个数据库时,包含备份信息的文件被放置在Greenplum数据库Segment上的目录中。如果Segment主机没有足够的本地磁盘空间来备份到文件,用户可以使用命名管道备份到非本地存储,例如在网络上另一台主机上的存储或者一种备份装置。

如果指定了--ddboost选项,则不支持用命名管道备份。

要使用命名管道备份一个Greenplum数据库

  1. 用选项-K timestamp--list-backup-files运行gpcrondump命令。

    这会创建两个包含备份文件名称的文本文件,每一个文件名一行。文件名包括用户用-K timestamp选项指定的timestamp并且具有后缀_pipes_regular_files。例如:

    gp_dump_20150519160000_pipes 
    gp_dump_20150519160000_regular_files
    列在_pipes文件中的文件名将被创建为命名管道。列在_regular_files文件中的文件名不会被创建为命名管道。gpcrondumpgpdbrestore在备份和恢复操作期间会使用这些文件中的信息。
  2. 使用生成的_pipes文件中的文件名在所有的Greenplum数据库Segment上创建命名管道。
  3. 将每个命名管道的输出重定向到目标进程或者文件对象。
  4. 运行gpcrondump使用命名管道备份数据库。

    要创建一个Greenplum数据库备份文件的完整集合,列在_regular_files文件中的文件也必须被备份。

要恢复一个备份期间使用了命名管道的数据库

  1. 将每个备份文件的美容定向到它的命名管道的输入。例如cat filename > pipename,如果该备份文件可以作为一个本地文件对象访问。
  2. 运行gpdbrestore命令使用命名管道恢复数据库。

例子

这个例子展示了如何通过玩过使用命名管道和netcat(nc)Linux命令备份一个数据库。Segment把备份文件写到命名管道的输入。命名管道的输出被导向nc命令,后者让那些文件在TCP端口上可用。其他主机上的进程接着可以在指定的端口连接到Segment主机来接收备份文件。这个例子要求在所有Greenplum主机上安装nc包。

  1. 输入下面的gpcrondump命令为testdb数据库在/backups目录中生成备份文件的列表。
    $ gpcrondump -x testdb -K 20150519160000 --list-backup-files -u /backups
    
  2. 查看gpcrondump创建在/backup目录中的文件:
    $ ls -lR /backups
    /backups:
    total 4
    drwxrwxr-x 3 gpadmin gpadmin 4096 May 19 21:49 db_dumps
    
    /backups/db_dumps:
    total 4
    drwxrwxr-x 2 gpadmin gpadmin 4096 May 19 21:49 20150519
    
    /backups/db_dumps/20150519:
    total 8
    -rw-rw-r-- 1 gpadmin gpadmin 256 May 19 21:49 gp_dump_20150519160000_pipes
    -rw-rw-r-- 1 gpadmin gpadmin 391 May 19 21:49 gp_dump_20150519160000_regular_files
  3. 查看_pipes文件的内容。
    $ cat /backups/db_dumps/20150519/gp_dump_20150519160000_pipes 
    sdw1:/backups/db_dumps/20150519/gp_dump_0_2_20150519160000.gz
    sdw2:/backups/db_dumps/20150519/gp_dump_1_3_20150519160000.gz
    mdw:/backups/db_dumps/20150519/gp_dump_-1_1_20150519160000.gz
    mdw:/backups/db_dumps/20150519/gp_dump_-1_1_20150519160000_post_data.gz
    
  4. 在Greenplum数据库的Segment上创建指定的命名管道。还未命名管道设置一个读取器。
    gpssh -h sdw1
    [sdw1] mkdir -p /backups/db_dumps/20150519/
    [sdw1] mkfifo /backups/db_dumps/20150519/gp_dump_0_2_20150519160000.gz
    [sdw1] cat /backups/db_dumps/20150519/gp_dump_0_2_20150519160000.gz | nc -l 21000 
    [sdw1] exit
    

    _pipes文件中列出的每个命名管道都完成这些步骤。确保为每个文件选择一个可用的TCP端口。

  5. 在目标主机上,用下面这样的命令接收备份文件:
    nc sdw1 21000 > gp_dump_0_2_20150519160000.gz
    
  6. 运行gpcrondump开始备份:
    gpcrondump -x testdb -K 20150519160000 -u /backups
    
要用命名管道恢复一个数据库,通过将备份文件的内容发送到命名管道的输入翻转备份文件的方向并且运行gpdbrestore命令:
gpdbrestore -x testdb -t 20150519160000 -u /backups
gpdbrestore从命名管道的输出读取。