需求:
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. 直接复制数据文件和表结构文件