2022年9月15日 星期四

MySQL(MEB) Backup & Restore

 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#

先還原全備,還原資料庫備份之前必須做完成以下步驟:

  1. 關閉 mysqld 服務
  2. 清空 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 準確跟蹤上次備份之後被修改頁面,僅增備這些頁面,效率最快。







沒有留言: