xtrabackup對MySQL數據庫的備份及恢復

xtrabackup 是 percona 的一個開源項目,能夠熱備份innodb ,XtraDB,和MyISAM(會鎖表)
對MyISAM存儲引擎會鎖表,也是很鬱悶的由於線上使用的是Innodb和MyISAM兩種存儲引擎,比較頭疼!!
Xtrabackup是一個對InnoDB作數據備份的工具,支持在線熱備份(備份時不影響數據讀寫),是商業備份工具InnoDB Hotbackup的一個很好的替代品
Percona? 
MySqL的衍生版 Percona Server
Percona 爲 MySQL 數據庫服務器進行了改進,在功能和性能上較 MySQL 有着很顯著的提高。該版本提高了在高負載狀況下的 InnoDB 的性能、爲 DBA 提供一些很是有用的性能診斷工具;另外有更多的參數和命令來控制服務器行爲。
Percona Server 只包含 MySQL 的服務器版,並無提供相應對 MySQL 的 Connector 和 GUI 工具進行改進。
Percona Server 使用了一些 google-mysql-tools, Proven Scaling, Open Query 對 MySQL 進行改造。
官站:http://www.percona.com/ 這個站點有詳細的文檔介紹,不過是E文,


下面就來看一下Xtrbackup這個工具的使用吧。


首先安裝這個xtrbackup工具,安裝方法官網上有yum和rpm包安裝兩種方式的詳細的介紹就再也不寫了,朋友們本身看。在這裏我使用的yum的安裝方式比較便捷。
yum源設置方法:

http://www.percona.com/doc/percona-xtrabackup/2.1/installation/yum_repo.html php

vim /etc/yum.repos.d/Percona.repo
添加如下內容:
[percona]
name = CentOS $releasever - Percona
baseurl=http://repo.percona.com/centos/$releasever/os/$basearch/
enabled = 1
gpgkey = file:///etc/pki/rpm-gpg/RPM-GPG-KEY-percona
gpgcheck = 1
下載key文件寫到<span style=\"\\\\"\\\\\\\\"font-family:consolas,\\\\"\">yum install percona-xtrabackup-2.0.1-446.rhel6.x86_64 -y
固然也能夠下載源碼包編譯安裝

下載地址: http://www.percona.com/downloads/XtraBackup/XtraBackup-2.1.5/binary/Linux html

主要來講一下xtrbackup對MySqL數據庫的備份和恢復。


Xtrabackup有兩個主要的工具:xtrabackup、innobackupex
  (1)xtrabackup只能備份InnoDB和XtraDB兩種數據表,而不能備份MyISAM數據表
  (2)innobackupex-1.5.1則封裝了xtrabackup,是一個腳本封裝,因此能同時備份處理innodb和myisam,但在處理myisam時須要加一個讀鎖
  (3)使用幫助:http://www.percona.com/docs/wiki/percona-xtrabackup:start
下面來使用這個工具:
必定要肯定mysql配置文件my.cnf中必須有datadir=/data/mysql/這項。下面有說明。
先來一次全量備份:
innobackupex-1.5.1 --defaults-file=/etc/my.cnf --no-timestamp --host=localhost --port=3306 --user=root --password=redhat /data/bak_data/full_bak
這個目錄裏面就是備份的內容了,能夠看一下都有什麼東西:
數據庫的主配置文件:backup-my.cnf
Innodb日誌文件:ibdata1
數據庫中的全部數據庫目錄:innobackup、mysql、performance_schema、phpmyadmin、test、wordpress
最後就是innobackupex備份的二進制日誌和日誌信息,備份的標誌點:
xtrabackup_binary
xtrabackup_binlog_info
xtrabackup_checkpoints
xtrabackup_logfile
下面來使用innobackupex增量備份:
第一次增量備份:
innobackupex-1.5.1 --defaults-file=/etc/my.cnf --no-timestamp --host=localhost --port=3306 --user=root --password=redhat --incremental --incremental-basedir=/data/bak_data/full_bak /data/bak_data/one_backup
第二次增量備份:
innobackupex-1.5.1 --defaults-file=/etc/my.cnf --no-timestamp --host=localhost --port=3306 --user=root --password=redhat --incremental --incremental-basedir=/data/bak_data/one_backup /data/bak_data/two_backup
第三次增量備份:
innobackupex-1.5.1 --defaults-file=/etc/my.cnf --no-timestamp --host=localhost --port=3306 --user=root --password=redhat --incremental --incremental-basedir=/data/bak_data/two_backup /data/bak_data/three_backup

