恢复数据库快照xb文件到新实例
背景 背景就是我把线上某张表的某个字段给清空了。用的是腾讯云的数据库实例,运维配置的快照是每天早上备份一次,因此可以通过快照文件恢复数据。直接恢复到线上实例是不现实的,所以想法是将快照恢复到本地实例,然后用脚本/工具把数据导出来,再写入线上实例。当时恢复过程比较曲折,这里记录下比较好的操作步骤。 获取xb文件 从云服务商或你自行备份的xb文件中获取。腾讯云 这里 可找到备份列表 安装xbstream和qpress工具 腾讯云使用qpress压缩文件,再通过xbsteam打包为xb文件。[参考腾讯云文章] 安装xbstream 下载并安装 XtraBackup 工具。 下载地址请参见 Percona XtraBackup 官网,请选择 Percona XtraBackup 2.4.6 及以上的版本,安装介绍请参见 Percona XtraBackup 2.4。 支持的实例版本:MySQL 5.5、5.6、5.7 高可用版和金融版。 启用数据加密功能的实例,不支持使用物理备份恢复数据库。 我使用的是mac,使用brew进行安装 brew install percona-xtrabackup 安装qpress 从quicklz下载编译好的二进制文件。 我的mac无法直接使用linux的可执行文件,所以从上面网站下载源码,编译安装。 mac编译qpress时报错 qpress.cpp:1040:18: error: use of undeclared identifier 'isatty' tty_stderr = isatty(fileno(stderr)); ^ 1 error generated. make: *** [g++] Error 1 qpress.cpp 添加头文件 #include <unistd.h> 重新编译成功。将编译好的qpress拷贝到 /usr/local/bin 。必须放到该目录下,因为xbstream工具调用qpress是用的绝对路径(为啥这样设计 ̄□ ̄||) 对xb文件进行解包&解压缩 xbstream -x -C /tmp/新建的目录 < ~/你的xb文件.xb # 使用 xbstream 命令将备份文件解包到目标目录 xtrabackup --decompress --target-dir=/tmp/新建的目录 # 将目标目录下所有以.qp结尾的文件都解压出来 将解压出来的frm、ibd文件附到本地mysql实例 腾讯云的方法 腾讯云文档的方法是起一个mysqld_safe实例将data配置为刚刚那个新建的目录 ...