1.1 Percona Xtrabackup介紹
Percona XtraBackup是世界上唯一的開源并且免費的MySQL熱備份軟體,對于InnoDB和XtraDB存儲引擎執行非阻塞備份。使用Percona XtraBackup有以下優勢:
- 備份快速可靠
- 備份期間不間斷事務處理
- 節省磁盤空間和網絡帶寬
- 提高運作時間進而加快恢複速度
- 自動備份驗證
Percona XtraBackup能夠為所有版本的Percona Server,MySQL,MariaDB進行熱備份。支援InnoDB,XtraDB,HailDB 引擎進行完全非阻塞備份。此外可以對MyISAM,Merge,Archive引擎,包括這些引擎的分區表,觸發器,資料庫選項進行備份,需要進行短暫的停止寫操作。
Percona公司的商業支援也包含Percona XtraBackup服務,我們建議在生産環境使用這些支援。
1.1.1 MySQL Backup Tool特性比較
Features | Percona XtraBackup |
License | GPL |
Price | Free |
Streaming and encryption formats | Open source |
Supported MySQL avors | MySQL, Percona Server, MariaDB, Percona XtraDB Cluster, MariaDB |
Supported operating systems | Linux |
Non-blocking InnoDB backups 非阻塞InnoDB存儲引擎備份 (注釋1) | Yes |
Blocking MyISAM backups 阻塞MyISAM存儲引擎備份 | |
Incremental backups 增量備份 | |
Full compressed backups 全量壓縮備份 | |
Incremental compressed backups 增量壓縮備份 | |
Fast incremental backups 快速增量備份 (注釋2) | |
Incremental backups with archived logs feature in Percona Server Percona Server使用歸檔日志特性進行增量備份 | |
Incremental backups with REDO log only 隻使用redo log 進行增量備份 | mysql企業版支援 |
Backup locks(Percona5.6+新特性,一個輕量級的鎖用來替代FTWRL,當複制非innodb表時不會鎖定innodb的DML操作)(注釋3) | |
Encrypted backups 加密備份 | |
Streaming backups 流式備份 | |
Parallel local backups 本地并行備份 | |
Parallel compression 并行壓縮 | |
Parallel encryption 并行加密 | |
Parallel apply-log(全量備份完成後,redo和undo事務還未進行回放,此時不能進行恢複,需要進行apply-log後才可進行恢複) | |
Parallel copy-back(将備份目錄直接拷貝到mysql資料目錄下) | |
Throttling (注釋5) | |
Partial backups 部分備份 | |
Partial backups of individual partitions 部分備份單獨分區 | |
Throttling 節流(隻對備份有效,防止過高的備份速度影響系統使用,主要指IO) | |
Backup p_w_picpath validation | |
Point-in-time recovery support 基于時間點恢複 | |
Safe slave backups(保證複制狀态一緻性,需要先停止slave sql thread并等待Slave_open_temp_tables值為0後開始進行複制 ) | |
Compact backups (當啟用此參數時,會跳過輔助索引,當壓縮備份完成後重新建立輔助索引) (注釋6) | |
Buffer pool state backups(儲存備份時buffer pool記憶體的狀态,例如熱資料,當恢複時buffer pool 會和備份時保持一緻) | |
Individual tables export(單獨表導出) | |
Individual partitions export(單獨表分區導出) | |
Restoring tables to a different server (将表在不同的server上進行恢複)(注釋8) | |
Data & index le statistics (表和索引檔案分析,此特性在read-only模式可以使用) | |
InnoDB secondary indexes defragmentation 輔助索引整理鎖片 | |
rsync support to minimize lock time (開啟此參數,備份時拷貝非innodb檔案會使用rsync代替cp,提高拷貝速度,進而縮短FTWRL時間) | |
Improved FTWRL handling(改進的FTWRL處理過程,) | |
Backup history table | |
Backup progress table | |
Ofine backups | |
Backup to tape media managers | |
Cloud backups support | |
External graphical user interfaces to backup/recover |
注釋1:當拷貝非innodb引擎資料時,innodb表會一直被鎖
注釋2:Fast incremental backups 支援Percona Server xtradb引擎開啟頁面追蹤功能
注釋3:Percona5.6+新特性,一個輕量級的鎖用來替代FTWRL,當複制非innodb表時不會鎖定innodb的DML操作
注釋4:Percona XtraBackup支援所有備份方式的加密,mysql企業版隻支援單獨檔案加密
注釋5:Percona XtraBackup可根據IO瓶頸進行限制讀寫速度,企業版支援在操作過程中增加sleep time
注釋6:當啟用此參數時,會跳過輔助索引,當壓縮備份完成後重新建立輔助索引。企業版會跳過索引頁,在恢複時重新插入。
注釋7:Percona XtraBackup可以在任何版本的全量備份中導出表
注釋8:使用Percona XtraBackup導出的表能夠導入Percona Server5.1,5.5,5.6+,MySQL 5.6+.企業版隻能導入到Percona Server5.6+,MySQL5.6+,MariaDB10.0+
1.1.2 Percona XtraBackup有哪些特性
- 不停機進行innodb引擎備份建立
- 進行增量備份
- 使用流壓縮直接備份到其他server
- 線上遷移表
- 友善快捷的建立從庫
- 備份過程中不增加server的負載
2.1 Percona Xtrabackup安裝(略)
wget https://www.percona.com/downloads/XtraBackup/Percona-XtraBackup-2.2.13/binary/tarball/percona-xtrabackup-2.2.13-Linux-x86_64.tar.gz
tar -zxf percona-xtrabackup-2.2.13-Linux-x86_64.tar.gz
可執行檔案在percona-xtrabackup-2.2.13-Linux-x86_64/bin/下
3.1 Percona Xtrabackup使用手冊
3.1.1 innobackupex腳本
innobackupex是對 xtrabackup使用perl腳本進行的封裝。整合了xtrabackup、檔案拷貝、流以及其他的一些有用的内容。能夠進行各種存儲引擎的基于時間點的恢複。
使用innobackupex需要的條件
連接配接權限需求:
當建立備份或者恢複時,Percona XtraBackup需要去連接配接資料庫并在資料庫上做一些操作以及對資料庫目錄做一些操作,此時必須先給相應的使用者賦給資料庫的執行權限和作業系統相應的讀寫執行權限和起停服務權限。
連接配接資料庫示例:
$ innobackupex --user=DBUSER --password=SECRET /path/to/backup/dir/
$ innobackupex --user=LUKE --password=US3TH3F0RC3 --stream=tar ./ | bzip2
$ xtrabackup --user=DVADER --password=14MY0URF4TH3R --backup --target-dir=/data/bkps/
如果不适用--user,那麼預設會使用目前的作業系統使用者
有關連接配接其他的選項:
Option | Desc |
--port | mysql端口,通過tcp連接配接使用 |
--socket | mysql sock檔案,本地連接配接使用 |
--host | mysql ip位址,通過tcp連接配接使用 |
Permissions and Privileges Needed
建立連接配接後,執行備份需要DATADIR檔案系統級别的READ,WRITE,EXECUTE權限。
資料庫使用者需要以下權限來執行表或者資料庫級别的備份:
- RELOAD and LOCK TABLES(加--no-lock不需要LOCK權限):拷貝檔案(FLUSH TABLES WITH READ LOCKandFLUSH ENGINE LOGS),Backup Locks(LOCK TABLES FOR BACKUP and LOCK BINLOG FOR BACKU)特性使用時。
- REPLICATION CLIENT :擷取binlog位置時
- CREATE TABLESPACE:導入資料時
- PROCESS:檢視MySQL上運作的線程時
- SUPER:停止複制環境SLAVE線程時或者XtraDB Changed Page Tracking 開啟,或者啟用 Improved FLUSH TABLES WITH READ LOCK handling
- CREATE:建立PERCONA_SCHEMA.xtrabackup_history資料庫和表時,即加參數--history
- INSERT: 增加曆史記錄到PERCONA_SCHEMA.xtrabackup_history
- SELECT:使用innobackupex --incremental-history-name 或者 innobackupex --incremental-history-uuid時從PERCONA_SCHEMA.xtrabackup_history表查找innodb_to_lsn values
建立一個全備所需要的最小權限:
mysql> CREATE USER 'bkpuser'@'localhost' IDENTIFIED BY 's3cret';
mysql> GRANT RELOAD, LOCK TABLES, REPLICATION CLIENT ON *.* TO 'bkpuser'@'localhost'; mysql> FLUSH PRIVILEGES;
備份周期-全備
使用innobackupex建立一個備份
$ innobackupex --user=DBUSER --password=DBUSERPASS /path/to/BACKUP-DIR/
--user=DBUSER:指定資料庫使用者
--password=DBUSERPASS:指定資料庫密碼
/path/to/BACKUP-DIR/:指定備份路徑
以下是備份輸出,其中備份會存放在/path/to/BACKUP-DIR/2013-03-25_00-00-09下
innobackupex: Backup created in directory '/path/to/BACKUP-DIR/2013-03-25_00-00-09' innobackupex: MySQL binlog position: filename 'mysql-bin.000003', position 1946 111225 00:00:53 innobackupex: completed OK!
其他建議的選項:
--no-timestamp:不會建立基于時間點的目錄,備份到指定目錄下,指定的目錄必須不存在
--defaults-file:指定MySQL預設讀取的配置檔案,如果不指定會預設從/etc/my.cnf讀取
./innobackupex --user=bkpuser --password=bkppassword /app/soft/backup/ --no-timestamp --socket=/tmp/mysql3336.sock --defaults-file=/app/data/mysql/3336/etc/my.cnf
準備一個全量備份:
當建立好一個備份時,此時備份還不能用于恢複,redo logs裡的未送出的事務以及送出的事務還未進行重放,prepare此步驟就是将redo logs裡的事務持久化,可使用參數--apply-log:
innobackupex --apply-log /app/soft/backup/2016-01-06_16-35-38/
輸出尾行為completed OK該備份可正常進行使用:
。。。。。。
InnoDB: Shutdown completed; log sequence number 1682454
160106 16:39:58 innobackupex: completed OK!
--apply-log主要目的是将已送出事務重做持久化,未送出事務復原。
prepare 其他參數:
--use-memory 指定記憶體,記憶體越大prepare速度越快,取決于作業系統記憶體大小
innobackupex --apply-log /app/soft/backup/2016-01-06_16-35-38/ --use-memory=2G
使用innobackupex 恢複完全備份