以上是把每次增量備份爲一個目錄,也能夠備份爲一個壓縮包

壓縮備份的方式:
innobackupex-1.5.1 --defaults-file=/etc/my.cnf --no-timestamp --host=localhost --port=3306 --user=root --password=redhat --stream=tar /data/bak_data/ 2>/data/back_data/2.log | gzip - > /data/bak_data/full_bak.tar.gz
(測試了不下10次,壓縮包裏只一個backup-my.cnf文件,很是鬱悶!)
仍是用普通的吧,比較妥當!


下面來看一下如何恢復數據,這裏有兩方式來恢復。要恢復數據要先停mysql數據庫服務,要不停下也是能夠的,我的感受停下比較好一點。
兩種方式共同的部分:
一、進行一次基礎恢復也就是:
innobackupex-1.5.1 /data/bak_data/full_bak --apply-log
二、進行增量恢復:
innobackupex-1.5.1 /data/bak_data/full_bak --incremental --incremental-dir=/data/bak_data/one_backup --apply-log   #恢復的是第一次增量備份的,
innobackupex-1.5.1 /data/bak_data/full_bak --incremental --incremental-dir=/data/bak_data/two_backup --apply-log    #恢復的是第二次增量備份的,
innobackupex-1.5.1 /data/bak_data/full_bak --incremental --incremental-dir=/data/bak_data/three_backup --apply-log    #恢復的是第三次增量備份的,
以次類推,有多少增量就恢復多少,最後數據庫所有數據會在/data/bak_data/full_bak這個目錄下,

下面就分兩方式來恢復數據到正式的數據庫中
第一種比較簡單的方式,直接把/data/bak_data/full_bak這個目錄下的文件所有複製到數據庫的存放數據的目錄中:
cp -r /data/bak_data/full_bak/* /data/mysql/data/
爲了能正常啓動服務,修改數據目錄的用戶權限,
chown mysql:mysq -R /data/mysql
如不出意外,重啓以後數據庫服務就是正常。一般狀況下能正常啓動。
這種方式會使數據庫的數據目錄有其餘的文件,cp以後會有xtrabackup_binary、xtrabackup_binlog_info、xtrabackup_checkpoints、xtrabackup_logfile、backup-my.cnf、ibdata一、ib_logfile0、ib_logfile1 文件,若是innodb日誌文件:ibdata一、ib_logfile0、ib_logfile1以前就是放在這個目錄中能夠不用清理掉,建議其餘除數據庫目錄以外的文件要清理一下。或者複製到相應的目錄中去。

第二方式,使用innobackupex-1.5.1 --copy-back這個選項來把數據獲得數據庫存儲的目錄中去,在這以前要清空數據庫數據存放目錄/data/mysql/data目錄的文件和innodb日誌目錄/data/mysql/mysql_innodb目錄的文件,而後執行下面的命令便可。若是不清空,下面命令在執行過程會報錯,提示你要清空那些目錄。
innobackupex-1.5.1 --copy-back /data/bak_data/full_bak
執行完後,上面來個目錄中的文件屬主和屬組都發生了變化,不是mysql用戶了,若是直接重啓mysql服務會報錯,修改成mysql用戶就能夠了
執行:
chown mysql:mysql /data/mysql -R

關於Xtrbackup工具的使用先就寫到這裏,在這裏還有一個問題沒獲得解決,但願看到的朋友們若是也遇到相同的問題能夠一塊兒討論下。
問題文章前面也提到過,就是使用壓縮備份里老是不成功。即:
壓縮備份:
innobackupex-1.5.1 --defaults-file=/etc/my.cnf --no-timestamp --host=localhost --port=3306 --user=root --password=redhat --stream=tar /data/bak_data/  2>/data/back_data/2.log | gzip - > /data/bak_data/full_bak.tar.gz
(測試了不下10次,壓縮包裏只一個backup-my.cnf文件,很是鬱悶!)


但願看到的朋友們能指點下,謝謝。 mysql


上面的那個問題已經解決了,多謝跛腿的狐狸 的指點 sql

緣由以下,我備份完以後解壓時少用了一個參數。我用的是:tar zxvf full_bak.tar.gz 因此解壓出來後就一個backup-my.cnf文件,多謝跛腿的狐狸 的指點,使用-i這個參數,即:tar -izxvf full_bak.tar.gz解壓出來後就是全是備份的文件和目錄了。這個參數的解釋以下:-i, --ignore-zeros  忽略歸檔中的零字節塊(即文件結尾) shell

相關文章
相關標籤/搜索