背景
背景就是我把线上某张表的某个字段给清空了。用的是腾讯云的数据库实例,运维配置的快照是每天早上备份一次,因此可以通过快照文件恢复数据。直接恢复到线上实例是不现实的,所以想法是将快照恢复到本地实例,然后用脚本/工具把数据导出来,再写入线上实例。当时恢复过程比较曲折,这里记录下比较好的操作步骤。
获取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配置为刚刚那个新建的目录
步骤4:Prepare 备份文件
备份解压出来之后,执行如下命令进行 apply log 操作。
执行后若结果中包含如下输出,则表示 prepare 成功。
步骤5:修改配置文件
- 执行如下命令打开
backup-my.cnf
文件。说明:本文以目标目录
/data
为例,您可以根据实际情况将其替换成实际路径。- 由于存在的版本问题,请将解压文件
backup-my.cnf
中如下参数进行注释。
- innodb_checksum_algorithm
- innodb_log_checksum_algorithm
- innodb_fast_checksum
- innodb_page_size
- innodb_log_block_size
- redo_log_version
步骤6:修改文件属性
修改文件属性,并检查文件所属为 mysql 用户。
步骤7:启动 mysqld 进程并登录验证
- 启动 mysqld 进程。
- 客户端登录 mysql 验证。
我的方法
为什么我不用腾讯云的方法呢。因为现在整理写博客时才看到。盆友们可以试试吧,如果行不通的话,可以用我的方法。ps.平时从别的实例拷贝.ibd/.frm到新实例也可以用该方法
- 在你的实例新建一个同名数据库
- 在刚创建的数据库里创建需要恢复的table
- 删除对应表的.ibd文件:ALTER TABLE 你的表名 DISCARD TABLESPACE;
- 将上面解压的.ibd文件拷贝到mysql实例加载的data/数据库名/ 目录下
- 将新的.ibd文件加载到新表:ALTER TABLE 你的表名 IMPORT TABLESPACE;
以上方法参考自mysql官方文档
自此数据恢复到新实例,可以操作数据了~
brew install percona-xtrabackup大佬 这个下到最新的是8.0的,不支持解压5.7数据库。你有遇到这个问题吗
可以试试这个2.4.14版本的
brew install https://raw.githubusercontent.com/Homebrew/homebrew-core/4db993ff3e189d02142861ac894b1ea9ef2c51e6/Formula/percona-xtrabackup.rb