• 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服务的。

  • 相关阅读:
    使用正则表达式验证邮箱格式
    写一个function,清除字符串前后的空格。(兼容所有浏览器)
    圣杯/双飞翼布局
    请指出document load和document ready的区别?
    Ajax的优缺点及工作原理?
    Web Storage与Cookie相比存在的优势:
    sessionStorage 、localStorage 和 cookie 之间的区别
    什么叫优雅降级和渐进增强?
    浏览器的内核分别是什么?
    [翻译] MSAlertController
  • 原文地址:https://www.cnblogs.com/stacks/p/8092734.html
Copyright © 2020-2023  润新知