参考 https://qizhanming.com/blog/2017/05/10/install-percona-xtrabackup-on-centos-7
https://my.oschina.net/nox/blog/1498936
机器DB A 是正式数据库,数据转移到机器DB T,供测试用。 环境都是
centos7 和 mysql5.6
工具
docker 和 innobackupex 安装过程不重要,忽略
第一步备份DB A,my.cnf会告诉innobackupex 从datadir目录拷贝数据,/var/lib/mydata是备份目录
innobackupex --defaults-file=/etc/my.cnf --user=XXX --password=XXX /var/lib/mydata
显示completed OK!后,/var/lib/mydata会有一个带时间的目录,里面就是该时间点的数据, 加上参数--no-timestamp就不会创建这个时间目录了。
第二步保证数据完整性,300G的数据第一步需要1个多小时,期间没录入备份中的事务,需要手动加上
innobackupex --defaults-file=/etc/my.cnf --apply-log --redo-only /var/lib/mydata/2018-06-26_18-06-31/
第三步在DB T,安装mysql,版本要一致。文件级的数据,不同版本的mysql是读取不了的,用docker最简单。
sudo docker pull mysql:5.6
sudo docker run --name dbtest -v /data/mydata:/var/lib/mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.6
第四步导入数据
把备份文件从DB A机器传过来,期间会报目录权限问题,就着提示改下就行
scp -r cloud@DB A:/var/lib/mydata/2018-06-26_18-06-31/ /data/backup
docker安装xtrabackup, Dockerfile如下
FROM centos
RUN yum install -y http://www.percona.com/downloads/percona-release/redhat/0.1-4/percona-release-0.1-4.noarch.rpm
RUN yum install -y percona-xtrabackup-24
在文件所在目录执行docker镜像的编译命令,构建一个xtrabackup的镜像
docker build -t nox/xtrabackup .
#/data/backup/2018-06-26_18-06-31是备份目录,/data/mydata/待导入目录,映射到xtrabackup容器
sudo docker run --name nox-xtrabackup -d -i -t -v /data/backup/2018-06-26_18-06-31:/opt/master-data -v /data/mydata/:/var/lib/mysql nox/xtrabackup /bin/bash
#待导入的目录必须清空
sudo rm -rf /data/mydata
sudo docker exec -it nox-xtrabackup innobackupex --copy-back /opt/master-data
显示completed OK!后,发现mysql里已经是正式数据了,无需重启生效。
开发迭代周期内,开发和测试会产生测试数据。下一个迭代又需要抛弃这些数据,把最新的正式数据再导一份过来。这时候直接增量导入是不行的。全备份可以搞定,或者每个周期的新数据增量过来,把data dir清空,重新导入data。
后续的思路:
DB T先做一个不对外服务的从库,把scp传数据的过程省掉。因为scp会把内网占掉,影响主从复制、负载均衡过来的内网查询 。只为数据迁移的从库,省心省力。
网友评论