Facebook的MySQL 5.6包括MyRocks热备份(在线物理备份)工具”myrocks_hotbackup”。 使用myrocks_hotbackup,您可以轻松地将正在运行的MyRocks实例的物理副本转移到本地或者远程服务器,而无需停止源实例。
这是一个示例使用方法:
[src_host]$ myrocks_hotbackup --user=root --password=pw --port=3306 --stream=tar --checkpoint_dir=$backup_dir | ssh -o NoneEnabled=yes dst_host 'tar -xi -C $dst_host_dir/backup_from_src'
[dst_host]$ myrocks_hotbackup --move_back --datadir=$datadir --rocksdb_datadir=$datadir/.rocksdb --rocksdb_waldir=$datadir --backup_dir=$dst_host_dir/backup_from_src
* myrocks_hotbackup 是一个用python编写的小脚本(约700行代码)。它位于scripts/myrocks_hotbackup
* myrocks_hotbackup 支持流式备份,类似于xtrabackup。通过流式备份,您可以通过其他传输协议(如SSH)轻松地将备份发送到远程服务器。
* myrocks_hotbackup 支持tar和WDT((https://github.com/facebook/wdt)
* myrocks_hotbackup命令,MyRocks通过硬链接创建检查点 -- 一致的快照。硬链接存储在--checkpoint_dir中,
因此--checkpoint_dir与--rocksdb_datadir目录位于同一文件系统上非常重要。
然后myrocks_hotbackup开始在--checkpoint_dir下发送文件。 MyRocks必须在--checkpoint_dir下具有写访问权限。
* myrocks_hotbackup 每隔一次更新检查点 --interval 秒、我们称之为"Rolling Checkpoints 滚动检查点"。
更新检查点时,myrocks_hotbackup会丢弃旧检查点,然后从新检查点发送文件。
myrocks_hotbackup记住发送的文件并跳过发送相同文件的多个文件。滚动检查点具有以下优点:
1、checkpoint检查点总数量有限,如果在启动备份时创建检查点,然后保存它直到备份结束,则检查点大小可能会变得很大,因为旧的SST文件在多次压缩后仍然存在。
2、启动 MyRocks 目标实例不会花费太多时间。在目标实例上进行备份后,需要应用WAL文件并进行复制。
使用滚动检查点,复制从检查点的最后一轮开始,该周期足够短,与备份大小无关。
如果没有"Rolling CheckPoint 滚动检查点",您需要从备份的开始时间开始复制,这可能需要很长时间才能赶上。
* myrocks_hotbackup 也发送MySQL元文件(*.frm)。myrocks_hotbackup不支持InnoDB文件。
* --move-back需要移动才能正确放置SST(.sst),WAL(.log),*.frm 文件。使用流式备份时,所有文件都将发送到单个目标目录(--backup_dir),
因此需要向后移动(--move-back)才能移动它们.xtrabackup流式备份具有相同的要求。