前言通常我們都是使用xtrabackup工具來備份資料庫,它是一個專業的備份工具,先來簡單介紹下它。Xtrabackuppercona提供的mysql資料庫備份工具,惟一開源的能夠對innodb和xtradb資料庫,它的增量備份不是基於二進位日誌文件來還原數據的,是基於mysql數據塊。特點:備份還... ...
前言
通常我們都是使用xtrabackup工具來備份資料庫,它是一個專業的備份工具,先來簡單介紹下它。
Xtrabackup
percona提供的mysql資料庫備份工具,惟一開源的能夠對innodb和xtradb資料庫,它的增量備份不是基於二進位日誌文件來還原數據的,是基於mysql數據塊。
特點:
- 備份還原過程快速、可靠
- 備份過程不會打斷正在執行的事務
- 能夠基於壓縮等功能節約磁碟空間和流量
- 自動實現備份檢驗
- 開源,免費
Xtrabackup用法
備份時選項
xtrabackup --backup
--user:該選項表示備份賬號
--password:該選項表示備份的密碼
--host:該選項表示備份資料庫的地址
--databases:該選項接受的參數為數據名,如果要指定多個資料庫,彼此間需要以空格隔開;如:"xtra_test dba_test",同時,在指定某資料庫時,也可以只指定其中的某張表。如:"mydatabase.mytable"。該選項對innodb引擎表無效,還是會備份所有innodb表
--defaults-file:該選項指定從哪個文件讀取MySQL配置,必須放在命令行第一個選項位置
--incremental:該選項表示創建一個增量備份,需要指定--incremental-basedir
--incremental-basedir:該選項指定為前一次全備份或增量備份的目錄,與--incremental同時使用
--incremental-dir:該選項表示還原時增量備份的目錄
--include=name:指定表名,格式:databasename.tablename
Prepare於準備選項
prepare
--apply-log:此選項作用是通過回滾未提交的事務及同步已經提交的事務至數據文件使數據文件處於一致性狀態
--use-memory:該選項表示和--apply-log選項一起使用,prepare 備份的時候,xtrabackup做crash recovery分配的記憶體大小,單位位元組。也可(1MB,1M,1G,1GB),推薦1G
--export:表示開啟可導出單獨的表之後再導入其他Mysql中
--redo-only:此選項在prepare base full backup,往其中merge增量備份時候使用
還原時選項
--copy-back:複製
--move-back:移動
備份生產的相關文件
1)xtrabackup_info:innobackupex工具執行時的相關信息,包括版本,備份選項,備份時長,備份LSN,BINLOG的位置
2)xtrabackup_checkpoints:備份類型(如完全或增量)、備份狀態(如是否已經為prepared狀態)和LSN(日誌序列號)範圍信息,每個InnoDB頁(通常為16k大小)都會包含一個日誌序列號,即LSN。LSN是整個資料庫系統的系統版本號,每個頁面相關的LSN能夠表明此頁面最近是如何發生改變的
3)xtrabackup_binlog_info:MySQL伺服器當前正在使用的二進位日誌文件及至備份這一刻為止二進位日誌事件的位置,可利用實現基於binlog的恢復
4)backup-my.cnf:備份命令用到的配置選項信息
5)xtrabackup_logfile:備份生成的日誌文件
還原註意事項
1.datadir目錄必須為空。除非指定innobackupex --force-non-emptydirectorires選項指定,否則--copy-backup選項不會覆蓋
2.restore還原之前,必須shutdown停止 MySQL服務,不能將一個運行中的實例restore到datadir目錄中
3.修改恢覆文件的許可權為mysql
4.最後一次增量備份還原要回滾事務
5.二進位安裝的mysql要是出現停止不了服務就用killall –9 mysqld 殺掉進程進而實現停止服務
實戰
規劃
1、兩台主機17和37,其中17當主mysql伺服器,37用來還原的主機,
2、目錄,1個存放完整備份的目錄,N個存放增量備份的目錄
說明:
full目錄: 存放完全備份
inc1目錄:存放第一次的增量備份
inc2目錄:存放第二次的增量備份
備份階段
1、完全備份資料庫
xtrabackup -pcentos --backup --target-dir=/backups/full/ # --backup表示備份 # --target-dir=填寫備份到哪裡
2、往表中增加數據
mysql -pcentos hellodb -e "insert students (name,age) values('gaodao01',20)"
xtrabackup –pcentos --backup --target-dir=/backups/inc1/ --incremental-basedir=/backups/full # --incremental-basedir表示基於誰的增量備份,寫上上一次的備份路徑 #
4、再次修改數據表
mysql -pcentos hellodb -e "insert students (name,age) values('gaodao02',21)"
5、第二次增量備份
xtrabackup -pcentos --backup --target-dir=/backups/inc2/ --incremental-basedir=/backups/inc1/
還原階段
說明:還原的時候我們要考慮到前幾次不要回滾,最後一次還原要回滾,還原主機要安裝xtrabackup工具
1、把備份的目錄傳送到要還原的主機上
scp -r /backups/ 192.168.43.37:/
2、停服務並清空mysql數據
systemctl stop mysqld rm -rf /app/mysql/*
3、完全備份的預處理
xtrabackup --prepare --apply-log-only --target-dir=/backups/full
# --prepare 表示還原 # --apply-log-only 表示不回滾
4、第一次增量備份預處理
xtrabackup --prepare --apply-log-only --target-dir=/backups/full --incremental-dir=/backups/inc1
# 同樣不回滾
5、第二次增量備份預處理
xtrabackup --prepare --target-dir=/backups/full --incremental-dir=/backups/inc2 # 這是最後一次,所以要回滾不完整的事務
6、複製處理好的數據到真正的存放資料庫目錄下
xtrabackup --copy-back --target-dir=/backups/full # 它會根據你的配置文件my.cnf來讀取存放位置
7、修改資料庫文件許可權
chown -R mysql.mysql /app/mysql/
以上還原到了備份時的狀態,我們備份完二次增量後又加了條記錄,還沒來得急三次增量備份就宕機了,所以再次利用二進位日誌文件還原到最新狀態
8、通過二進位文件還原到最新狀態
1)以下圖中文件記錄了還原到的位置
2)從原主機導出二進位文件日誌
mysqlbinlog --start-position=1039 /app/logs/mysql-bin.000003 >/app/binlog.sql
3)scp傳送到目標主機來還原
- 首先在配置文件中加入禁止所有人訪問選項
skip-networking
- 啟動服務
systemctl start mysqld
- 導入二進位日誌
mysql -pcentos <binlog.sql
4)進入資料庫驗證
5)OK 恢復完成,刪除配置文件中的skip-networking並重啟服務
systemctl restart mysqld
更多精彩內容請移步