天天看點

mysql備份工具

               備份還原腳本及工具

1)Xtrabackup實作是實體備份,而且是實體熱備

目前主流的有兩個工具可以實作實體熱備:ibbackup和xtrabackup;ibbackup是商業軟體,需要授權,非常昂貴。而xtrabackup功能比ibbackup還要強大,但卻是開源的。

2)Xtrabackup提供了兩種指令行工具:

xtrabackup:專用于備份InnoDB和XtraDB引擎的資料;

innobackupex:這是一個perl腳本,在執行過程中會調用xtrabackup指令,這樣用該指令即可以實作備份InnoDB,也可以備份MyISAM引擎的對象。

二 示範步驟

首先 解壓安裝包

<a href="https://s5.51cto.com/wyfs02/M01/9B/77/wKioL1ljag3TCR2zAADpgCOaLAc658.png-wh_500x0-wm_3-wmp_4-s_3702938467.png" target="_blank"></a>

複制bin下的所有程式到/usr/bin

<a href="https://s2.51cto.com/wyfs02/M00/9B/78/wKiom1ljaimj7piCAAEPY5NnT_4034.png-wh_500x0-wm_3-wmp_4-s_1770430754.png" target="_blank"></a>

Xtrabackup中主要包含兩個工具:

xtrabackup:是用于熱備份innodb, xtradb表中資料的工具,支援線上熱備份,可以在不加鎖的情況下備份Innodb資料表,不過此工具不能操作Myisam引擎表;

innobackupex:是将xtrabackup進行封裝的perl腳本,能同時處理Innodb和Myisam,但在處理Myisam時需要加一個讀鎖。

3)安裝插件 使用yum

yum install perl-DBI perl-DBD-MySQL perl-Time-HiRes perl-IO-Socket-SSL perl-TermReadKey.x86_64 perl-Digest-MD5–y

<a href="https://s5.51cto.com/wyfs02/M01/9B/78/wKiom1ljaknS_CFlAACTk2GxKUo604.png-wh_500x0-wm_3-wmp_4-s_1800789837.png" target="_blank"></a>

方案一:xtrabackup完全備份+binlog增量備份

       建立備份目錄

<a href="https://s3.51cto.com/wyfs02/M02/9B/78/wKiom1ljanKRo9NpAAA9TyGdiKk076.png-wh_500x0-wm_3-wmp_4-s_122212852.png" target="_blank"></a>

完全備份

innobackupex --user=root --password=123456 /opt/mysqlbackup/full  出現OK 完成

注: --defaults-file=/etc/my.cnf 指定mysql的配置檔案my.cfg,如果指定則必須是第一參數。

<a href="https://s4.51cto.com/wyfs02/M00/9B/78/wKiom1ljaoKR0Td1AAD4exkjArE864.png-wh_500x0-wm_3-wmp_4-s_3591546110.png" target="_blank"></a>

備份資料庫會會在備份目錄下建立目前日期為名字的目錄存放

<a href="https://s2.51cto.com/wyfs02/M01/9B/78/wKiom1ljaqOCzSkxAAGnRryd4yQ259.png-wh_500x0-wm_3-wmp_4-s_2678390836.png" target="_blank"></a>

檔案說明

(1)xtrabackup_checkpoints ——備份類型(如完全或增量)、備份狀态(如是否已經為prepared狀态)和LSN(日志序列号)範圍資訊;

每個InnoDB頁(通常為16k大小)都會包含一個日志序列号 (2)xtrabackup_binlog_info —— mysql伺服器目前正在使用的二進制日志檔案及至備份這一刻為止二進制日志事件的位置。

(3)xtrabackup_binlog_pos_innodb ——二進制日志檔案及用于InnoDB或XtraDB表的二進制日志檔案的目前position。

(4)xtrabackup_binary ——備份中用到的xtrabackup的可執行檔案;

(5)backup-my.cnf ——備份指令用到的配置選項資訊;

在使用innobackupex進行備份時,還可以使用--no-timestamp選項來阻止指令自動建立一個以時間命名的目錄。

注意:備份資料庫的使用者需要具有相應權限,如果要使用一個最小權限的使用者進行備份,則可基于如下指令建立此類使用者:

<a href="https://s3.51cto.com/wyfs02/M01/9B/78/wKiom1lja6Gi7kHEAABd1v7aln0269.png-wh_500x0-wm_3-wmp_4-s_1903764790.png" target="_blank"></a>

