xtrabackup备份部分表并恢复

/ 0评 / 0

mysql已设置独立表空间模式

innodb_file_per_table=1

XtraBackup的功能之一 “部分备份(partial backups)”,即让用户可以备份指定的表或数据库。要注意的是:你希望备份的表必须是在独立的表空间中,即该表在创建以前,你的MySQL开启了innodb_file_per_table设置

独立表空间:

优点:

缺点:

 

备份的时候建议把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

发表评论

邮箱地址不会被公开。 必填项已用*标注