更多博文請關註:沒有傘的孩子必須努力奔跑 (www.xuchanggang.cn)
一.Xtrabackup概述:
Xtrabackup是由percona提供的mysqlDatabase Backup工具,支援線上熱備份.據官方介紹,這也是世界上惟一一款開源的能夠對innodb和xtradb資料庫進行熱備的工具,同時也支援mariadb.下載Xtrabackup,需要下載相應資料庫版本和相應系統的rpm包或原始碼,個人認為,rpm包安裝完全可以解決問題,就沒必要用源碼編譯安裝了. Xtrabackup有兩個主要的工具:xtrabackup、innobackupex[個人推薦使用此方式] 註解: (1).xtrabackup只能備份InnoDB和XtraDB 兩種資料表 (2).innobackupex則封裝了xtrabackup,同時可以備份MyISAM資料表 Innobackupex完整備份後產生了幾個重要的檔案: xtrabackup_binlog_info:記錄當前最新的LOG Position xtrabackup_binlog_pos_innodb:innodb log postion xtrabackup_checkpoints: 存放備份的起始位置beginlsn和結束位置endlsn,增量備份需要這個lsn [增量備份可以在這裡面看from和to兩個值的變化]
二.Xtrabackup特點: (1)備份過程快速、可靠 (2)備份過程不會打斷正在執行的事務 (3)能夠基於壓縮等功能節約磁碟空間和流量 (4)自動實現備份檢驗 (5)還原速度快
三.Xtrabackup的安裝: percona官方網站:http://www.percona.com/downloads/ 請到此網站下載對應資料庫版本的源碼包或RPM包 [root@client103 ~]# rpm -ivh percona-xtrabackup-20-2.0.8-587.rhel6.x86_64.rpm
四.innobackupex相關參數說明: 註:xtrabackup命令只備份資料檔案,並不備份資料表結構(.frm),所以使用xtrabackup恢複的時候,你必須有對應表結構檔案(.frm),所以,個人推薦採用innobackupex命令 [此命令相當於冷備份,複製資料目錄的索引,資料,結構檔案,但會有短暫的鎖表時間依賴於MyISAM大小)]參數說明如下: --defaults-file:指定my.cnf參數檔案的位置[此設定檔裡必須指定datadir] --apply-log:同xtrabackup的--prepare參數,一般情況下,在備份完成後,資料尚且不能用於恢複操作,因為備份的資料中可能會包含尚未提交的事務或已經提交但尚未同步至資料檔案中的事務。因此,此時資料 檔案仍處理不一致狀態。--apply-log的作用是通過復原未提交的事務及同步已經提交的事務至資料檔案使資料檔案處於一致性狀態。 --copy-back:做資料恢複時將備份資料檔案拷貝到MySQL伺服器的datadir --remote-host=HOSTNAME: 通過ssh將備份資料存放區到進程伺服器上 --stream=[tar]:備份檔案輸出格式, 該檔案可在XtarBackup binary檔案中獲得. 在使用參數stream=tar備份的時候,你的xtrabackup_logfile可能會臨時放在/tmp目錄下,如果你備份的時候並發寫入較大的話,xtrabackup_logfile可能會很大(5G+),很可能會撐滿你的/tmp目錄,可以通過參數--tmpdir指定目錄來解決這個問題. --tmpdir=DIRECTORY:當有指定--remote-host or --stream時, 交易記錄臨時儲存的目錄, 預設採用MySQL設定檔中所指定的臨時目錄tmpdir --redo-only --apply-log:強製備份日誌時只redo,跳過rollback,這在做增量備份時非常必要 --use-memory=*:該參數在prepare的時候使用,控制prepare時innodb執行個體使用的記憶體 --databases=LIST:列出需要備份的databases,如果沒有指定該參數,所有包含MyISAM和InnoDB表的database都會被備份 --slave-info:備份從庫, 加上--slave-info備份目錄下會多產生一個xtrabackup_slave_info 檔案, 這裡會儲存主記錄檔以及位移, 檔案內容類別似於:CHANGE MASTER TO MASTER_LOG_FILE='', MASTER_LOG_POS=0 --socket=SOCKET:指定mysql.sock所在位置,以便備份進程登入mysql.
五.使用innobackupex命令來實現Database Backup:1.完全備份與恢複:
# 指定備份某一資料庫[root@client103 ~]# innobackupex --user=root --password=kongzhong --defaults-file=/etc/my.cnf --port=3306 --databases=a /tmp/backup/ >/tmp/backup/innoback.log 2>&1# 備份所有的資料庫[root@client103 backup]# innobackupex --user=root --password=kongzhong --defaults-file=/etc/my.cnf --port=3306 /tmp/backup/ >/tmp/backup/innoback.log 2>&1# 註:還原時,需要清空資料目錄,所以建議備份的話,執行全庫備份# 備份完成後,應用日誌,是備份的資料保持一致[ /tmp/backup/2014-01-11_14-46-21/:為備份存放的位置][root@client103 ~]# innobackupex --apply-log /tmp/backup/2014-01-11_14-46-21/# 利用剛才的備份進行資料庫還原[root@client103 ~]# innobackupex --copy-back /tmp/backup/2014-01-11_14-46-21/### 備份到遠程機器上[這裡的ssh的話,需要實現兩邊的key同步,不需要輸入密碼,否則無法實現,此方法一般應該不用,待檢驗] ###[root@client103 ~]# innobackupex --user=root --password=kongzhong --defaults-file=/etc/my.cnf --port=3306 --databases=a --stream=tar /tmp/backup/ |ssh root@192.168.1.100 cat ">"/tmp/backup
2.增量備份與恢複:
# 全備[root@client103 ~]# innobackupex --user=root --password=kongzhong --defaults-file=/etc/my.cnf --port=3306 /tmp/backup/ >/tmp/backup/innoback.log 2>&1# 基於全備的增量備份[root@client103 ~]# innobackupex --user=root --password=kongzhong --defaults-file=/etc/my.cnf --port=3306 --incremental --incremental-basedir=/tmp/backup/全備的檔案名稱/ /tmp/backup/# 基於增量備份的增量備份[root@client103 ~]# innobackupex --user=root --password=kongzhong --defaults-file=/etc/my.cnf --port=3306 --incremental --incremental-basedir=/tmp/backup/增量備份的檔案名稱/ /tmp/backup/# 備份應用日誌,保證資料一致# 全備應用日誌[root@client103 ~]# innobackupex --apply-log /tmp/backup/2014-01-11_15-37-31/# 第一次的增量備份應用日誌,應用完日誌後,將合并到全備上,恢複使用全備恢複[root@client103 ~]# innobackupex --apply-log /tmp/backup/2014-01-11_15-37-31/ --incremental-dir=/tmp/backup/2014-01-11_15-45-06/# 將第二次增量備份應用日誌併合併到全備上[root@client103 ~]# innobackupex --apply-log /tmp/backup/2014-01-11_15-37-31/ --incremental-dir=/tmp/backup/2014-01-11_15-46-33/# 此時兩次增量備份其實都合并到全備上了,恢複是只需要使用全備進行恢複就可以了# 類比資料故障[刪除資料庫的資料目錄,執行如下命令還原][root@client103 ~]# innobackupex --copy-back /tmp/backup/2014-01-11_15-37-31/# 恢複後的資料預設許可權是有問題的,所以需要修改資料目錄許可權,如下[root@client103 ~]# chown -R mysql:mysql /var/lib/mysql/# 此時資料恢複完成,重啟資料庫服務,進行測試就可以了。大家自行測試,有問題留言反饋!
3.簡述備份和恢複的步驟:(1).備份: a.全備 b.基於全備的多次增量備份(2).恢複: a.全備 b.基於全備的多次增量備份 c.全備應用日誌,保證資料一致 d.合并多次增量備份到全備上 e.利用全備恢複資料 f.恢複完成後,修改資料目錄的許可權 g.重啟mysql服務
本文出自 “沒有傘的孩子必須努力奔跑” 部落格,請務必保留此出處http://634871.blog.51cto.com/624871/1351049