Fork me on GitHub
Suzf  Blog

[译] Couchbase 使用 cbbackup 备份

cbbackup 工具 是一个灵活的备份命令,使您可以备份本地数据和远程节点和涉及您的集群数据的不同组合:

单节点单buckets 单节点上所有buckets 整个群集上单个buckets 整个群集上所有buckets

备份可以在一个单独的节点直接拷贝文件,也可以通过连接远程群集然后通过数据流的形式保存到备份位置。备份可以运行在运行的节点或集群或脱机节点上执行。

cbbackup 命令可以以一种容易恢复的格式储存数据。当需要恢复的时候使用 cbrestore,你可以还原数据到任何配置的群集。源和目的群集不需要满足你使用 cbbackup 命令时保存的信息。

cbbackup 命令将从源定义的每个项中拷贝数据到目的备份目录。备份文件的格式是Couchbase所特有的并且能够使你在打算将数据还原到群集时恢复所有或部分备份数据  。

可以选择在一个关键上(通过正则表达式)或所有的数据存储在一个特定的vbucket ID,您也可以选择从一个 bucket 中将源数据复制到这个群集中一个不同名字的 bucket 。

cbbackup 命令参数选项:

cbbackup [options] [source] [backup_dir] 
Note: cbbackup工具位于Couchbase标准命令行目录。

要知道 cbbackup 不支持外部IP地址。如果你安装了Couchbase服务器使用默认的IP地址,不能使用外部主机访问它。

接下来是 cbbackup 可选参数:

下面选项是用来配置连接群集的用户和密码信息,备份类型和bucket 选项。

你可以使用一个或多个选项。主要的选项包括:

  • --single-node
  • 备份单节点
  • --bucket-source or -b
  • 备份特定名称的 bucket

接下来是 cbbackup 的必选参数:

数据源,本地数据目录参考或者是远程 节点/群集规范:

  • 本地目录参考
  • 本地目录规范是使用 `couchstore-files` 协议定义的 URL。举个栗子: couchstore-files:///opt/couchbase/var/lib/couchbase/data/default
  • 使用这种方法,您只需在单个节点上备份指定 bucket 的数据。如果在群集上备份全部 bucket 数据 或是 备份单个节点上的所有数据,这时你必须使用群集节点规范。这种方法在 bucket 中定义的设计文档不支持。

  • 群集 节点
  • 这个一个节点或是群集中的一个节点,将 URL 指定为一个节点 或是 群集 服务。

    举个栗子:

    http://HOST:8091
    
    // For distinction you can use the couchbase protocol prefix:
        couchbase://HOST:8091
    
    
    // The administrator and password can also be combined with both forms of the URL for authentication. 
    If you have named data buckets (other than the default bucket) that you want to backup, 
    specify an administrative name and password for the bucket:
    
        couchbase://Administrator:[email protected]:8091          
其他选项的组合所提供的URL是否指的是整个群集、单节点、或者是一个单独的bucket (节点或者是群集)。其中节点和群集可以使远程的也可以是本地的。这种方法也用于备份定义视图和索引的设计文档。
cbbackup [backup_dir] 参数是执行 cbbackup 命令保存备份数据的目录。这必须是一个绝对明确的目录,文件将直接存储在特定的目录;没有额外的目录结构被创建用来区分备份数据不同组件。你所指定的那个备份目录应该是不存在的,或者是存在的空目录。如果目录不存在,它将被创建,但是如果父目录已经存在。备份目录总是在本地节点创建,即使你正在备份的远程节点或是一个群集。备份文件存储在本地指定的特定目录中。备份可以运行在一个正在运行的集群中或是一个对应ip的节点
使用这种基本结构,你可以从源集群中备份不同的数据组合。下面提供一些不同数据组合的例子:

备份所有节点上的所有bucket

