ITPub博客

首页 > 数据库 > 数据库开发技术 > XtraBackup工具详解 Part 10 使用innobackupex对数据库进行部分备份(指定表或数据库)

XtraBackup工具详解 Part 10 使用innobackupex对数据库进行部分备份(指定表或数据库)

原创 数据库开发技术 作者:ibsbforever 时间:2019-11-12 21:27:00 0 删除 编辑

 

往期专题请查看
这是一个坚持Oracle,Python,MySQL原创内容的公众号


实验环境

此次实验的环境如下

  • MySQL 5.7.26

  • Redhat 6.10

  • 操作系统账号:mysql

  • 数据库备份账号:backup

xtrabackup 同样支持部分备份,即可以备份指定的表和数据库

单独备份表的话需要表在独立的表空间里面,即配置了innodb_file_per_table参数

关于还原部分备份,只有一个注意点,即不能使用传统的prepare和copy back命令,需要使用export和import的形式,这个在后面还原做介绍

1. 备份命令

1.1 首先新建备份账号

mysql> CREATE USER 'backup'@'localhost' IDENTIFIED BY '123456'; 

mysql>
 GRANT RELOAD, LOCK TABLES, PROCESS, REPLICATION CLIENT ON *.* TO 'backup'@'localhost'; 

mysql>
 FLUSH PRIVILEGES;

1.2 建立备份目录

shell>mkdir -p /oradata/data/mysql/xtra

注意 mysql用户需要有读写权限,并且该目录需要为空,否则备份失败

1.3 开始备份

我们有三种方法对数据库进行部分备份

innobackupex --include

下面命令表示单独备份test数据库下的innodb_table表

可以跟正则表达式,如^等

shell> innobackupex  -S /oradata/data/mysql/data/mysql.sock --user=backup --password=123456   --include='test.innodb_table'  /oradata/data/mysql/xtra

必须是databasename.tablename这种形式

备份完成后可以看到在/oradata/data/mysql/xtra目录下新建了以日期命名的目录,而且只会备份和表相关的数据文件

该命令实际上会调用xtrabackup --tables 指定进行备份

不包含该表的数据库的目录不会建立,这里官方文档说不包含该表的数据目录也会建立,实际并没有

可以看到test目录下只有innodb_table相关的数据文件

innobackupex --tables-file

下面命令会读取一个文件,该文件里面有需要备份的表,每个表换行,以databasename.tablename这种形式

shell> echo "test.innodb_table" >> /tmp/tables.txt
shell> echo "yearning.core_accounts" >> /tmp/tables.txt
shell> innobackupex  -S /oradata/data/mysql/data/mysql.sock --user=backup --password=123456   --tables-file=/tmp/tables.txt   /oradata/data/mysql/xtra

备份完成后可以看到在/oradata/data/mysql/xtra目录下新建了以日期命名的目录,而且只会备份和文件中表相关的数据文件

该命令实际上会调用--tables-file指定进行备份,不包含该表的数据库的目录不会建立


可以看到只备份了相关数据库的相关数据文件

--databases

该命令可以用来备份指定的数据库或者表,以空格隔开

shell> innobackupex  -S /oradata/data/mysql/data/mysql.sock --user=backup --password=123456   --databases="test yearning.core_accounts" /oradata/data/mysql/xtra

备份完成后可以看到在/oradata/data/mysql/xtra目录下新建了以日期命名的目录,而且只会备份和文件中表相关的数据文件

不包含该表的数据库的目录不会建立


可以看到只备份了相关数据库的相关数据文件

2. 备份过程分析

接下来分析下其备份的过程,从输出的日志上来看

以第三种方法的输出来举例

2.1 命令提示部分

上图首先打印出innobackupex可以用的一些参数

并提示说在结束时检查是否备份成功,需要在最后有"completed OK"字样

2.2 连接数据库


然后是连接数据库,进入数据文件目录检查参数,之后开始备份

2.3 备份系统及undo表空间


这部分首先根据命令的条件跳过一些数据库

这部分首先列出数据库中有哪些表空间

  • 系统表空间(ibdata)

  • undo表空间(undo)

  • 用户表空间(innodb_file_per_table开启后每张表和表空间一一对应)

首先拷贝系统表空间文件然后是unod表空间文件,最后是innodb表文件

如果备份时有数据变化,可以看到innobackupex一直在扫描redo 日志文件以反映数据的变化

2.4 备份innodb表数据

可以看到正在拷贝innodb表的文件

如果备份时有数据变化,可以看到innobackupex一直在扫描redo 日志文件以反映数据的变化

2.5 备份非innodb表数据

可以看到在拷贝数据文件时先执行下面语句进行锁表,不允许用户DML操作

  • FLUSH NO_WRITE_TO_BINLOG TABLES

  • FLUSH TABLES WITH READ LOCK

之后在非InnoDB表拷贝完之后写信息至xtrabackup_binlog_info文件

该文件后续说明

最后记录最终的LSN号

2.6 完成备份

之后解除锁表,拷贝ib_buffer_pool文件

记录binlog位置信息

写信息至backup-my.cnf及xtrabackup_info

最后拷贝在备份期间变化的redo日志

3. 生成文件说明

通过上面我们看到除了拷贝数据文件外还生成了一些文件

下面我们一一说明

3.1 backup-my.cnf


包含了备份数据库如下信息

  • innodb的一些配置信息

  • 数据库的server ID

  • redo log 的版本

  • 数据库服务器的uuid

  • master key id(安全相关)

3.2 xtrabackup_binlog_info

其记录了备份完成时binlog的位置及GTID信息

用于复制的搭建

3.3 xtrabackup_checkpoints

该文件对于后续增量备份有用

该文件有如下信息

  • 备份类型:全备

  • 开始LSN:0

  • 最后检查点LSN:2926167

  • 最后拷贝的LSN:2926176

  • 行COMPACT存储:否

可以看到to_lsn和last_lsn不同 说明在备份过程中有DML操作

to_last用于增量备份的起点

last_scn用于最后恢复的位置

这些后面介绍

3.4 xtrabackup_info

该文件包含一些备份的信息就不一一介绍了

4. 参考资料

本专题所有内容翻译子Percona XtraBackup的官方文档

可通过如下链接下载

http:///mysql/xtrabackup/tutorial1



点击阅读原文获得更好的阅读体验,推荐在PC端阅读

也可在公众站内搜索中回复 xtrabackup 搜索相关内容

或直接打开个人网页搜索


http://


往期专题包括:


  • Python 自动化运维

  • MySQL  安装

  • mysqldump命令详解

  • mysqlbinlog命令详解

  • xtrabackup工具详解

  • 打造属于自己的监控系统

  • Python爬虫基础

  • Oracle awr报告全解析

  • Oracle ASM全解析

  • Oracle Data Guard全解析

  • Oracle ClusterWare全解析

  • Oracle常见参数解析

  • Oracle常见故障处理

  • Oracle SQL优化案例


觉得文章不错的欢迎关注,转发,收藏,点赞~

原文作者:宅必备;如有侵权,请联系管理员删除。

请登录后发表评论 登录
全部评论
Oracle,MySQL DBA,Python自动化运维

注册时间:2019-01-29

  • 博文量
    245
  • 访问量
    243882