<a href="https://s4.51cto.com/wyfs02/M01/9B/78/wKioL1lja6HjxlHCAACVdZdM_rk452.png-wh_500x0-wm_3-wmp_4-s_1837500055.png" target="_blank"></a>

 至此全備完全成功,然後向mysql某個庫插入幾條資料,然後進行增量備份對完全備份的後資料庫更改進行二進制日志增量備份:

檢視完全備份時binlog日志位置(position)

<a href="https://s2.51cto.com/wyfs02/M01/9B/78/wKioL1lja7zDKAEGAABhsKodGkc555.png-wh_500x0-wm_3-wmp_4-s_4103724672.png" target="_blank"></a>

模拟修改資料庫

<a href="https://s4.51cto.com/wyfs02/M02/9B/78/wKiom1lja92za93MAADuxaz22bU283.png-wh_500x0-wm_3-wmp_4-s_2516967524.png" target="_blank"></a>

增量備份二進制檔案

<a href="https://s4.51cto.com/wyfs02/M02/9B/78/wKiom1ljbBqjKrkcAABXx_pSz10257.png-wh_500x0-wm_3-wmp_4-s_840435778.png" target="_blank"></a>

2 還原資料庫二進制檔案

首先 模拟吧data檔案删除或者轉移,然後進行完全備份還原

innobakupex指令的--apply-log選項可用于實作上述功能。--apply-log指明是将日志應用到資料檔案上,完成之後将備份檔案中的資料恢複到資料庫中:

<a href="https://s1.51cto.com/wyfs02/M00/9B/78/wKiom1ljbCyTWunvAACQI4rApIc770.png-wh_500x0-wm_3-wmp_4-s_544066306.png" target="_blank"></a>

還原資料庫文法:

# innobackupex --copy-back /opt/mysqlbackup/full/2016-09-12_11-29-55/

這裡的--copy-back指明是進行資料恢複

。資料恢複完成之後,需要修改相關檔案的權限mysql資料庫才能正常啟動。

還原資料庫文法

<a href="https://s2.51cto.com/wyfs02/M01/9B/78/wKiom1ljbELAoJ0KAAEAj624ODE162.png-wh_500x0-wm_3-wmp_4-s_3820210386.png" target="_blank"></a>

data 已經成功還原  重新啟動mysql

<a href="https://s4.51cto.com/wyfs02/M00/9B/78/wKiom1ljbGbiEcPSAAHIV4tC_Bo491.png-wh_500x0-wm_3-wmp_4-s_2210115644.png" target="_blank"></a>

需要確定所有資料檔案屬主和屬組

<a href="https://s3.51cto.com/wyfs02/M02/9B/78/wKiom1ljbHaDib28AADILIuuKss636.png-wh_500x0-wm_3-wmp_4-s_2749769940.png" target="_blank"></a>

還原成功 但是增量備份還沒有成功

<a href="https://s1.51cto.com/wyfs02/M00/9B/78/wKioL1ljbIbD9Ic-AABwrGY3evg095.png-wh_500x0-wm_3-wmp_4-s_2680730154.png" target="_blank"></a>

為了防止還原時産生大量的二進制日志,在還原時可臨時關閉二進制日志後再還原:

mysql&gt; set sql_log_bin=0;

mysql&gt; source /opt/mysqlbackup/inc/2016-09-12.sql

還原成功 資料成功恢複

<a href="https://s4.51cto.com/wyfs02/M01/9B/78/wKiom1ljbJbAQttGAACUSbE4Y10495.png-wh_500x0-wm_3-wmp_4-s_3265102602.png" target="_blank"></a>

<a href="https://s4.51cto.com/wyfs02/M02/9B/78/wKioL1ljbKPAT8w4AACQgy4TbLg812.png-wh_500x0-wm_3-wmp_4-s_2912350420.png" target="_blank"></a>

重新啟動二進制日志  set sql_log_bin=1;

<a href="https://s2.51cto.com/wyfs02/M00/9B/78/wKiom1ljbLiyx19JAAA5lQ38Cx4573.png-wh_500x0-wm_3-wmp_4-s_1565745056.png" target="_blank"></a>

     本文轉自柴鑫旺 51CTO部落格,原文連結:http://blog.51cto.com/chaixinwang/1946081,如需轉載請自行聯系原作者