备份整个群集的数据包含所有bucket、所有节点数据:
cbbackup http://HOST:8091 /backups/backup-20120501 \ 
    -u Administrator -p password 
    [####################] 100.0% (231726/231718 msgs) 
bucket: default, msgs transferred... 
          : 
               total |     last | per sec 
    batch :     5298 |     5298 | 617.1 
    byte  : 10247683 | 10247683 | 1193705.5 
    msg   :   231726 |   231726 | 26992.7 
done 
    [####################] 100.0% (11458/11458 msgs) 
bucket: loggin, msgs transferred... 
          : 
               total |     last | per sec 
    batch :     5943 |     5943 | 15731.0 
    byte  : 11474121 | 11474121 | 30371673.5 
    msg   :       84 |       84 | 643701.2 
done   
其他选项的组合所提供的URL是否指的是整个群集、单节点、或者是一个单独的bucket (节点或者是群集)。其中节点和群集可以使远程的也可以是本地的。这种方法也用于备份定义视图和索引的设计文档。
cbbackup [backup_dir] 参数是执行 cbbackup 命令保存备份数据的目录。这必须是一个绝对明确的目录,文件将直接存储在特定的目录;没有额外的目录结构被创建用来区分备份数据不同组件。你所指定的那个备份目录应该是不存在的,或者是存在的空目录。如果目录不存在,它将被创建,但是如果父目录已经存在。备份目录总是在本地节点创建,即使你正在备份的远程节点或是一个群集。备份文件存储在本地指定的特定目录中。备份可以运行在一个正在运行的集群中或是一个对应ip的节点
使用这种基本结构,你可以从源集群中备份不同的数据组合。下面提供一些不同数据组合的例子:

备份所有节点上的所有bucket

备份整个群集的数据包含所有bucket、所有节点数据:
cbbackup http://HOST:8091 /backups/backup-20120501 \
      -u Administrator -p password \
      -b default
      [####################] 100.0% (231726/231718 msgs)
    bucket: default, msgs transferred...
           :                total |       last |    per sec
     batch :                 5294 |       5294 |      617.0
     byte  :             10247683 |   10247683 |  1194346.7
     msg   :               231726 |     231726 |    27007.2
    done
-b 选项用来指定你所想要备份的bucket. 如果bucket的名字是bucket,你必须提供管理员的账号和密码。如果你想要备份整个群集的数据,你必须执行对群集中每个bucket执行相同的备份操作。

备份单个节点 所有bucket

备份单个节点所有bucket所有数据:
cbbackup http://HOST:8091 /backups/backup-20120501 \
      -u Administrator -p password \
      --single-node
使用这种方法,数据源必须指定你想要备份的节点名称。
使用这种方法备份真个群集的数据,你应该单独的备份群集中的每个节点。

备份单个节点 单个bucket

在单个节点上备份单个bucket:
cbbackup http://HOST:8091 /backups/backup-20120501 \
      -u Administrator -p password \
      --single-node \
      -b default
使用这种方法,数据源必须指定你想要备份的节点名称。

备份单个节点,单个bucket; 备份文件存储在同一台节点

这里有两种方法可以备份单个bucket 单个节点,同时备份数据存储在源数据节点。
需要指定节点名称和数据备份路径,举个栗子:
ssh [email protected]
    remote-> sudo su - couchbase
    remote-> cbbackup http://127.0.0.1:8091 /mnt/backup-20120501 \
      -u Administrator -p password \
      --single-node \
      -b default
使用这种方法,数据源必须指定你想要备份的节点名称。
备份单个节点,单个bucket; 备份文件存储在同一台节点
这里有两种方法可以备份单个bucket 单个节点,同时备份数据存储在源数据节点。
需要指定节点名称和数据备份路径,举个栗子:

ssh [email protected]
    remote-> sudo su - couchbase
    remote-> cbbackup couchstore-files:///opt/couchbase/var/lib/couchbase/data/default /mnt/backup-20120501
使用这种方法备份整个群集数据,你需要备份群集中每个节点每个bucket的数据。
注意: 选择合适的备份解决方案取决于您的要求,和你期望数据恢复到集群方法。

在备份的时候过滤 Keys

cbbackup 支持过滤 keys 备份。 这将是一个很有用的功能,如果你想备份部分数据或者是你想要将部分数据迁到到不同的 bucket 中。
这种格式是以正则表达式的形式体现,并在cbbackup工具中的客户端进行的。例如,从一个桶,该键有一个前缀对象的信息备份:
cbbackup http://HOST:8091 /backups/backup-20120501 \
  -u Administrator -p password \
  -b default \
  -k '^object.*'
上面的备份只是将正则匹配到的数据存储到备份文件中了。当数据备份了,只有记录在备份文件的key恢复。
重要提示:
正则表达式匹配在客户端执行。这就意味着真个 bucket 的内容 cbbackup 必须能够访问,如果不匹配数据将丢弃。
基于key的正则表达式同样适用于恢复数据的时候。你可以备份真个bucket,在你使用cbrestore 恢复的时候选择期望恢复的keys.

通过拷贝文件的形式进行备份

您也可以备份数据通过使用cbbackup并指定其中数据存储在本地目录,
或者直接拷贝数据文件 比如:cp、tar ...。
举个例子
使用 cbbackup:
> cbbackup \
    couchstore-files:///opt/couchbase/var/lib/couchbase/data/default \
    /mnt/backup-20120501

使用 cp 命令实现同样的备份效果 :

> cp -R /opt/couchbase/var/lib/couchbase/data/default \
      /mnt/copy-20120501
使用这种方法备份书受限制的。在相同的集群配置中数据只能恢复到离线的节点,要使其中相同的vBucket地图运作,
你也应该CONFIG.DAT配置文件从每个节点复制。
源文: backup-cbbackup