MySQL(MEB) Backup & Restore
最近使用了企業版MySQL,發現有很多改變。新增了 mysql enterprise monitor、MySQL企業版備份工具(MEB) MySQL Enterprise Backup
這篇文章先來講 MySQL Enterprise Backup(MEB) 。
對資料庫管理者來說,備份跟還原是很重要的,如果資料發生遺失,會造成很大的後果,甚至造成公司有很大的損失。
做備份排程之前,必須要考慮到備份的週期是不是系統能承受的恢復時間,也要避免在系統忙碌的時候做備份。
MySQL Enterprise Backup 工具
MEB 可以備份所有儲存引擎,備份能夠壓縮或驗證備份檔、還原的速度非常的快。
MEB 備份分為三種類型,分為full backup(完整備份)、different
backup(差異備份)、incremental backup(增量備份)。
- 完整備份:備份完整的資料。
- 差異備份:備份上一次完整備份到現在的資料變化,還原時必須先還原上一次完整備份,再還原差異備份的資料。
- 增量備份:備份上一次備份(完整、差異、增量)到現在的資料變化,在還原時必須依序的還原回來。
備份操作可以參考官網:
https://dev.mysql.com/doc/mysql-enterprise-backup/8.0/en/backup-commands.html
MySQL
Full Backup
mysqlbackup --user=root
--password=xxxx --socket=/mnt1/mysql-data/mysql.sock --limit-memory=1024
--read-threads=2 --process-threads=5 --write-threads=2 --no-locking=true
--backup-image=/backup/MEB_`date +%Y%m%d`/full.mbi --backup-dir=/backup/MEB_`date +%Y%m%d`
backup-to-image
MySQL incrementall Backup
mysqlbackup --user=root
--password=xxxx --socket=/mnt1/mysql-data/mysql.sock --limit-memory=1024
--read-threads=2 --process-threads=5 --write-threads=2 --no-locking=true
--incremental --incremental-base=history:last_backup
--backup-dir=/backup/INCR_`date +%Y%m%d` --backup-image=inc_bak.mbi
--with-timestamp backup-to-image
PS: incremental-base=history:last_backup 直接使用 history:last_backup 代替上一次的備份,省去人工尋找目錄的麻煩,MEB會自動到 backup_history 表中查找上一次備份的目錄。
#Restore image#
先還原全備,還原資料庫備份之前必須做完成以下步驟:
- 關閉 mysqld 服務
- 清空 mysql 的 datadir 目錄
還原全備
mysqlbackup
--defaults-file=/etc/my.cnf --limit-memory=1024 --read-threads=10
--process-threads=15 --write-threads=10 --datadir=/mnt/mysql-data
--backup-image=/backup/MEB/full.mbi --backup-dir=/backup/restore-tmp
copy-back-and-apply-log
還原增備
mysqlbackup
--defaults-file=/etc/my.cnf --limit-memory=1024 --read-threads=10
--process-threads=15 --write-threads=10 --backup-image=/backup/INCR_20220912/2022-09-12_12-00-01/inc_bak.mbi
--backup-dir=/backup/restore-tmp_`date +%Y%m%d` --datadir=/mnt/mysql-data
--incremental copy-back-and-apply-log
多個增量還原,只需要多次執行上面的命令即可。
注意 --backup-image 每次都要用當前增量備份的目錄。
後續研究 --incremental=page-track 參數
##Incremental Backup Using Page Tracking##
Install the mysqlbackup component, which comes with the MySQL Enterprise Server 8.0 installation, by running this command at a mysql client connected to the server:
INSTALL COMPONENT "file://component_mysqlbackup";
在全備前開啟page-track
Start page tracking with the following function:
SELECT mysqlbackup_page_track_set(true);
The LSN value starting from which changed pages have been tracked is returned by this function:
SELECT mysqlbackup_page_track_get_start_lsn();
You can stop page tracking with the following function:
SELECT mysqlbackup_page_track_set(false);
資料來源: https://dev.mysql.com/doc/mysql-enterprise-backup/8.0/en/mysqlbackup.incremental.html#mysqlbackup.page-tracking.incremental
##MySQL --incremental=page-track 增量備份##
mysqlbackup --user=root --password=xxxx --socket=/mnt1/mysql-data/mysql.sock --limit-memory=1024 --read-threads=2 --process-threads=5 --write-threads=2 --no-locking=true -- --incremental=page-track --incremental-base=history:last_backup --backup-dir=/backup/INCR_`date +%Y%m%d` --backup-image=inc_bak.mbi backup-to-image
使用了 incremental=page-track 這參數
利用 LSN 準確跟蹤上次備份之後被修改頁面,僅增備這些頁面,效率最快。