利用Xtrabackup工具備份及恢復(MySQL DBA的必備工具)_MySQL教程

      編輯Tag賺U幣
      教程Tag:Xtrabackup添加

      推薦:linux下mysql提示mysql deamon failed to start錯誤的解決方法
      網站突然連接不上數據庫,于是朋友直接重啟了一下服務器。進到cli模式下,執行 service myqsld start 發現還是提示mysql deamon failed to start錯誤信息

      Xtrabackup------MySQL DBA的必備工具

      注意:

      1)文檔參照http://www.percona.com/docs/wiki/percona-xtrabackup:start

      2)mysql要使用5.1.50版本或以上。

      一、Xtrabackup簡介及安裝

      1、Xtrabackup 是percona的一個開源項目,可以熱備份innodb ,XtraDB,和MyISAM(會鎖表),可以看做是InnoDB Hotbackup的免費替代品。

      Percona Support for MySQL

      參考:http://www.percona.com/mysql-support/

      先看看如何安裝Xtrabackup,最簡單的安裝方式是使用RPM包,不過想使用源代碼方式安裝的話,其安裝方式有點古怪,因為它采用的在MySQL源代碼上打補丁構建的方式安裝的。

      2、安裝:

      wget http://www.percona.com/downloads/XtraBackup/XtraBackup-1.4/Linux/binary/i686/

      tar zxf xtrabackup-1.4.tar.gz

      cd xtrabackup-1.4

      ./configure

      make

      進行到這里時,千萬別make install,那樣就會接著安裝MySQL了,正確方法是:

      cd innobase/xtrabackup/

      make

      make install

      安裝參照:http://www.percona.com/docs/wiki/percona-xtrabackup:installation:from-source

      3、如此一來,就會在/usr/bin目錄里安裝上兩個有用的工具:xtrabackup、innobackupex

      1)xtrabackup 只能備份InnoDB和XtraDB兩種數據表,支持在線熱備份,可以在不加鎖的情況下備份Innodb數據表,不過此工具不能操作Myisam引擎表

      2)innobackupex 是一個腳本封裝,封裝了xtrabackup,能同時處理Innodb和Myisam,但在處理Myisam時需要加一個讀鎖。

      按如上的介紹,由于操作Myisam時需要加讀鎖,這會堵塞線上服務的寫操作,而Innodb沒有這樣的限制,所以數據庫中Innodb表類型所占的比例越大,則越有利。實際應用中一般是直接使用innobackupex方法,它主要有三種操作方式,按手冊中的介紹:

      Usage:

      innobackup [--sleep=MS] [--compress[=LEVEL]] [--include=REGEXP] [--user=NAME]

      [--password=WORD] [--port=PORT] [--socket=SOCKET] [--no-timestamp]

      [--ibbackup=IBBACKUP-BINARY] [--slave-info] [--stream=tar]

      [--defaults-file=MY.CNF]

      [--databases=LIST] [--remote-host=HOSTNAME] BACKUP-ROOT-DIR

      innobackup --apply-log [--use-memory=MB] [--uncompress] [--defaults-file=MY.CNF]

      [--ibbackup=IBBACKUP-BINARY] BACKUP-DIR

      innobackup --copy-back [--defaults-file=MY.CNF] BACKUP-DIR

      ——————————————————————————————————

      第一個命令行是熱備份mysql數據庫。

      帶有--apply-log選項的命令是準備在一個備份上啟動mysql服務。

      帶有--copy-back選項的命令從備份目錄拷貝數據,索引,日志到my.cnf文件里規定的初始位置。

      Xtrabackup還可以用來moving InnoDB tables between servers,更多的內容可以參考官方文檔及例子。

      參考鏈接:

      1.官方文檔:http://www.percona.com/docs/wiki/percona-xtrabackup:xtrabackup_manual

      2.Xtrabackup online backup for InnoDB/XTraDB(pdf):

      http://www.percona.com/ppc2009/PPC2009_xtrabackup.pdf

      二、innobackupex 和 xtrabackup備份詳解

      注:innobackupex會根據/et/my.cnf來確定MySQL的數據位置。

      1.普通備份:

      innobackupex [--defaults-file=/etc/my.cnf] --user=root [--host=192.168.1.52] [--password=xxx] [--port=3306] /data/back_data/ 2>/data/back_data/1.log

      備份的目錄是/data/back_data/,這里的2>/data/back_data/1.log,是將備份過程中的輸出信息重定向到1.log

      innobackupex-1.5.1 –slave-info …..

      –slave-info會記錄復制主日志的 復制點,便于重新做復制用。(用在備份從機器用)

      備份后的文件:

      xtrabackup_binlog_info — 存放binlog的信息。(binlog需要另外拷貝備份,如果需要binlog的話)

      xtrabackup_checkpoints — 存放備份的起始位置和結束位置。

      恢復:

      首先停掉數據庫,然后刪除數據庫目錄下的所有數據庫文件.

      cd /data/mysql_data

      rm -rf * # 刪除數據目錄里的所有文件

      innobackupex-1.5.1 --user=root --apply-log /data/back_data/2010-10-26_16-09-37 # 應用日志

      innobackupex-1.5.1 --user=root --copy-back /data/back_data/2010-10-26_16-09-37

      默認innobackupex-1.5.1會將二進制日志信息存放在文件xtrabackup_binlog_info中發(方便做Slave)。

      cd /data

      chown -R mysql:mysql mysql_data/

      重啟mysql服務

      2.打包(Tar)備份:

      innobackupex-1.5.1 --user=root [--password=xxx] --stream=tar /data/back_data/2/ 2>/data/back_data/2.log 1>/data/back_data/2.tar

      還原:

      #cd /data/back_data/2/

      #tar ixvf 2.tar

      # ls

      2.tar backup-my.cnf ibdata1 ibdata2 mablevi mysql xtrabackup_binlog_info xtrabackup_checkpoints xtrabackup_logfile

      準備還原

      # innobackupex-1.5.1 --user=xxx [--password=xxx]--apply-log /data/back_data/

      ……

      innobackupex: completed OK!

      刪除數據目錄里的所有文件

      rm -rf /data/mysql_data/*

      拷貝:

      # innobackupex-1.5.1 --user=xxx [--password=xxx] --copy-back /data/back_data/

      ……

      innobackupex: completed OK!

      cd /data

      chown -R mysql:mysql mysql_data/

      重啟mysql服務

      3. 壓縮(tar gzip)備份

      innobackupex-1.5.1 --user=root [--password=xxx] --stream=tar

      /data/back_data/2/ 2>/data/back_data/2.log | gzip > /data/back_data/2.tar.gz

      這里使用了管道|將innobackupex-1.5.1作為gzip的標準輸入。恢復,只需要使用tar -izxvf 解壓對應的文件后,操作完全同普通備份。

      還原:

      使用tar –izxvf 解壓對應的文件后,操作完全同普通備份。

      #cd /data/back_data/2/

      #tar ixvf 2.tar

      # ls

      backup-my.cnf ibdata1 ibdata2 mablevi mysql xtrabackup_binlog_info xtrabackup_checkpoints xtrabackup_logfile

      準備還原:

      # innobackupex-1.5.1 --user=xxx [--password=xxx] --apply-log /data/back_data/2/

      ……

      innobackupex: completed OK!

      刪除數據目錄里的所有文件

      rm -rf /data/mysql_data/*

      # innobackupex-1.5.1 --user=xxx [--password=xxx] --copy-back /data/back_data/2/

      cd /data

      chown -R mysql:mysql mysql_data/

      重啟mysql服務

      ———————————————————————————————————————

      xtrabackup 備份和恢復

      備份:

      xtrabackup --defaults-file=/etc/my.cnf --backup --target-dir=/data/back_data/

      恢復:

      需要執行兩次xtrabackup –prepare

      xtrabackup --defaults-file=/etc/my.cnf --prepare --target-dir=/data/back_data/

      xtrabackup --defaults-file=/etc/my.cnf --prepare --target-dir=/data/back_data/

      注意,xtrabackup只備份數據文件,并不備份數據表結構(.frm),所以使用xtrabackup恢復的時候,你必須有對應表結構文件(.frm)。

      增量備份:

      1. 全量備份

      xtrabackup --defaults-file=/etc/my.cnf --backup --target-dir=/data/back_data/

      2. 增量備份

      xtrabackup --defaults-file=/etc/my.cnf --backup --target-dir=/data/back_data_inc/ --incremental-

      basedir=/data/back_data/

      在增量備份的目錄下,數據文件都是以.delta結尾的。增量備份只備份上一次全量備份后被修改過的page,所以增量備份只暫用較少的空間。增量備份可以在增量備份的基礎上增量。

      增量備份恢復:

      我們需要分別對全量、增量備份各做一次prepare操作。

      xtrabackup --defaults-file=/etc/my.cnf --prepare --target-dir=/data/back_data/2010-10-26_16-09-37

      xtrabackup --prepare --target-dir=/data/back_data/2010-10-26_16-09-37--incremental-

      dir=/data/back_data_inc

      xtrabackup --prepare --target-dir=/data/back_data/ #這一步不是必須的

      這樣,/data/back_data/下的數據文件就可以直接放到你的MySQL數據目錄下,恢復數據了。

      再次提醒,xtrabackup只備份InnoDB數據文件,表結構是不備份的,所以恢復的時候,你必須有對應表結構文件(.frm)。

      rm -rf /data/mysql_data/ib*

      cp -i /data/back_data/2010-10-26_16-09-37/ib* /data/mysql_data/

      cd /data

      chown -R mysql:mysql mysql_data/

      2.innobackupex 與 xtrabackup 相結合

      首先,innobackupex全備份:

      innobackupex --user=root /data/back_data/ 2>/data/back_data/1.log #會生成一個時間文件夾,這里假如是2010-10-29_15-57-44

      然后,xtrabackup 做增量備份:

      xtrabackup --defaults-file=/etc/my.cnf --backup --target-dir=/data/back_data_inc/4 --incremental-basedir=/data/back_data/2010-10-29_15-57-44

      恢復:

      首先停掉數據庫,備份二進制日志(如果有的話),然后刪除數據庫目錄下的所有數據庫文件.

      cd /data/mysql_data

      rm -rf * # 刪除數據目錄里的所有文件

      恢復全量備份:

      innobackupex --user=root --apply-log /data/back_data/2010-10-29_15-57-44 # 應用日志

      innobackupex --user=root --copy-back /data/back_data/2010-10-29_15-57-44 # 拷貝文件

      恢復增量備份:

      xtrabackup --prepare --target-dir=/data/back_data/2010-10-29_15-57-44 --incremental-dir=/data/back_data_inc/5

      cd /data

      chown -R mysql:mysql mysql_data/

      重啟mysql服務。

      分享:使用java處理字符串公式運算的方法
      本篇文章介紹了,使用java處理字符串公式運算的方法。需要的朋友參考下

      來源:模板無憂//所屬分類:MySQL教程/更新時間:2013-04-27
      相關MySQL教程