加入收藏 | 设为首页 | 会员中心 | 我要投稿 海南站长网 (https://www.0898zz.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

innobackupex部分表备份和恢复方法是什么

发布时间:2021-12-23 10:23:06 所属栏目:MySql教程 来源:互联网
导读:本篇内容主要讲解innobackupex部分表备份和恢复方法是什么,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习innobackupex部分表备份和恢复方法是什么吧! Percona XtraBackup的功能之一部分备份(partial backups
本篇内容主要讲解“innobackupex部分表备份和恢复方法是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“innobackupex部分表备份和恢复方法是什么”吧!
 
Percona XtraBackup的功能之一“部分备份(partial backups)”,即让用户可以备份指定的表或 数据库 。要注意的是:你希望备份的表必须是在独立的表空间中,即该表在创建以前,你的 MySQL 开启了innodb_file_per_table设置。
 
还一点要注意的是:不要将prepared backup备份的东西拷贝回去。部分备份使用的是导入表(importing the tables),而不是全库备份的--copy-back参数。
 
关于innobackupex可以实现部分表或者库的(增量)备份和恢复
 
部分备份共有三种方式,分别是:
 
1. 用正则表达式表示要备份的库名及表名(参数为--include);
 
2. 将要备份的表名或库名都写在一个文本文件中(参数为--tables-file)
 
3. 将要备份表名或库名完整的写在命令行或者文件中中(参数为:--databases)
 
方式一:使用--include参数
 
这种方式通过正则表达式来匹配数据库名和表名,你需要写完整的数据库名及表名,如果数据库有用户名密码请使用--user和--password指定相关信息。,格式如下:databasename.tablename。下面是一个例子:
 
[root@tool202 2018-12-01_20-39-31]# innobackupex --include='liuwenhe.liuwenhe'  /data/
 
上面的方式会和其他使用innobackupex命令的备份方式一样,创建一个时间戳命名的文件夹,不同的是,最终只包括那些正则表达式匹配的表(liuwenhe.liuwenhe)。
 
要注意的是,这个命令最后会传给xtrabackup --tables命令执行;
 
方式二:使用--tables-file参数
 
这种方式是将所有要备份的完整表名都写在一个文本文件中,每行一个完整表名,然后程序读取这个文本文件进行备份。完整表名即:databasename.tablename,如果需要备份某个库的全部表则可以写成databasename.*.需要注意的是文件中每行开头和结尾不能有空格!下面是一个例子:
 
[root@rongduan-renhang32 ~]# cat  name.txt
 
liuwenhe.liu
 
liuwenhe.he
 
liuhe.*
 
可以有需要的话使用下面命令去掉每行结尾的空格
 
[root@rongduan-renhang32 ~]#sed  -e 's/[ ]*$//g'  name.txt  >name1.txt
 
2.然后执行备份:
 
[root@rongduan-renhang32 ~]#  innobackupex  --user=root --password='V56788@1qaz' --port=3306 --tables-file=/root/name.txt   /data/
 
上面的方式会和其他使用innobackupex命令的备份方式一样,创建一个时间戳命名的文件夹,不同的是,最终只包括那些文件中指定的表名。
 
这个命令最后会传给xtrabackup --tables-file命令执行,而不是--tables,这个命令只会创建那些需要备份的数据库文件夹。
 
方式三:使用--databases参数
 
使用这种方式,用户既可以将所有要备份的数据库名和完整表名都写在一起,以空格分隔,也可以将数据库名、完整表名写在一个文件中,每行一个,需要注意的是如果需要备份整个mysql库,那么区别于--tables-file参数,直接写上库名字就可以了,.下面是一个例子:
 
[root@tool202 liuwenhe]#  innobackupex  --user=root --password='V56788@1qaz' --port=3306 --databases="liuwenhe.liuwenhe  mysql" /data
 
或者
 
[root@rongduan-renhang32 ~]# cat  name.txt
 
liuwenhe.liuwenhe
 
mysql            ###不用写成mysql.*区别于--tables-file参数!
 
可以有需要的话使用下面命令去掉每行结尾的空格
 
[root@rongduan-renhang32 ~]#sed  -e 's/[ ]*$//g'  name.txt  >name1.txt
 
2.然后执行备份:
 
[root@rongduan-renhang32 ~]#  innobackupex  --user=root --password='V56788@1qaz' --port=3306 --databases=/root/name.txt   /data/
 
上面的方式会和其他使用innobackupex命令的备份方式一样,创建一个时间戳命名的文件夹,最终结果将包括liuwenhe数据库中的liuwenhe表,以及整个完整的mysql数据库。
 
准备部分备份(Preparing Partial Backups)
 
执行preparing partial backups,使用--apply-log和--export参数,并包含上一步生成的时间戳文件夹,如下:
 
[root@tool202 2018-12-01_21-10-20]# innobackupex   --port=3306 --apply-log  --export  /data/liuwenhe/2018-12-01_21-11-07/
 
执行命令的时候,对于那些不需要备份的表,会出现表不存在的提示。不用担心,这是正常现象。
 
最终,记得观察下面的输出,已确定准备备份工作结束。
 
181201 21:15:50 completed OK!
 
恢复的操作:
 
1.先创建上需要恢复的表,注意表的存储行的格式要和源端一样,可以通过如下查看表的
 
root@localhost : liuwenhe 21:33:36>show  table  status like    'liuwenhe'G;
 
*************************** 1. row ***************************
 
           Name: liuwenhe
 
         Engine: InnoDB
 
        Version: 10
 
     Row_format: Compact
 
           Rows: 4
 
Avg_row_length: 4096
 
    Data_length: 16384
 
Max_data_length: 0
 
   Index_length: 0
 
      Data_free: 0
 
Auto_increment: NULL
 
    Create_time: 2018-12-01 19:43:48
 
    Update_time: NULL
 
     Check_time: NULL
 
      Collation: utf8_general_ci
 
       Checksum: NULL
 
Create_options: row_format=COMPACT
 
        Comment:
 
1 row in set (0.00 sec)
 
如果不一样可以通过如下方式修改:
 
root@localhost : liuwenhe 21:37:36>alter table  liuwenhe.liuwenhe Row_format=Compact;
 
Query OK, 0 rows affected (0.34 sec)
 
Records: 0  Duplicates: 0  Warnings: 0
 
注意:mysql5.6创建的表默认为 Row_format=Compact,而mysql5.7.18中默认是dynamic格式
 
通过参数innodb_default_row_format控制!!!
 
3.注意区别于oracle的offline表空间,mysql 中执行discard 之后,对应的表的.ibd文件就没有了
 
alter table liuwenhe.liuwenhe discard tablespace ;
 
4.然后copy备份的目录中的该表的.ibd文件到相应的目录下:
 
5.然后加载到表空间:
 
alter table liuwenhe.liuwenhe import tablespace ;
 
至此恢复工作完成!!!
 
总结:我们可以通过innobackupex来实现部分表的备份和增量备份和恢复,innodb的表是不可以直接copy表文件的方式来恢复的;也可以通过使用mysqlfrm工具来读取innobackupex备份中的某个表的表结构,用于先创建上表结构,然后再discad tablespace,copy表的.ibd文件,最后import来实现从全实例备份中来恢复个别的表!注意恢复个别表的前提是:开启了参数innodb_file_per_table,
 
mysqlfrm工具可以读取表结构,可以使用yum安装:yum install mysql-utilities -y
 
到此,相信大家对“innobackupex部分表备份和恢复方法是什么”有了更深的了解,不妨来实际操作一番吧!

(编辑:海南站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读