Percona XtraBackup 是基于MySQL服務器的開源熱備份工具;支持的數據庫 Percona , MySQL, MariaDB;支持數據庫引擎 InnoDB, XtraDB, HailDB,(MyISAM, Merge,Archive 需暫停寫);
特性:1. 快速可靠地完成備份2. 備份期間不間斷事務處理3. 節省磁盤空間和網絡帶寬4. 自動備份驗證5. 更快的恢復時間6. 進行差異備份7. 更容易在線創建備庫8. 支持備份加密
備份過程:
記錄日志序列號 (LSN) 復制數據文件XtraBackup啟用后臺進程監控事務日志文件,并復制變更日志
XtraBackup 下載地址:https://www.percona.com/downloads/XtraBackup/
XtraBackup 安裝:
tar zxvf percona-xtrabackup-2.4.5-linux-x86_64.tar.gzmv percona-xtrabackup-2.4.5-Linux-x86_64 /usr/local/xtrabackupln -s /usr/local/xtrabackup/bin/innobackupex /usr/bin/innobackupexln -s /usr/local/xtrabackup/bin/xbcloud /usr/bin/xbcloudln -s /usr/local/xtrabackup/bin/xbcloud_osenv /usr/bin/xbcloud_osenvln -s /usr/local/xtrabackup/bin/xbcrypt /usr/bin/xbcryptln -s /usr/local/xtrabackup/bin/xbstream /usr/bin/xbstreamln -s /usr/local/xtrabackup/bin/xtrabackup /usr/bin/xtrabackupxtrabackup : 備份數據庫(InnoDB和XtraDB)innobackupex : 備份數據庫(MyISAM;perl腳本對xtrabackup進行封裝)xbcrypt : 加密解密備份文件xbstream : 壓縮或自定流格式xbcloud : 從云上傳或下載 xbstream 文件xbcloud_osenv :備份還原所需權限:
系統權限:數據庫目錄的 READ , WRITE , EXECUTE數據庫權限:RELOAD , LOCK TABLES , REPLICATION CLIENT , CREATE TABLESPACE , PROCESS , SUPER , CREATE , SELECTxtrabackup 配置:命令行或 /etc/my.cnf讀取模塊:[mysqld] 和 [xtrabackup] ([xtrabackup] 優先讀取)定義備份文件存儲位置兩種方法:方法一:xtrabackup --backup --target-dir=/data/backups/方法二:[xtrabackup]target_dir = /data/backups/備份時需指定命令 --backup ,備份不會覆蓋已存在的文件,存在則備份失敗。備份可隨時取消,對數據庫無影響。注:xtrabackup只備份數據文件,并不備份數據表結構(.frm),恢復時必須存在表結構(.frm)。增量備份:每個數據頁都有一個日志序列號(LSN),LSN 是整個數據庫的系統版本號,LSN 都記錄最近的變化。所以增量備份會復制那些自上次全備或曾備以來變化的頁面。當前 my.cnf 未進行配置,基本如下:
# cat /etc/my.cnf [mysqld] port=3306 user=mysql server_id = 1 basedir=/usr/local/mysql datadir=/usr/local/mysql/data socket=/tmp/mysql.sock pid-file=/var/run/mysqld/mysqld.pid log-error=/var/log/mysqld.logautocommit = 1 skip-name-resolveskip-external-lockinglower_case_table_names=1character_set_server=utf8 default_storage_engine = InnoDBexplicit_defaults_for_timestamp = 1transaction_isolation = READ-COMMITTEDskip-external-locking完整備份#全部備份innobackupex --user=root --passWord=123456 /data/backups/innobackupex --defaults-file=/etc/my.cnf --user=root --password=123456 /data/backups/#單庫備份innobackupex --user=root --password=123456 --database=test /data/backups/#壓縮備份innobackupex --user=root --password=123456 --stream=tar /data/backups | gzip > /data/backups/`date +%F_%H-%M-%S`.tar.gz #不創建時間戳目錄,所有文件都在備份目錄下(--no-timestamp)innobackupex --user=root --password=123456 /data/backups/ --no-timestampmkdir /data/backups/fullbackup20170201innobackupex --user=root --password=123456 /data/backups/fullbackup20170201/ --no-timestamp完整備份還原#停止服務service mysqld stop#保存備份(實際只還原 data 中的數據,data目錄需為空)mv /usr/local/mysql /usr/local/mysql_bak mv /usr/local/mysql/data /usr/local/mysql/data_bak #應用日志保證數據一致性(撤銷或重播事務 --apply-log);可指定內存,越大會越好(默認100MB)innobackupex --defaults-file=/etc/my.cnf --apply-log --use-memory=1G /data/backups/2017-02-09_15-46-04# --move-back 比 --copy-back 更快(選擇其中一種即可)innobackupex --defaults-file=/etc/my.cnf --user=root --copy-back /data/backups/2017-02-09_15-46-04#設置用戶&組chown -R mysql:mysql /usr/local/mysql/data#啟動服務service mysqld start增量備份測試1. 完整備份,更名innobackupex --user=root --password=123456 /data/backups/mv /data/backups/2017-02-09_16-13-26 /data/backups/full_backuptest2. 創建測試庫、表、記錄mysql> create database testdb;mysql> use testdb;mysql> create table testtab(id int(11) NULL, name varchar(20) NULL) ENGINE=innodb;mysql> insert into testtab values(1,'a');mysql> select * from testtab;3.創建第一次增量備份(--incremental-basedir 為全備目錄;--incremental 為增量保存目錄)innobackupex --defaults-file=/etc/my.cnf --user=root --password=123456 --incremental-basedir=/data/backups/full_backuptest --incremental /data/backups/mv /data/backups/2017-02-09_16-23-36 /data/backups/incr_backuptest014. 新增記錄mysql> insert into testtab values(2,'b'),(3,'c');mysql> select * from testtab;5.創建第二次增量備份(--incremental-basedir 上次增量目錄;--incremental 為新的增量保存目錄)innobackupex --defaults-file=/etc/my.cnf --user=root --password=123456 --incremental-basedir=/data/backups/incr_backuptest01 --incremental /data/backups/mv /data/backups/2017-02-09_16-30-05 /data/backups/incr_backuptest026. 表被刪除了!mysql> drop table testtab;其他增量備份方法:#查看備份文件的 lsn 信息# cat full_backuptest/xtrabackup_checkpointsbackup_type = full-backupedfrom_lsn = 0to_lsn = 12655760last_lsn = 12655769compact = 0recover_binlog_info = 0# cat incr_backuptest01/xtrabackup_checkpoints backup_type = incrementalfrom_lsn = 12655760to_lsn = 12660175last_lsn = 12660184compact = 0recover_binlog_info = 0# cat incr_backuptest02/xtrabackup_checkpoints backup_type = incrementalfrom_lsn = 12660175to_lsn = 12662078last_lsn = 12662087compact = 0recover_binlog_info = 0#增量備份另一種方法:查看 xtrabackup_checkpoints ,也可以從 to_lsn 開始增量備份#innobackupex --defaults-file=/etc/my.cnf --user=root --password=123456 --incremental /data/backups/ --incremental-lsn=12655760#innobackupex --defaults-file=/etc/my.cnf --user=root --password=123456 --incremental /data/backups/ --incremental-lsn=12660175增量備份還原:#增量備份整合到完整備份中innobackupex --defaults-file=/etc/my.cnf --user=root --apply-log --redo-only /data/backups/full_backuptestinnobackupex --defaults-file=/etc/my.cnf --user=root --apply-log --redo-only /data/backups/full_backuptest --incremental-dir=/data/backups/incr_backuptest01innobackupex --defaults-file=/etc/my.cnf --user=root --apply-log /data/backups/full_backuptest --incremental-dir=/data/backups/incr_backuptest02#停止服務service mysqld stop#當前數據作為臨時備份mv /usr/local/mysql/data /usr/local/mysql/data_bak # 還原innobackupex --defaults-file=/etc/my.cnf --user=root --copy-back /data/backups/full_backuptest#設置用戶&組chown -R mysql:mysql /usr/local/mysql/data#啟動服務service mysqld start參考:Percona XtraBackup - Documentation
新聞熱點
疑難解答