xtrabackup备份和恢复一个库的指定几张表
前言
目前有这样一个需求,需要备份mysql库中一个库中的默认几张表,因为以前只通过xtrabackup备份过全库或单库,从来没有备份过一个库中的几张表,所以记录一下踩坑经验。
方法
备份方法:
innobackupex有一个--tables-file参数,在备份的时候指定此参数,后面带一个数据库列表文件即可把所有指定表的指定库备份出来,此文件中所有表书写格式为数据库名.表名,多个表名分多行写就行。
考虑到这几个表比较大,所以可以通过--stream参数直接输出为tar包的格式,语句如下:
innobackupex --defaults-file=数据库配置文件 --user=用户名 --password=密码 --tables-file=数据库列表文件 --stream=tar . | xz - > /backup/test.tar.xz #--stream=tar 后面有一个目录,此处为当前目录“.”,此目录为备份文件临时存储目录,- > /backup/test.tar.xz 表示备份文件存储位置和存储名
恢复方法:
因为我要把这份备份文件恢复到其他服务器的数据库,一开始直接通过--apply-log和--copy-back之后发现恢复之后可以看到恢复的库和表,但是对表进行任何操作都会受到如下报错:
mysql错误日志报错如下:
后来查询xtrabackup的man手册和mysql的官方文档发现原因如下:innodb存储引擎的表在恢复到其他数据库的时候它的表空间是存放在.cfg文件中的,但是此时恢复会检测.cfg是否符合mysql的schema,所以就会报错。
解决方法:
在--apply-log的时候添加--export命令,把表空间保存为.exp文件,此时恢复的时候可以单独读取此表空间导出文件,然后就能正常对表进行操作了。
innobackupex --apply-log --export 备份目录
#拷贝已经--apply-log的数据到数据库数据目录,然后修改属组属主,启动数据库即可
注意:
如果没有备份mysql表,恢复的时候首先需要先进行数据库的初始化操作。因为没有mysql表是无法启动mysql服务的。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构