主要是在上一篇 實作簡單的MariaDB Replication中,
使用mysqldump的備份還原來架設replication.
而本文中除了介紹innobackupex備份還原外,
還補充說明使用innobackupex來設定replication的情況.
首先,innobackupex與xtrabackup的差異可以看xtrabackup 详解(已纠正)
一般會使用innobackex,因為他本身就是調用xtrabackup的功能備份innodb,還多了對其他Data Engine的支援.
(但在2.3以後xtrabackup重構,innobackup只是xtrabackup的軟連結)
首先我覺得google到的幾張圖很清楚的解釋備份機制,所以放上來並說明
首先,MySql-Like的Innodb資料庫寫入,有redo/undo的日誌機制來實現acid,
所以在備份時就會產生xtrabackup_log以便應用在熱備份期間變動部分.
另外在備份非innodb的部分會藉由掛上read lock取得完整的資料內容.
安裝
參考官方安裝即可,https://www.percona.com/doc/percona-xtrabackup/LATEST/installation/yum_repo.html
備份
完整
innobackupex -user=xxx -password=ooo /full_backup_path/
增量(僅對innodb而言,其他data engine是全備)
innobackupex -user=xxx -password=ooo --incremental --incremental-basedir=/full_backup_path/timestamp /incremental_backup_path/
還原
使用完整備份(innobackupex --apply-log等同於xtrabackup --prepare)
innobackupex --apply-log /full_backup_path/timestamp
innobackupex --defaults-file=/path/my.cnf --copy-back /full_backup_path/timestamp
chown -R mysql:mysql /var/lib/mysql
使用增量備份 => 先對全備prepare,再對增量做prepare,除了最後一個prepare,其他都需要加--redo-only
innobackupex --apply-log --redo-only /full_backup_path/timestamp
innobackupex --apply-log /full_backup_path/timestamp --incremental-dir=/incremental_backup_path/timestamp
innobackupex --defaults-file=/path/my.cnf --copy-back /full_backup_path/timestamp
chown -R mysql:mysql /var/lib/mysql
如果有壓縮/解壓需求,請參考 官網Making a Compressed Backup 與 RESTORING XBSTREAM BACKUP CREATED BY PERCONA XTRABACKUP
============關於壓縮與串流的使用============
當使用壓縮備份時
參數 --compress --compress-threads=#
串流備分,
參數 --stream=STREAMNAME (有tar和xbstream兩種)
innobackupex -user=xxx -password=ooo --stream=xbstream --compress --compress-threads=# /mysql_data_path > /backup_path/backup_filename.xbstream
還原使用參數, 若有使用串流(stream),則需要先解開,得到*.qp檔
xbstream -x < /backup_path/backup_filename.xbstream
需再次解開(需要安裝qpress套件, Mariadb Tools 可以找到rpm檔),得到正常可用的檔案
innobackupex --decompress /backup_path/ => 此語法在xtrabackup 2.1.4之後支援
接著才是正常的innobackupex --apply-log 再 innobackupex --copy-back
======================================
Replication => 官網How to setup a slave for replication in 6 simple steps with Percona XtraBackup
如果是從master備份,依照上面的備份方式即可,
如果是從slave備份,備份時使用--slave-info參數,
(可再額外附加--safe-slave-backup,則在備份期間會中斷SQL_thread和檢查Slave_open_temp_tables數量是否為0)
會將master的binlog 檔名和位置記錄在xtrabackup_slave_info檔中.
其他的剩下的設定部分,參考前文 實作簡單的MariaDB Replication
遠端備分
因工作環境需要輩分遠端的機器的DB,使用--host參數後發現,
還會讀取本地設定檔,找本地sock file.並不能熱備分遠端的DB.
後來採用stream的方式,邊備分邊傳送,語法如下,參考Percona Xtrabackup小筆記
innobackupex --user=name --password=name [--compress] --stream=tar|xbstream [--slave-info] --parallel=# /any_path/ | ssh user@ip "cat - > /full_backup_path/bak.tar|bak.xbstream"
這樣在備份本機並不會佔用空間.
注意 : ssh需要有對應權限
參考
MySQL · 物理备份 · Percona XtraBackup 备份原理
官網innobackupex option reference
留言列表