mysql已设置独立表空间模式
innodb_file_per_table=1
XtraBackup的功能之一 “部分备份(partial backups)”,即让用户可以备份指定的表或数据库。要注意的是:你希望备份的表必须是在独立的表空间中,即该表在创建以前,你的MySQL开启了innodb_file_per_table设置
独立表空间:
优点:
- 每个表都有自已独立的表空间。
- 每个表的数据和索引都会存在自已的表空间中。
- 可以实现单表在不同的数据库中移动。
- 空间可以回收(除drop table操作处,表空不能自已回收)
- Drop table操作自动回收表空间,如果对于统计分析或是日值表,删除大量数据后可以通过:alter table TableName engine=innodb;回缩不用的空间。
- 对于使innodb-plugin的Innodb使用turncate table也会使空间收缩。
- 对于使用独立表空间的表,不管怎么删除,表空间的碎片不会太严重的影响性能,而且还有机会处理。
缺点:
- 单表增加过大,如超过100个G。
备份的时候建议把mysql库也备份
#使用--databases参数 用户既可以将所有要备份的数据库名和完整表名都写在一起,以空格分隔,也可以将数据库名、完整表名写在一个文件中,每行一个
#cat /data/sqlbak/dbfile
abc.xx1 #库名.表名
abc.xx2
abc.xx3
mysql #直接库名
开始创建部分备份
#innobackupex --user=root --password=xxx --socket=/tmp/mysql.sock --defaults-file=/opt/mysql/my.cnf --databases=/data/sqlbak/dbfile /data/sqlbak/
会生成2021-02-22_16-52-31 这样的文件夹
准备部分备份
innobackupex --apply-log --export 2021-02-22_16-52-31/
#在--apply-log的时候添加--export命令,把表空间保存为.exp文件,此时恢复的时候可以单独读取此表空间导出文件,然后就能正常对表进行操作了
最后恢复部分备份
迁移到新服务器或者本机
停止当前数据库服务 /etc/init.d/mysqld stop
删除或更改当前数据目录,新建数据库数据目录
rm -rf /data/mysql/data/*
cp -r 2021-02-22_16-52-31/* /data/mysql/data/
chown -R mysql:mysql /data/mysql/data/
然后需要重建数据库(如果之前已备份mysql库,重建后数据库的密码就是之前的,如果没有备份mysql库,重建后数据库密码需要重新生成 ./bin/mysqladmin -u root password 'aaa')
cd /opt/mysql
./scripts/mysql_install_db --user=mysql --datadir=/data/mysql/data
/etc/init.d/mysqld start
参考 https://www.percona.com/doc/percona-xtrabackup/2.2/innobackupex/partial_backups_innobackupex.html