xtrabackup備份mysql innodb
在mysql資料量不大的時候用mysqldump來備份還可以湊合,當資料越來越大時,利用mysqldump出來的資料還原的話就很費時了,這時就需要一種高效率的備份還原工具來完成這個重要的任務。好在percona公司給使用者提供了一款開源、免費的熱備工具,xtrabackup.xtrabakup包含兩個工具:
xtrabackup是用於熱備份innodb, xtradb表中資料的工具,不能備份其他型別的表,也不能備份資料表結構
innobackupex是將xtrabackup進行封裝的perl指令碼,提供了備份myisam表的能力
本文將對innobackupex進行詳細的說明和測試
原理
1 記錄備份開始時InnoDB儲存引擎重做日誌產生的檢查點LSN
2 複製共享表空間檔案以及獨立表空間檔案
3 記錄複製完表空間檔案後,InnoDB儲存引擎重做日誌檔案檢查點LSN
4 複製在備份時產生的重做日誌
安裝xtrabackup很簡單,要安裝perl-DBD-MySQL包。從procona官網下載合適版本的xtrabackup,將其解包,在解開的包percona-xtrabackup-2.1.8-Linux-i686中有如下命令
innobackupex
xbcrypt
xtrabackup
xtrabackup_56
innobackupex-1.5.1
xbstream
xtrabackup_55
將這些命令複製到/usr/bin下,方便以後使用。
到此xtrabackup安裝工作結束
備份測試
全備
資料庫建測試表
mysql> use test;
Database changed
mysql> create table book (id int,name varchar(5));
Query OK, 0 rows affected (0.01 sec)
mysql> desc book;
+-------+------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+------------+------+-----+---------+-------+
| id | int(11) | YES | | NULL | |
| name | varchar(5) | YES | | NULL | |
+-------+------------+------+-----+---------+-------+
2 rows in set (0.01 sec)
寫入輸入若干條
[root@localhost ~]# cat test.sh
#!/bin/bash
for i in `seq 1 1000`;do
mysql -e "insert into test.book values($i,"$i");"
done
執行該指令碼,向book表中插入1000條資料
驗證資料
mysql> select count(*) from book;
+----------+
| count(*) |
+----------+
| 1000 |
+----------+
1 row in set (0.02 sec)
全備資料
innobackupex --defaults-file=/etc/my.cnf /home/databackup/full/
為了測試方便,這裡沒設mysql密碼,可以加引數--user=xxx --password=yyy
如果沒有報錯,在/home/databackup/full/目錄下會生成以當前時間命令的目錄,其下有若干檔案
[root@localhost ~]# ll /home/databackup/full/2014-03-19_15-51-43/
total 18464
-rw-r--r--. 1 root root 262 Mar 19 15:51 backup-my.cnf
-rw-r-----. 1 root root 18874368 Mar 19 15:51 ibdata1
drwxr-xr-x. 2 root root 4096 Mar 19 15:51 mysql
drwxr-xr-x. 2 root root 4096 Mar 19 15:51 performance_schema
drwx------. 2 root root 4096 Mar 19 15:51 test
-rw-r--r--. 1 root root 13 Mar 19 15:51 xtrabackup_binary
-rw-r--r--. 1 root root 26 Mar 19 15:51 xtrabackup_binlog_info
-rw-r-----. 1 root root 89 Mar 19 15:51 xtrabackup_checkpoints
-rw-r-----. 1 root root 2560 Mar 19 15:51 xtrabackup_logfile
ll /home/databackup/full/2014-03-19_15-51-43/test/
total 144
-rw-r-----. 1 root root 8586 Mar 19 15:51 book.frm
-rw-r-----. 1 root root 131072 Mar 19 15:51 book.ibd
-rw-r--r--. 1 root root 61 Mar 19 15:51 db.opt
有book.ibd檔案,說明mysql使用了獨立表空間。
刪除表book,模擬災難恢復
mysql> use test;
Database changed
mysql> drop table book;
Query OK, 0 rows affected (0.04 sec)
mysql> show tables;
Empty set (0.00 sec)
關閉mysql,恢復資料
innobackupex --apply-log --redo-only /home/databackup/full/2014-03-19_15-51-43/
利用全備的資料來恢復,--apply-log引數是應用transaction_logfile產生新的重做日誌 ,--redo-only只做redo,不做rollback,
再次執行,生成redolog,以便mysql能快速啟動
innobackupex --apply-log --redo-only /home/databackup/full/2014-03-19_15-51-43/
複製檔案到資料目錄,建議先將資料目錄中的資料打包,然後清空,否則會報錯。
innobackupex --copy-back /home/databackup/full/2014-03-19_15-51-43/
該資料許可權為mysql
chown mysql.mysql -R /var/lib/mysql
啟動mysql
驗證恢復結果
mysql> use test;
Database changed
mysql> select count(*) from book;
+----------+
| count(*) |
+----------+
| 1000 |
+----------+
1 row in set (0.00 sec)
增量備份
innobackupex --defaults-file=/etc/my.cnf --incremental-basedir=/home/databackup/full/2014-03-19_15-51-43/ --incremental /home/databackup/delta/
--incremental-basedir指向全備目錄,也可以指向最近一次增量備份的目錄
--incremental 指向本次要增量備份的目錄
上面語句執行成功之後,會在--incremental執行的目錄下建立一個時間戳子目錄,在該目錄下存放著增量備份的所有檔案
恢復
BASE-DIR全備目錄,INCREMENTAL-DIR-1第一次增量的目錄,INCREMENTAL-DIR-2第二次增量的目錄
本例:
innobackupex --apply-log --redo-only /home/databackup/full/2014-03-19_15-51-43/
innobackupex --apply-log --redo-only /home/databackup/full/2014-03-19_15-51-43/ --incremental-dir=/home/databackup/delta/2014-03-19_16-23-11
如果有多個增量的話要依次把增量日誌應用到全備。
innobackupex --apply-log BASE-DIR
再次執行apply-log回滾未完成的日誌
最後複製檔案
innobackupex --copy-back BASE-DIR
該許可權,啟動mysql
xtrabackup是用於熱備份innodb, xtradb表中資料的工具,不能備份其他型別的表,也不能備份資料表結構
innobackupex是將xtrabackup進行封裝的perl指令碼,提供了備份myisam表的能力
本文將對innobackupex進行詳細的說明和測試
原理
1 記錄備份開始時InnoDB儲存引擎重做日誌產生的檢查點LSN
2 複製共享表空間檔案以及獨立表空間檔案
3 記錄複製完表空間檔案後,InnoDB儲存引擎重做日誌檔案檢查點LSN
4 複製在備份時產生的重做日誌
安裝xtrabackup很簡單,要安裝perl-DBD-MySQL包。從procona官網下載合適版本的xtrabackup,將其解包,在解開的包percona-xtrabackup-2.1.8-Linux-i686中有如下命令
innobackupex
xbcrypt
xtrabackup
xtrabackup_56
innobackupex-1.5.1
xbstream
xtrabackup_55
將這些命令複製到/usr/bin下,方便以後使用。
到此xtrabackup安裝工作結束
備份測試
全備
資料庫建測試表
mysql> use test;
Database changed
mysql> create table book (id int,name varchar(5));
Query OK, 0 rows affected (0.01 sec)
mysql> desc book;
+-------+------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+------------+------+-----+---------+-------+
| id | int(11) | YES | | NULL | |
| name | varchar(5) | YES | | NULL | |
+-------+------------+------+-----+---------+-------+
2 rows in set (0.01 sec)
寫入輸入若干條
[root@localhost ~]# cat test.sh
#!/bin/bash
for i in `seq 1 1000`;do
mysql -e "insert into test.book values($i,"$i");"
done
執行該指令碼,向book表中插入1000條資料
驗證資料
mysql> select count(*) from book;
+----------+
| count(*) |
+----------+
| 1000 |
+----------+
1 row in set (0.02 sec)
全備資料
innobackupex --defaults-file=/etc/my.cnf /home/databackup/full/
為了測試方便,這裡沒設mysql密碼,可以加引數--user=xxx --password=yyy
如果沒有報錯,在/home/databackup/full/目錄下會生成以當前時間命令的目錄,其下有若干檔案
[root@localhost ~]# ll /home/databackup/full/2014-03-19_15-51-43/
total 18464
-rw-r--r--. 1 root root 262 Mar 19 15:51 backup-my.cnf
-rw-r-----. 1 root root 18874368 Mar 19 15:51 ibdata1
drwxr-xr-x. 2 root root 4096 Mar 19 15:51 mysql
drwxr-xr-x. 2 root root 4096 Mar 19 15:51 performance_schema
drwx------. 2 root root 4096 Mar 19 15:51 test
-rw-r--r--. 1 root root 13 Mar 19 15:51 xtrabackup_binary
-rw-r--r--. 1 root root 26 Mar 19 15:51 xtrabackup_binlog_info
-rw-r-----. 1 root root 89 Mar 19 15:51 xtrabackup_checkpoints
-rw-r-----. 1 root root 2560 Mar 19 15:51 xtrabackup_logfile
ll /home/databackup/full/2014-03-19_15-51-43/test/
total 144
-rw-r-----. 1 root root 8586 Mar 19 15:51 book.frm
-rw-r-----. 1 root root 131072 Mar 19 15:51 book.ibd
-rw-r--r--. 1 root root 61 Mar 19 15:51 db.opt
有book.ibd檔案,說明mysql使用了獨立表空間。
刪除表book,模擬災難恢復
mysql> use test;
Database changed
mysql> drop table book;
Query OK, 0 rows affected (0.04 sec)
mysql> show tables;
Empty set (0.00 sec)
關閉mysql,恢復資料
innobackupex --apply-log --redo-only /home/databackup/full/2014-03-19_15-51-43/
利用全備的資料來恢復,--apply-log引數是應用transaction_logfile產生新的重做日誌 ,--redo-only只做redo,不做rollback,
再次執行,生成redolog,以便mysql能快速啟動
innobackupex --apply-log --redo-only /home/databackup/full/2014-03-19_15-51-43/
複製檔案到資料目錄,建議先將資料目錄中的資料打包,然後清空,否則會報錯。
innobackupex --copy-back /home/databackup/full/2014-03-19_15-51-43/
該資料許可權為mysql
chown mysql.mysql -R /var/lib/mysql
啟動mysql
驗證恢復結果
mysql> use test;
Database changed
mysql> select count(*) from book;
+----------+
| count(*) |
+----------+
| 1000 |
+----------+
1 row in set (0.00 sec)
增量備份
innobackupex --defaults-file=/etc/my.cnf --incremental-basedir=/home/databackup/full/2014-03-19_15-51-43/ --incremental /home/databackup/delta/
--incremental-basedir指向全備目錄,也可以指向最近一次增量備份的目錄
--incremental 指向本次要增量備份的目錄
上面語句執行成功之後,會在--incremental執行的目錄下建立一個時間戳子目錄,在該目錄下存放著增量備份的所有檔案
恢復
innobackupex --apply-log --redo-only BASE-DIR
innobackupex --apply-log --redo-only BASE-DIR --incremental-dir=INCREMENTAL-DIR-1
innobackupex --apply-log BASE-DIR --incremental-dir=INCREMENTAL-DIR-2BASE-DIR全備目錄,INCREMENTAL-DIR-1第一次增量的目錄,INCREMENTAL-DIR-2第二次增量的目錄
本例:
innobackupex --apply-log --redo-only /home/databackup/full/2014-03-19_15-51-43/
innobackupex --apply-log --redo-only /home/databackup/full/2014-03-19_15-51-43/ --incremental-dir=/home/databackup/delta/2014-03-19_16-23-11
如果有多個增量的話要依次把增量日誌應用到全備。
innobackupex --apply-log BASE-DIR
再次執行apply-log回滾未完成的日誌
最後複製檔案
innobackupex --copy-back BASE-DIR
該許可權,啟動mysql
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/27181165/viewspace-1125092/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- MySQL:xtrabackup備份MySql
- XtraBackup備份MySQLMySql
- innodb儲存引擎備份工具--Xtrabackup儲存引擎
- MySQL · 物理備份 · Percona XtraBackup 備份原理MySql
- 【MySql】 MySql備份工具Xtrabackup之二MySql
- 【MySql】 MySql備份工具Xtrabackup之一MySql
- MySQL 備份軟體 Xtrabackup 的 xtrabackup_binlog_pos_innodb和xtrabackup_binlog_info 檔案區別MySql
- 使用Xtrabackup遠端備份MysqlMySql
- Percona Xtrabackup 快速備份 MySQLMySql
- 配置xtrabackup備份mysql資料庫MySql資料庫
- 使用Xtrabackup備份mysql資料庫MySql資料庫
- XtraBackup 2.2.8 釋出,MySQL 備份工具MySql
- Mysql 物理備份工具xtrabackup的使用MySql
- xtrabackup備份mysql“ib_logfile0 is ofMySql
- MySQL Backup--Xtrabackup備份限速問題MySql
- 【MySQL】Xtrabackup備份及恢復指令碼MySql指令碼
- 【Mysql】xtrabackup 備份和恢復測試MySql
- (轉)使用Xtrabackup備份MySQL資料庫MySql資料庫
- MySQL備份與恢復——基於Xtrabackup物理備份恢復MySql
- mysql之 xtrabackup原理、備份日誌分析、備份資訊獲取MySql
- 【Xtrabackup】Xtrabackup備份基礎知識
- 【MySQL】xtrabackup 2.4.12備份觸發的bugMySql
- Xtrabackup備份報錯Failed to connect to MySQL serverAIMySqlServer
- MySQL Xtrabackup備份原理和實現細節MySql
- MySQL DBA備份工具Xtrabackup使用指南(轉)MySql
- mysql innobackupex xtrabackup 大資料量 備份 還原MySql大資料
- mysql備份和恢復測試(一)--xtrabackupMySql
- (轉)使用Xtrabackup備份MySQL資料庫(續)MySql資料庫
- 【Xtrabackup】Xtrabackup全備、增量備份及恢復示例
- mysql資料庫xtrabackup壓縮備份測試MySql資料庫
- 使用xtrabackup對mysql進行備份和恢復MySql
- 建立MySQL資料庫備份的好工具:XtraBackupMySql資料庫
- mysql xtrabackup在windows平臺的備份測試MySqlWindows
- 使用 xtrabackup 進行MySQL資料庫物理備份MySql資料庫
- XtraBackup完整備份與增量備份的原理
- MySQL運維實戰之備份和恢復(8.1)xtrabackup全量備份MySql運維
- XtraBackup實踐(一)備份
- Xtrabackup備份恢復原理