innobackupex部分备份

需求:

ABC三个数据库都在同一个实例1上,现在要备份A数据库到实例2上相同A数据库上(实例1和实例2的A数据库表结构是一样的,如果实例2上没有这些表,可以从实例1上导入)

参考资料

https://www.percona.com/doc/percona-xtrabackup/2.2/innobackupex/partial_backups_innobackupex.html

http://blog.sina.com.cn/s/blog_4b97332d0102yifh.html

前提:必须启用innodb_file_per_table选项(mysql5.6默认开启,可以通过show variables like '%per_table%';查看),即每张表保存为一个独立的文件。同时,其也不支持--stream选项,即不支持将数据通过管道传输给其它程序进行处理。

创建部分备份的方式有三种:正则表达式(--include), 枚举表文件(--tables-file)和列出要备份的数据库(--databases)。

可以参考官网,这里我们用--databases,如果有多个数据库空格隔开

innobackupex --defaults-file=/etc/3306.cnf --user=root --password=`cat /etc/sqlpass` --host=127.0.0.1 --port=3306 --slave-info /data/backup --databases="ly2_base"

prepare部分备份的过程类似于导出表的过程,要使用--export选项进行

innobackupex --apply-log --export /data/backup/2018-*

导出表名

mysql -uroot -p`cat /etc/sqlpass3306` -S /data/3306/mysql.sock ly -e "show tables\G;"|grep Tables|awk '{print $2}' > t.txt

毁掉表空间

for i in `cat t.txt`
do
/usr/bin/mysql -uroot -p`cat /etc/sqlpass3306` -S /data/3306/mysql.sock ly2_base -e "alter table $i discard tablespace;"
done

同步到实例2的A数据库上

rsync -av 2018-04-26_09-15-14/ly2_base/*.exp rsync://10.0.1.1/gen/data/mysql/ly2_base/
rsync -av 2018-04-26_09-15-14/ly2_base/*.ibd rsync://10.0.1.1/gen/data/mysql/ly2_base/
rsync -av 2018-04-26_09-15-14/ly2_base/*.cfg rsync://10.0.1.1/gen/data/mysql/ly2_base/

导入表空间

for i in `cat t.txt`
do
/usr/bin/mysql -uroot -p`cat /etc/sqlpass3306` -S /data/3306/mysql.sock ly2_base -e "alter table $i import tablespace;"
done

MyISAM表空间迁移
1. flush table with read lock
2. 直接复制数据文件和表结构文件

猜你喜欢

转载自my.oschina.net/longquan/blog/1801181