參考 https://qizhanming.com/blog/2017/05/10/install-percona-xtrabackup-on-centos-7
https://my.oschina.net/nox/blog/1498936
機(jī)器DB A 是正式數(shù)據(jù)庫(kù)处渣,數(shù)據(jù)轉(zhuǎn)移到機(jī)器DB T,供測(cè)試用。 環(huán)境都是
centos7 和 mysql5.6
工具
docker 和 innobackupex 安裝過(guò)程不重要南吮,忽略
第一步備份DB A迟郎,my.cnf會(huì)告訴innobackupex 從datadir目錄拷貝數(shù)據(jù),/var/lib/mydata是備份目錄
innobackupex --defaults-file=/etc/my.cnf --user=XXX --password=XXX /var/lib/mydata
顯示completed OK!后审编,/var/lib/mydata會(huì)有一個(gè)帶時(shí)間的目錄剪决,里面就是該時(shí)間點(diǎn)的數(shù)據(jù), 加上參數(shù)--no-timestamp就不會(huì)創(chuàng)建這個(gè)時(shí)間目錄了蔗候。
第二步保證數(shù)據(jù)完整性怒允,300G的數(shù)據(jù)第一步需要1個(gè)多小時(shí),期間沒(méi)錄入備份中的事務(wù)锈遥,需要手動(dòng)加上
innobackupex --defaults-file=/etc/my.cnf --apply-log --redo-only /var/lib/mydata/2018-06-26_18-06-31/
第三步在DB T纫事,安裝mysql,版本要一致所灸。文件級(jí)的數(shù)據(jù)丽惶,不同版本的mysql是讀取不了的,用docker最簡(jiǎn)單爬立。
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
第四步導(dǎo)入數(shù)據(jù)
把備份文件從DB A機(jī)器傳過(guò)來(lái)钾唬,期間會(huì)報(bào)目錄權(quán)限問(wèn)題,就著提示改下就行
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
在文件所在目錄執(zhí)行docker鏡像的編譯命令侠驯,構(gòu)建一個(gè)xtrabackup的鏡像
docker build -t nox/xtrabackup .
#/data/backup/2018-06-26_18-06-31是備份目錄抡秆,/data/mydata/待導(dǎo)入目錄,映射到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
#待導(dǎo)入的目錄必須清空
sudo rm -rf /data/mydata
sudo docker exec -it nox-xtrabackup innobackupex --copy-back /opt/master-data
顯示completed OK!后陵霉,發(fā)現(xiàn)mysql里已經(jīng)是正式數(shù)據(jù)了琅轧,無(wú)需重啟生效。
開(kāi)發(fā)迭代周期內(nèi)踊挠,開(kāi)發(fā)和測(cè)試會(huì)產(chǎn)生測(cè)試數(shù)據(jù)乍桂。下一個(gè)迭代又需要拋棄這些數(shù)據(jù),把最新的正式數(shù)據(jù)再導(dǎo)一份過(guò)來(lái)效床。這時(shí)候直接增量導(dǎo)入是不行的睹酌。全備份可以搞定,或者每個(gè)周期的新數(shù)據(jù)增量過(guò)來(lái)剩檀,把data dir清空憋沿,重新導(dǎo)入data。
后續(xù)的思路:
DB T先做一個(gè)不對(duì)外服務(wù)的從庫(kù)沪猴,把scp傳數(shù)據(jù)的過(guò)程省掉辐啄。因?yàn)閟cp會(huì)把內(nèi)網(wǎng)占掉,影響主從復(fù)制运嗜、負(fù)載均衡過(guò)來(lái)的內(nèi)網(wǎng)查詢 壶辜。只為數(shù)據(jù)遷移的從庫(kù),省心省力担租。