MySQL備份利器之Xtrabackup

          之前工作的時候,業務需要用到了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 目錄中各個文件的意義

 

除了之前說過的三個工具 innobackupexxtrabackupxbstream 外我們還可以看到幾

 

個之前沒提過的文件它們分別是 xtrabackup_51xtrabackup_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

 nce.html

 

innobackupex 相關文件

 

 

1xtrabackup_checkpoints

 

包含了 LSN 號與備份類型。此文本被用於增量備份恢復

 

[root@game7 2013-03-07_14-07-19]# more xtrabackup_checkpoints backup_type = full-backuped

 

from_lsn = 0

to_lsn = 95118590296

 

2xtrabackup_binlog_info

記錄了備份時刻二進制日誌的位置是 show master status 的結果

 

[root@game7 2013-03-07_14-07-19]# more xtrabackup_binlog_info

 

mysql-bin.000001106

 

3backup-my.cnf

記錄了備份所需的 my.cnf 中的選項

 

[root@game7 2013-03-07_14-07-19]# more backup-my.cnf

 

This MySQL options file was generated by innobackupex-1.5.1. 

 

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

 

 

 

4xtrabackup_binlog_pos_innodb

 

記錄了備份時刻 InnoDB 表的二進制日誌的位置

 

5xtrabackup_slave_info

 

記錄了複製架構中 master 服務器的 mysql 二進制日誌位置用於複製中的  CHANGE

 

MASTER

 

6xtrabackup_binary

 

用於備份的二進制文件

 

7mysql-stderr

 

mysqld 的標準錯誤輸出

 

8mysql-stdout

 

mysql 服務的標準輸出

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章