zoukankan      html  css  js  c++  java
  • 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服务的。

  • 相关阅读:
    Educational Codeforces Round 20 D. Magazine Ad
    Educational Codeforces Round 20 C. Maximal GCD
    紫书第三章训练2 暴力集
    Educational Codeforces Round 20 B. Distances to Zero
    Educational Codeforces Round 20 A. Maximal Binary Matrix
    紫书第三章训练1 D
    紫书第一章训练1 D -Message Decoding
    HAZU校赛 Problem K: Deadline
    Mutual Training for Wannafly Union #8 D
    紫书第三章训练1 E
  • 原文地址:https://www.cnblogs.com/stacks/p/8092734.html
Copyright © 2011-2022 走看看