之前工作的時候,業務需要用到了Xtrabackup軟件。於是在空閒的時候就寫下這份Xtrabackup的應用文檔。在這裏共享給需要用到的兄弟姐妹們。文檔撰寫比較粗糙,有什麼錯誤還請指教。
Xtrabackup是一個免費的MySQL熱備份軟件,支持在線熱備份InnoDB和XtraDB,也可以支持MyISAM
表的備份。
工具介紹
在介紹 innobackupex 之前不得不提到的是Xtrabackup 軟件。官網上的說法是,Xtrabackup 是一
個免費的 MySQL 熱備份軟件,支持在線熱備份 InnoDB 和 XtraDB,也可以支持 MyISAM 表的備份,
不過需要在鎖定表的情況下進行。
Xtrabackup 有三個主要的工具:xtrabackup、innobackupex、xbstream
其中:
1) xtrabackup 是一個編譯了的 C 二進制文件,只能夠備份 InnoDB/XtraDB 數據
2) innobackupex 是一個封裝了 xtrabackup 的 Perl 腳本,除了可以備份InnoDB/XtraDB,還可
以備份 MyISAM
3) xbstream 是一個新的組件能夠允許文件轉 成 xbstream 格式或從 xbsteream 轉到文件
當然,你可以依照你的實際工作需求來選擇備份的工具。你可以單獨使用 xtrabackup工具,但是
還是推薦用 innobackupex 來備份,因爲 innobackupex 本身就已包含了xtrabackup 的所有功能。
所以這篇文檔只介紹了 innobackupex 工具的具體用法,xtrabackup並沒有涉及,不過用法是相似的,
只是參數的表現方式不同而已。
Xtrabackup 基於 InnoDB 的 crash-recovery 功能,備份工具會複製 innodb 的 datafile。但是,由於
不鎖表,這樣複製出來的數據就會不一致,在恢復的使用會自動使用crash-recovery,使得數據恢復一
致。這是由於 InnoDB 維護了一個 redo log,包含了 innodb數據的所有改動情況。當 InnoDB 啓動
時,它會先去檢查數據文件和重做日誌文件。 在Xtrabackup 備份的時候,一頁一頁複製 innodb 的數
據,而且不鎖定表。與此同時,Xtrabackup還有另外一個線程監視着重做日誌,一旦日誌發生變化,
就把變化過的日誌 page 複製走。 在 prepare 階段,Xtrabackup 使用複製到的重做日誌對備份出
的 innodb 數據文件進 行crash recovery。
Xtrabackup 對 MyISAM 的複製,是按這樣的一個順序:先鎖定表,然後複製,再解鎖表。
安裝和部署
本文檔是以 Xtrabackup2.05爲基礎來編寫的。
在 http://www.percona.com/downloads/XtraBackup/LATEST/下載最新 Xtrabackup 軟件。
推薦以源碼方式安裝,這裏下載了 percona-xtrabackup-2.0.5.tar.gz。
直接解壓:tar -zxvf percona-xtrabackup-2.0.5.tar.gz
之後得到一個新的目錄 percona-xtrabackup-2.0.5
[root@localhost percona-xtrabackup-2.0.5]# ll | | |||||
total 8 | | | | | | |
drwxr-xr-x 2 root root 4096 Jan | 18 04:40 bin | | ||||
drwxr-xr-x 4 root root 4096 Jan | 18 04:40 share | |||||
[root@localhost percona-xtrabackup-2.0.5]# cd bin | ||||||
[root@localhost bin]# ll | | | | | ||
total 40372 | | | | | | |
-rwxr-xr-x | 1 | root root | 106390 | Jan 18 04:40 | innobackupex | |
lrwxrwxrwx | 1 | root root | 12 | Mar 7 10:26 | innobackupex-1.5.1 -> innobackupex | |
-rwxr-xr-x | 1 | root root | 2258560 | Jan 18 | 04:40 | xbstream |
-rwxr-xr-x 1 root root 12538596 | Jan 18 | 04:35 | xtrabackup | |||
-rwxr-xr-x 1 root root 10653886 | Jan 18 | 04:40 | xtrabackup_51 | |||
-rwxr-xr-x | 1 | root root 15710599 | Jan 18 | 04:29 | xtrabackup_55 | |
| | | | | | |
可以看到 percona-xtrabackup-2.0.5有兩個目錄,其中一個 bin 就是存放着之前說過的備
份工具,share 存放着 Xtrabackup 的測試腳本。
這裏解釋一個 bin 目錄中各個文件的意義:
除了之前說過的三個工具 innobackupex、xtrabackup、xbstream 外,我們還可以看到幾
個之前沒提過的文件,它們分別是 xtrabackup_51,xtrabackup_55。在官網上市這樣介紹的:
The xtrabackup binary actually exists as three separate binaries: xtrabackup, xtrabackup_51, and xtrabackup_55. This is to ensure binary compatibility ofInnoDBdatafiles across releases. Which binary you should use depends onthe version of the server that produced the data files you want to back up. It’ s important to use the correct binary. Whichever binary is used to create abackupshouldalso be the binary used to prepare that backup.
原來 Xtrabackup 爲了保證對這個 InnoDB 發行版的有效兼容而採取的一種人性化的做法。來看看這些命令的
作用範圍:
Server | xtrabackup | binary |
| | |
MySQL 5.0.* | xtrabackup_51 | |
| | |
MySQL 5.1.* | xtrabackup_51 | |
| | |
MySQL 5.1.* with InnoDB plugin | xtrabackup | |
| | |
MySQL 5.5.* | xtrabackup_55 | |
| | |
MariaDB 5.1.* | xtrabackup | |
| | |
MariaDB 5.2.* | xtrabackup | |
| | |
MariaDB 5.3.* | xtrabackup | |
| | |
MariaDB 5.5.* | xtrabackup_55 | |
| | |
Percona Server 5.0 | xtrabackup_51 | |
| | |
Percona Server 5.1 | xtrabackup | |
| | |
Percona Server 5.5 | xtrabackup_55 | |
| | |
進行備份前的準備
innobackupex 的選項
--apply-log 恢復的第一階段應用日誌
--copy-back --複製之前做的備份到原來的數據目錄
--databases=LIST --指定備份的數據庫,若沒有指定默認備份所有數據庫
--defaults-file=[MY.CNF] --默認的配置文件
--export 導出個別表,以便於導入到其他服務器上
--host=HOST 當以 TCP/IP 連接數據庫服務器時指定主機
--incremental --建立增量備份
--incremental-basedir=DIRECTORY 全備目錄,主要用於作爲增量備份的基準
--incremental-dir=DIRECTORY 增量備份目錄
--incremental-lsn 用於增量備份的日誌序列號
--no-lock 取消表的鎖定(flush table with read lock)。當你備份的表都是 InnoDB 表時,而且不擔心備份的二進制日誌文件的位置,當有 DDL 語句或是非 InnoDB 表時不能使用這個選項,否則會導致備份不一致
--no-timestamp --禁止以時間標誌來生成備份目錄
--password=PASSWORD
--port=PORT
--redo-only --在增量備份恢復時用到
--rsync 用 rsync 工具來優化本地文件傳輸,innobackupex 會使用 rsync 來複制所有非InnoDB 文件,而不是使用 cp 來分別 copy 每個文件,rsync 在大數據量的時候會非常有效 。只能用於本地,不能與--remote-host or--stream.一起用
--slave-info 在備份一個複製結構中的從庫時,這個選項非常有用。它記錄了主庫的二進制日誌位置和主庫的名字 ,這些信息被記錄到了 xtrabackup_slave_info 文件中,這個有點 像 mysqldump 中的 change master 標誌。當爲主庫搭建新的從庫時 ,可以通過之前的備份 加上 xtrabackup_slave_info 文件中的二進制位置來實現從庫恢復
--scpopt = SCP-OPTIONS
--sshopt = SSH-OPTIONS
--socket
--use-memory
--user=USER
具體的 innobackupex 選項說明可以參照
http://www.percona.com/doc/percona-xtrabackup/innobackupex/innobackupex_option_refere
innobackupex 相關文件
1)xtrabackup_checkpoints
包含了 LSN 號與備份類型。此文本被用於增量備份恢復
[root@game7 2013-03-07_14-07-19]# more xtrabackup_checkpoints backup_type = full-backuped
from_lsn = 0
to_lsn = 95118590296
2)xtrabackup_binlog_info
記錄了備份時刻二進制日誌的位置,是 show master status 的結果
[root@game7 2013-03-07_14-07-19]# more xtrabackup_binlog_info
mysql-bin.000001106
3)backup-my.cnf
記錄了備份所需的 my.cnf 中的選項
[root@game7 2013-03-07_14-07-19]# more backup-my.cnf
0 This MySQL options file was generated by innobackupex-1.5.1.
0 The MySQL server
[mysqld]
datadir=/home/backup/2013-03-07_14-07-19
innodb_data_home_dir=/home/backup/2013-03-07_14-07-19 innodb_data_file_path=ibdata1:5120M;ibdata2:100M:autoextend innodb_log_group_home_dir=/home/backup/2013-03-07_14-07-19 innodb_log_files_in_group=2
innodb_log_file_size=377487360
4)xtrabackup_binlog_pos_innodb
記錄了備份時刻 InnoDB 表的二進制日誌的位置
5)xtrabackup_slave_info
記錄了複製架構中 master 服務器的 mysql 二進制日誌位置,用於複製中的 CHANGE
MASTER
6)xtrabackup_binary
用於備份的二進制文件
7)mysql-stderr
mysqld 的標準錯誤輸出
8)mysql-stdout
mysql 服務的標準輸出