一、概述:
mysqldump是由MySQL-Commiunity提供的MySQL數據庫備份的工具,但是隻能用於全量備份,如果要實現增量備份需要基於binlog日誌實現。
本文介紹使用第三方軟件Percona提供的命令innobackupex做全量備份、增量備份以及恢復的方法。percona-xtrabackup主要是有兩個工具,其中一個是xtrabackup,專門用於備份InnoDB表,另一個是innobackupex,是前者封裝後的一個perl腳本,同時支持備份InnoDB和MyISAM。在針對MySQL的物理備份工具中,Percona大概是最流行也是最強大的工具。
Percona的innobackupex具有如下特點:
(1)備份過程快速、可靠;
(2)備份過程不會打斷正在執行的事務;
(3)能夠基於壓縮等功能節約磁盤空間和流量;
(4)自動實現備份檢驗;
(5)還原速度快。
本文結合計劃任務和腳本,使用Percona的innobackupex命令實現如下備份策略:
(1)每週一23點對數據庫做完全備份,腳本名稱爲allbbsdbbak.sh。
(2)每週的週二至週日23:30對數據庫做增量備份,腳本名稱爲newbbsdbdata.sh。
二、命令介紹:
1、原理:備份開始時首先會開啓一個後臺檢測進程,實時檢測mysql redo的變化,一旦發現有新的日誌寫入,立刻將日誌記入後臺日誌文件xtraback_log中,之後複製InnoDB的數據文件(系統表空間文件ibdatax),複製結束後執行flush tables with readlock,然後複製.fri、.MYI、.MYD等文件,最後執行unlock tables並停止xtrabackup_log.
2、依賴軟件:
使用percona軟件的innobackupex命令,需要安裝perl-DBD-mysql、perl-Digest-MD5、libev、percona-xtrabackup四個軟件包。
3、命令格式:
innobackupex命令的參數非常多,用於數據備份的常用參數格式如下(具體參數可參考幫助信息或者這篇文章:https://www.cnblogs.com/waynechou/p/xtrabackup_backup.html):
# innobackupex [--user=NAME] [--password=WORD] [--port=PORT] [--no-timestamp] [--databases=LIST] /backupdir
--user 備份使用的用戶名
--password 備份用戶的密碼
--port 如果是3306可以不用寫
--no-timestamp 不用日期命名備份文件存儲的子目錄名
--database "庫名"-單個庫,"庫1 庫2"-多個庫,"庫.表"-單個表
4、恢復:
(1)rm -rf /var/lib/mysql
mkdir /var/lib/mysql
(2)恢復日誌
# innobackupex --user root --password 123456 --databases "mysql sys performance_schema db1" --apply-log /allback
(3)恢復數據
# innobackupex --user root --password 123456 --databases "mysql sys performance_schema db1" --copy-back /allback
(4)chown -R mysql:mysql /var/lib/mysql
(5)重起數據庫服務
systemctl restart mysqld
(6)登錄恢復後的數據庫
# mysql -uroot -p123456
5、增量備份:
#innobackupex --user root --password 123456 --databases="系統庫列表 儲存數據庫" --incremental 目錄名 --incremental-basedir=目錄名 --no-timestamp
--incremental 目錄名 //增量備份的目錄,在備份的時候自動創建,如果提前創建好則需要該目錄下面爲空
--incremental-basedir=目錄名 //上一次備份的目錄
6、增量恢復:
#innobackupex --user root --password 123456 --databases="系統庫列表 儲存數據庫" --incremental-dir=目錄名 --no-timestamp
--incremental-dir=目錄名 //用於增量恢復的備份數據目錄
--redo-only //
(1)rm -rf /var/lib/mysql
mkdir /var/lib/mysql
(2)恢復日誌文件
# innobackupex --user root --password 123456 --apply-log --redo-only /allback
# innobackupex --user root --password 123456 --apply-log --redo-only /allback --incremental-dir=/new1
# innobackupex --user root --password 123456 --apply-log --redo-only /allback --incremental-dir=/new2
(3)恢復數據
# innobackupex --user root --password 123456 --copy-back /allback
(4)chown -R mysql:mysql /var/lib/mysql
(5)重起數據庫服務
systemctl restart mysqld
(6)登錄恢復後的數據庫
# mysql -uroot -p123456
注意:(1)innobackupex恢復數據的時候要求/var/lib/mysql目錄下面爲空的,因此一般要把三個系統庫(mysql、sys、perfomance_schema)都要備份上。
(2)/allbak目錄可以在備份的時候自動創建,如果提前創建好則需要該目錄下面爲空
(3)此命令只能實現使用InnoDB引擎庫的增量備份,其他的存儲引擎的只能全量備份
三、備份腳本
1、全量備份腳本
2、增量備份腳本
3、計劃任務