centos环境下使用percona-xtrabackup对mysql5.6数据库innodb和myisam进行快速备份及恢复...
生活随笔
收集整理的這篇文章主要介紹了
centos环境下使用percona-xtrabackup对mysql5.6数据库innodb和myisam进行快速备份及恢复...
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
centos環境下使用percona-xtrabackup對mysql5.6數據庫innodb和myisam進行快速備份及恢復
有時候我們會碰到這樣的業務場景:
1.將大的數據庫恢復到本地進行業務測試
2.數據庫性能碰到了瓶頸需要做基于主從復制的讀寫分離
這樣我們就需要對源數據庫進行備份,并恢復到目標服務器中
如果源數據庫全部是myisam數據庫那我們可以直接通過拷貝的方式進行數據恢復,這種情況速度取決于磁盤的IO能力,是比較快速的一種方式
如果源數據庫是innodb引擎或者myisam都有,此時
主要的思路主要有兩個:
1.通過mysql自帶的工具mysqldump進行邏輯備份和恢復,這樣可以節省磁盤空間,但是速度很慢(如果數據量很大,這樣執行sql語句的方式恢復將不可接受)
2.通過第三方工具percona-xtrabackup進行恢復
Xtrabackup是一個對InnoDB做數據備份的工具,支持在線熱備份(備份時不影響數據讀寫),是商業備份工具InnoDB Hotbackup的一個很好的替代品。 Xtrabackup有兩個主要的工具:xtrabackup、innobackupex xtrabackup只能備份InnoDB和XtraDB兩種數據表,支持在線熱備份,不會鎖表 innobackupex則封裝了xtrabackup,同時可以備份MyISAM數據表,如果你的數據庫里有innodb和myisam存儲引擎,只能使用innobackupex備份
準備好服務器
1.在原服務器和目標服務器上都需要安裝percona-xtrabackup(建議mysql通過源碼安裝否則percona依賴的mysql-lib版本可能和高版本mysql沖突)
下載好rpm包:
percona-toolkit-2.2.4-1.noarch.rpm
percona-xtrabackup-2.1.8-733.rhel6.x86_64.rpm
# yum安裝,自動解決依賴關系
yum localinstall percona-*.rpm
2.完整備份制定數據庫
備份指定庫yunva
/usr/bin/innobackupex --defaults-file=/etc/my.cnf --user=root --password=root --databases="yunva" /data/ >> /data/backup.log 2>&1
3.執行數據庫事物一致性
innobackupex --apply-log /data/2016-11-11_16-03-44
一般情況下,在備份完成后,數據尚且不能用于恢復操作,因為備份的數據中可能會包含尚未提交的事務或已經提交但尚未同步至數據文件中的事務。因此,此時數據文件仍處理不一致狀態?!皽蕚洹钡闹饕饔谜峭ㄟ^回滾未提交的事務及同步已經提交的事務至數據文件也使得數據文件處于一致性狀態。
如果執行正確,其最后輸出的幾行信息通常如下:
xtrabackup: starting shutdown with innodb_fast_shutdown = 1
161110 15:39:34 ?InnoDB: Starting shutdown...
161110 15:39:38 ?InnoDB: Shutdown completed; log sequence number 7308344844
161110 15:39:38 ?innobackupex: completed OK!
4.恢復yunva數據庫:
停用目標機器3.17的mysql服務并刪除ibdata1、ib_logfile0、ib_logfile1,使用備份替換
service mysqld stop
# rm -f /data/mydata/ibdata1?
# rm -f /data/mydata/ib_logfile0
# rm -f /data/mydata/ib_logfile1
將數據拷貝到要恢復的服務器3.17上:
chown -R mysql.mysql /data/mydata
重新啟動mysql服務器,測試驗證數據發現數目對得上
select count(1) from tbl_user_app_20160427
8693860
二、全量恢復實驗:
1.全量備份192.168.3.16數據庫,生成了2016-11-10_15-14-22目錄
innobackupex --user=root --password=root /data
2.將事物提交
innobackupex --apply-log 2016-11-10_15-14-22
3.拷貝到3.17中
# scp -r 2016-11-10_15-14-22 192.168.3.17:/data
4.在3.17中修改mysql的權限
chown -R mysq.mysql /data/2016-11-10_15-14-22
并且修改3.17的my.cnf文件
datadir = /data/2016-11-10_15-14-22
重新啟動mysql服務(如果先前沒有及時關閉,需要kill -9 pid強行結束mysql服務)
測試是ok的,和3.16的數據庫結構完全一致
說明復制了一份完全一樣的mysql到目標服務器(包括mysql的user/權限等數據表)
查詢了3.16源數據庫和3.17目標數據庫yunva中的tbl_user_app_20160427表,數據條目一致
mysql> select count(1) from ?tbl_user_app_20160427;
+----------+
| count(1) |
+----------+
| ?8693860 |
+----------+
1 row in set (8 min 48.85 sec)
-------------------------------------------------------------------------------
以下是摘抄的其他網文,通過腳本自動備份和恢復的方式,供參考:
安裝配置Xtrabackup
先看看如何安裝Xtrabackup,最簡單的安裝方式是使用RPM包,不過想使用源代碼方式安裝的話,其安裝方式有點古怪,因為它采用的在MySQL源代碼上打補丁構建的方式安裝的。這里使用二進制包的安裝方式,相對比較靈活。
Shell> mkdir /usr/local/xtrabackup
Shell> tar -zxvf xtrabackup-1.6.tar.gz –C /usr/local/xtrabackup
Shell>cd /usr/local/xtrabackup/bin
Shell>ln –s innobackupex-1.5.1 innobackupex
配置環境變量:
Shell>export PATH=$PATH:/usr/local/xtrabackup/bin
希望永久生效的話,可以加到
echo "export PATH=$PATH:/usr/local/xtrabackup/bin" >> /etc/profile
source /etc/profile
修改mysql配置文件:
Shell> vi /etc/my.cnf
添加或修改:datadir =/usr/local/mysql/var(數據庫目錄)
特別注意:default_table_type = InnoDB(必須改,否則進行增量備份的時候不成功)
經過幾天的測試,文檔終于可以與大家分享了。使用Xtrabackup能夠非??焖俚貍浞菖c恢復mysql數據庫,是mysql dba的首選。以下是線上用的簡單腳本
#!/bin/bash
USER=root
PASSWORD=123456
date > /data/scripts/backup.log
echo "begin backup-------------------------------" >> /data/scripts/backup.log
find /data/mysql/backups -mtime +7 |xargs rm -rf
/usr/bin/innobackupex --defaults-file=/opt/mysql5/my.cnf --user=$USER --password=$PASSWORD --databases="test1 test2" /data/mysql/backups >> /data/scripts/backup.log 2>&1
echo "end backup-------------------------------" >> /data/scripts/backup.log
date >> /data/scripts/backup.log
mail -s "backup Passport report" "localhost@localhost" < /data/scripts/backup.log
exit 0
以下是恢復腳本:
#!/bin/bash
USER=root
PASSWORD=123456
/etc/init.d/mysql stop
/usr/bin/innobackupex-1.5.1 --apply-log --defaults-file=/opt/mysql5/my.cnf --user=$USER --password=$PASSWORD /data/mysql/backups/passportdb/`date +%Y-%m-%d`
rm -rf /opt/mysql5/var/test1
rm -rf /opt/mysql5/var/test2
rm -f /opt/mysql5/var/ibdata1
rm -f /opt/mysql5/var/ib_logfile0
rm -f /opt/mysql5/var/ib_logfile1
cd /data/mysql/backups
tar zcvf `date +%Y-%m-%d`.tgz ?`date +%Y-%m-%d`
rm -rf `date -d -30day +%Y-%m-%d`.tgz
cp -r /data/mysql/backups/`date +%Y-%m-%d`/ib* /opt/mysql5/var/
cp -r /data/mysql/backups/`date +%Y-%m-%d`/test1 /opt/mysql5/var/
cp -r /data/mysql/backups/`date +%Y-%m-%d`/test2 /opt/mysql5/var/
rm -rf /data/mysql/backups/`date +%Y-%m-%d`/*
chown -R mysql.mysql /opt/mysql5/var/test1
chown -R mysql.mysql /opt/mysql5/var/test2
chown mysql.mysql /opt/mysql5/var/ib*
/etc/init.d/mysql start
恢復的時候執行完/usr/bin/innobackupex-1.5.1 --apply-log后,直接拷貝就可以了,不用使用/usr/bin/innobackupex-1.5.1 --copy-back命令。如果使用/usr/bin/innobackupex-1.5.1 --copy-back命令后,會報Original data directory is not empty! at /usr/local/xtrabackup/bin/innobackupex line 538.恢復的目錄必須為空。經查官網,這是xtrabackup的一個BUG。
innobackupex did not check that MySQL datadir was empty before –copy-back was run. With this bug fix, innobackupex will now error out of the –copy-back operation if the destination is not empty, avoiding potential data loss or a strang combination of a restored backup and previous data. Bug Fixed: #737569 (Valentine Gostev)
********************************************************************
# innobackupex --copy-back /data/2016-11-10_15-14-22
InnoDB Backup Utility v1.5.1-xtrabackup; Copyright 2003, 2009 Innobase Oy
and Percona LLC and/or its affiliates 2009-2013. ?All Rights Reserved.
This software is published under
the GNU GENERAL PUBLIC LICENSE Version 2, June 1991.
Get the latest version of Percona XtraBackup, documentation, and help resources:
http://www.percona.com/xb/p
IMPORTANT: Please check that the copy-back run completes successfully.
? ? ? ? ? ?At the end of a successful copy-back run innobackupex
? ? ? ? ? ?prints "completed OK!".
innobackupex: Error: Original data directory '/data/mydata' is not empty! at /usr/bin/innobackupex line 2113.
********************************************************************
網上有好多文章恢復使用
/usr/bin/innobackupex-1.5.1 --apply-log 然后
/usr/bin/innobackupex-1.5.1 --copy-back,如果目錄非空則會報錯
有時候我們會碰到這樣的業務場景:
1.將大的數據庫恢復到本地進行業務測試
2.數據庫性能碰到了瓶頸需要做基于主從復制的讀寫分離
這樣我們就需要對源數據庫進行備份,并恢復到目標服務器中
如果源數據庫全部是myisam數據庫那我們可以直接通過拷貝的方式進行數據恢復,這種情況速度取決于磁盤的IO能力,是比較快速的一種方式
如果源數據庫是innodb引擎或者myisam都有,此時
主要的思路主要有兩個:
1.通過mysql自帶的工具mysqldump進行邏輯備份和恢復,這樣可以節省磁盤空間,但是速度很慢(如果數據量很大,這樣執行sql語句的方式恢復將不可接受)
2.通過第三方工具percona-xtrabackup進行恢復
Xtrabackup是一個對InnoDB做數據備份的工具,支持在線熱備份(備份時不影響數據讀寫),是商業備份工具InnoDB Hotbackup的一個很好的替代品。 Xtrabackup有兩個主要的工具:xtrabackup、innobackupex xtrabackup只能備份InnoDB和XtraDB兩種數據表,支持在線熱備份,不會鎖表 innobackupex則封裝了xtrabackup,同時可以備份MyISAM數據表,如果你的數據庫里有innodb和myisam存儲引擎,只能使用innobackupex備份
準備好服務器
1.在原服務器和目標服務器上都需要安裝percona-xtrabackup(建議mysql通過源碼安裝否則percona依賴的mysql-lib版本可能和高版本mysql沖突)
下載好rpm包:
percona-toolkit-2.2.4-1.noarch.rpm
percona-xtrabackup-2.1.8-733.rhel6.x86_64.rpm
# yum安裝,自動解決依賴關系
yum localinstall percona-*.rpm
2.完整備份制定數據庫
備份指定庫yunva
/usr/bin/innobackupex --defaults-file=/etc/my.cnf --user=root --password=root --databases="yunva" /data/ >> /data/backup.log 2>&1
3.執行數據庫事物一致性
innobackupex --apply-log /data/2016-11-11_16-03-44
一般情況下,在備份完成后,數據尚且不能用于恢復操作,因為備份的數據中可能會包含尚未提交的事務或已經提交但尚未同步至數據文件中的事務。因此,此時數據文件仍處理不一致狀態?!皽蕚洹钡闹饕饔谜峭ㄟ^回滾未提交的事務及同步已經提交的事務至數據文件也使得數據文件處于一致性狀態。
如果執行正確,其最后輸出的幾行信息通常如下:
xtrabackup: starting shutdown with innodb_fast_shutdown = 1
161110 15:39:34 ?InnoDB: Starting shutdown...
161110 15:39:38 ?InnoDB: Shutdown completed; log sequence number 7308344844
161110 15:39:38 ?innobackupex: completed OK!
4.恢復yunva數據庫:
停用目標機器3.17的mysql服務并刪除ibdata1、ib_logfile0、ib_logfile1,使用備份替換
service mysqld stop
# rm -f /data/mydata/ibdata1?
# rm -f /data/mydata/ib_logfile0
# rm -f /data/mydata/ib_logfile1
將數據拷貝到要恢復的服務器3.17上:
scp -r /data/2016-11-11_16-03-44 192.168.3.17:/data/
mv?/data/2016-11-11_16-03-44/ibdata1?/data/mydata/
mv?/data/2016-11-11_16-03-44/ib_logfile0 /data/mydata/
mv?/data/2016-11-11_16-03-44/ib_logfile1 /data/mydata
mv?/data/2016-11-11_16-03-44/yunva /data/mydata
chown -R mysql.mysql /data/mydata
重新啟動mysql服務器,測試驗證數據發現數目對得上
select count(1) from tbl_user_app_20160427
8693860
二、全量恢復實驗:
1.全量備份192.168.3.16數據庫,生成了2016-11-10_15-14-22目錄
innobackupex --user=root --password=root /data
2.將事物提交
innobackupex --apply-log 2016-11-10_15-14-22
3.拷貝到3.17中
# scp -r 2016-11-10_15-14-22 192.168.3.17:/data
4.在3.17中修改mysql的權限
chown -R mysq.mysql /data/2016-11-10_15-14-22
并且修改3.17的my.cnf文件
datadir = /data/2016-11-10_15-14-22
重新啟動mysql服務(如果先前沒有及時關閉,需要kill -9 pid強行結束mysql服務)
測試是ok的,和3.16的數據庫結構完全一致
說明復制了一份完全一樣的mysql到目標服務器(包括mysql的user/權限等數據表)
查詢了3.16源數據庫和3.17目標數據庫yunva中的tbl_user_app_20160427表,數據條目一致
mysql> select count(1) from ?tbl_user_app_20160427;
+----------+
| count(1) |
+----------+
| ?8693860 |
+----------+
1 row in set (8 min 48.85 sec)
-------------------------------------------------------------------------------
以下是摘抄的其他網文,通過腳本自動備份和恢復的方式,供參考:
安裝配置Xtrabackup
先看看如何安裝Xtrabackup,最簡單的安裝方式是使用RPM包,不過想使用源代碼方式安裝的話,其安裝方式有點古怪,因為它采用的在MySQL源代碼上打補丁構建的方式安裝的。這里使用二進制包的安裝方式,相對比較靈活。
Shell> mkdir /usr/local/xtrabackup
Shell> tar -zxvf xtrabackup-1.6.tar.gz –C /usr/local/xtrabackup
Shell>cd /usr/local/xtrabackup/bin
Shell>ln –s innobackupex-1.5.1 innobackupex
配置環境變量:
Shell>export PATH=$PATH:/usr/local/xtrabackup/bin
希望永久生效的話,可以加到
echo "export PATH=$PATH:/usr/local/xtrabackup/bin" >> /etc/profile
source /etc/profile
修改mysql配置文件:
Shell> vi /etc/my.cnf
添加或修改:datadir =/usr/local/mysql/var(數據庫目錄)
特別注意:default_table_type = InnoDB(必須改,否則進行增量備份的時候不成功)
經過幾天的測試,文檔終于可以與大家分享了。使用Xtrabackup能夠非??焖俚貍浞菖c恢復mysql數據庫,是mysql dba的首選。以下是線上用的簡單腳本
#!/bin/bash
USER=root
PASSWORD=123456
date > /data/scripts/backup.log
echo "begin backup-------------------------------" >> /data/scripts/backup.log
find /data/mysql/backups -mtime +7 |xargs rm -rf
/usr/bin/innobackupex --defaults-file=/opt/mysql5/my.cnf --user=$USER --password=$PASSWORD --databases="test1 test2" /data/mysql/backups >> /data/scripts/backup.log 2>&1
echo "end backup-------------------------------" >> /data/scripts/backup.log
date >> /data/scripts/backup.log
mail -s "backup Passport report" "localhost@localhost" < /data/scripts/backup.log
exit 0
以下是恢復腳本:
#!/bin/bash
USER=root
PASSWORD=123456
/etc/init.d/mysql stop
/usr/bin/innobackupex-1.5.1 --apply-log --defaults-file=/opt/mysql5/my.cnf --user=$USER --password=$PASSWORD /data/mysql/backups/passportdb/`date +%Y-%m-%d`
rm -rf /opt/mysql5/var/test1
rm -rf /opt/mysql5/var/test2
rm -f /opt/mysql5/var/ibdata1
rm -f /opt/mysql5/var/ib_logfile0
rm -f /opt/mysql5/var/ib_logfile1
cd /data/mysql/backups
tar zcvf `date +%Y-%m-%d`.tgz ?`date +%Y-%m-%d`
rm -rf `date -d -30day +%Y-%m-%d`.tgz
cp -r /data/mysql/backups/`date +%Y-%m-%d`/ib* /opt/mysql5/var/
cp -r /data/mysql/backups/`date +%Y-%m-%d`/test1 /opt/mysql5/var/
cp -r /data/mysql/backups/`date +%Y-%m-%d`/test2 /opt/mysql5/var/
rm -rf /data/mysql/backups/`date +%Y-%m-%d`/*
chown -R mysql.mysql /opt/mysql5/var/test1
chown -R mysql.mysql /opt/mysql5/var/test2
chown mysql.mysql /opt/mysql5/var/ib*
/etc/init.d/mysql start
恢復的時候執行完/usr/bin/innobackupex-1.5.1 --apply-log后,直接拷貝就可以了,不用使用/usr/bin/innobackupex-1.5.1 --copy-back命令。如果使用/usr/bin/innobackupex-1.5.1 --copy-back命令后,會報Original data directory is not empty! at /usr/local/xtrabackup/bin/innobackupex line 538.恢復的目錄必須為空。經查官網,這是xtrabackup的一個BUG。
innobackupex did not check that MySQL datadir was empty before –copy-back was run. With this bug fix, innobackupex will now error out of the –copy-back operation if the destination is not empty, avoiding potential data loss or a strang combination of a restored backup and previous data. Bug Fixed: #737569 (Valentine Gostev)
********************************************************************
# innobackupex --copy-back /data/2016-11-10_15-14-22
InnoDB Backup Utility v1.5.1-xtrabackup; Copyright 2003, 2009 Innobase Oy
and Percona LLC and/or its affiliates 2009-2013. ?All Rights Reserved.
This software is published under
the GNU GENERAL PUBLIC LICENSE Version 2, June 1991.
Get the latest version of Percona XtraBackup, documentation, and help resources:
http://www.percona.com/xb/p
IMPORTANT: Please check that the copy-back run completes successfully.
? ? ? ? ? ?At the end of a successful copy-back run innobackupex
? ? ? ? ? ?prints "completed OK!".
innobackupex: Error: Original data directory '/data/mydata' is not empty! at /usr/bin/innobackupex line 2113.
********************************************************************
網上有好多文章恢復使用
/usr/bin/innobackupex-1.5.1 --apply-log 然后
/usr/bin/innobackupex-1.5.1 --copy-back,如果目錄非空則會報錯
轉載于:https://www.cnblogs.com/reblue520/p/6239671.html
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的centos环境下使用percona-xtrabackup对mysql5.6数据库innodb和myisam进行快速备份及恢复...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: OpenSSL 之 RSA 相关命令学习
- 下一篇: mysql通过binlog日志来恢复数据