Xtrabackup備份與恢復mysql
1.4 完整備份與恢復... 5socket
Xtrabackup是由percona開源的免費數據庫熱備份軟件,它能對InnoDB數據庫和XtraDB存儲引擎的數據庫非阻塞地備份(對於MyISAM的備份一樣須要加表鎖);mysqldump備份方式是採用的邏輯備份,其最大的缺陷是備份和恢復速度較慢,若是數據庫大於50G,mysqldump備份就不太適合。
備份開始時首先會開啓一個後臺檢測進程,實時檢測mysql redo的變化,一旦發現redo中有新的日誌寫入,馬上將日誌記入後臺日誌文件xtrabackup_log中。以後複製innodb的數據文件和系統表空間文件ibdata1,待複製結束後,執行flush tables with read lock操做,複製.frm,MYI,MYD,等文件(執行flush table swith read lock的目的是爲了防止數據表發生DDL操做,而且在這一時刻得到binlog的位置)最後會發出unlock tables,把表設置爲可讀可寫狀態,最終中止xtrabackup_log。
因爲新的MySQL重作日誌和數據字典格式,8.0版本只支持mysql8.0和percona8.0,下載地址以下:
https://www.percona.com/downloads/Percona-XtraBackup-LATEST/
早於mysql8.0的版本須要使用xtrabackup2.4備份和恢復,下載地址以下:
https://www.percona.com/downloads/Percona-XtraBackup-2.4/
安裝依賴包
yum install perl-DBD-MySQL
yum -y install rsync perl l perl-Digest-MD5
wget ftp://rpmfind.net/linux/dag/redhat/el6/en/x86_64/dag/RPMS/libev-4.15-1.el6.rf.x86_64.rpm
rpm -ivh libev-4.15-1.el6.rf.x86_64.rpm
rpm -ivh percona-xtrabackup-24-2.4.8-1.el7.x86_64.rpm
#查看安裝版本
xtrabackup -v
xtrabackup --help
選項 | 描述 |
---|---|
-u, --user=name | 用戶 |
-p, --password=name | 密碼 |
-P, --port=# | 端口 |
-S, --socket=name | 套接字 |
--backup | 將備份數據恢復到目標目錄 |
--databases | 備份數據庫,多個以空格分隔,默認備份全部庫 |
--databases-file=name | 備份數據庫位於文件中 |
--tables=name | 正則過濾表名 |
--tables-file=name | 備份表位於文件中,格式database.table |
--defaults-file | 指定my.cnf配置文件 |
--apply-log | 日誌回滾 |
--incremental | 增量備份 |
--incremental-basedir | 基於上次增量備份而增量備份 |
--redo-only | 合併徹底備份和增量備份文件 |
--copy-back | 將備份數據恢復到數據庫 |
--no-timestramp | 生成備份文件不以時間戳爲目錄名 |
--stream | 流的格式作備份, 將備份歸檔, --stream-tar |
--remote-host=user@ip DST_DIR | 備份到遠程主機 |
innobackupex --defaults-file=/etc/my.cnf--host=localhost --user=root --password=123456 --port=3306--socket=/tmp/mysql.sock /opt/backup
innobackupex --defaults-file=/etc/my.cnf--host=localhost --user=root--password=123456 --port=3306 --socket=/tmp/mysql.sock --copy-back/opt/backup/2020-04-25_22-12-32
chown mysql . -R
systemctl restart mysqld
backup-my.cnf:記錄innobackup使用到mysql參數
xtrabackup_binary:備份中用到的可執行文件
xtrabackup_checkpoints:記錄備份的類型、開始和結束的日誌序列號
xtrabackup_logfile:備份中會開啓一個log copy線程,用來監控innodb日誌文件(ib_logfile),若是修改就會複製到這個文件
增量備份
上一步全量備份生成目錄:2020-04-25_22-12-32
innobackupex --defaults-file=/etc/my.cnf--host=localhost --user=root --password=123456 --port=3306--socket=/tmp/mysql.sock --incremental /opt/backup--incremental-basedir=/opt/backup/2020-04-25_22-12-32
生成目錄:2020-04-25_22-18-35
innobackupex --defaults-file=/etc/my.cnf--host=localhost --user=root --password=123456 --port=3306--socket=/tmp/mysql.sock --incremental /opt/backup--incremental-basedir=/opt/backup/2020-04-25_22-18-35
生成目錄:2020-04-25_22-23-49
備份恢復
備份恢復思路:將增量備份一、增量備份2...合併到完整備份,加到一塊兒出來一個新的完整備份,將新的完整備份以拷貝的形式到數據庫空目錄。
#xtrabackup把備份過程當中可能有還沒有提交的事務或已經提交但未同步數據文件的事務,寫到xtrabackup_logfile文件,因此要先經過這個日誌文件回滾,把未完成的事務同步到備份文件,保證數據文件處於一致性。
innobackupex --apply-log --redo-only/opt/backup/2020-04-25_22-12-32
1.5.4 合併增量備份1到完整備份
innobackupex --apply-log --redo-only/opt/backup/2020-04-25_22-12-32--incremental-dir=/opt/backup/2020-04-25_22-18-35
1.5.5 合併增量備份2到完整備份
innobackupex --apply-log --redo-only/opt/backup/2020-04-25_22-12-32 --incremental-dir=/opt/backup/2020-04-25_22-23-49
備份恢復:
innobackupex --defaults-file=/etc/my.cnf--copy-back /opt/backup/2020-04-25_22-12-32
查看恢復日誌序列號
innobackupex --defaults-file=/etc/my.cnf--copy-back /opt/backup/2020-04-25_22-12-32
chown -R mysql /usr/local/mysql/
1.5.8 啓動MySQL,查看數據庫恢復狀況
systemctl restart mysqld