此次实验的环境如下
xtrabackup 同样支持部分备份,即可以备份指定的表和数据库
单独备份表的话需要表在独立的表空间里面,即配置了innodb_file_per_table参数
关于还原部分备份,只有一个注意点,即不能使用传统的prepare和copy back命令,需要使用export和import的形式,这个在后面还原做介绍
mysql> CREATE USER 'backup'@'localhost' IDENTIFIED BY '123456';
mysql> GRANT RELOAD, LOCK TABLES, PROCESS, REPLICATION CLIENT ON *.* TO 'backup'@'localhost';
mysql> FLUSH PRIVILEGES;
shell>mkdir -p /oradata/data/mysql/xtra
注意 mysql用户需要有读写权限,并且该目录需要为空,否则备份失败
我们有三种方法对数据库进行部分备份
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目录下新建了以日期命名的目录,而且只会备份和文件中表相关的数据文件
不包含该表的数据库的目录不会建立
可以看到只备份了相关数据库的相关数据文件
接下来分析下其备份的过程,从输出的日志上来看
以第三种方法的输出来举例
上图首先打印出innobackupex可以用的一些参数
并提示说在结束时检查是否备份成功,需要在最后有"completed OK"字样
然后是连接数据库,进入数据文件目录检查参数,之后开始备份
这部分首先根据命令的条件跳过一些数据库
这部分首先列出数据库中有哪些表空间
首先拷贝系统表空间文件然后是unod表空间文件,最后是innodb表文件
如果备份时有数据变化,可以看到innobackupex一直在扫描redo 日志文件以反映数据的变化
可以看到正在拷贝innodb表的文件
如果备份时有数据变化,可以看到innobackupex一直在扫描redo 日志文件以反映数据的变化
可以看到在拷贝数据文件时先执行下面语句进行锁表,不允许用户DML操作
之后在非InnoDB表拷贝完之后写信息至xtrabackup_binlog_info文件
该文件后续说明
最后记录最终的LSN号
之后解除锁表,拷贝ib_buffer_pool文件
记录binlog位置信息
写信息至backup-my.cnf及xtrabackup_info
最后拷贝在备份期间变化的redo日志
通过上面我们看到除了拷贝数据文件外还生成了一些文件
下面我们一一说明
包含了备份数据库如下信息
其记录了备份完成时binlog的位置及GTID信息
用于复制的搭建
该文件对于后续增量备份有用
该文件有如下信息
可以看到to_lsn和last_lsn不同 说明在备份过程中有DML操作
to_last用于增量备份的起点
last_scn用于最后恢复的位置
这些后面介绍
该文件包含一些备份的信息就不一一介绍了
本专题所有内容翻译子Percona XtraBackup的官方文档
可通过如下链接下载