MySQL-Xtrabackup備份還原



前言

通常我們都是使用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個存放增量備份的目錄

image

說明:

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)"

image
3、第一次增量備份

xtrabackup –pcentos --backup --target-dir=/backups/inc1/ --incremental-basedir=/backups/full
# --incremental-basedir表示基於誰的增量備份,寫上上一次的備份路徑
#

image

4、再次修改數據表

mysql -pcentos hellodb -e "insert students (name,age) values('gaodao02',21)"

image

5、第二次增量備份

xtrabackup -pcentos --backup --target-dir=/backups/inc2/ --incremental-basedir=/backups/inc1/

image

還原階段

說明:還原的時候我們要考慮到前幾次不要回滾,最后一次還原要回滾,還原主機要安裝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)以下圖中文件記錄了還原到的位置

image

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)進入數據庫驗證

image

5)OK 恢復完成,刪除配置文件中的skip-networking並重啟服務

systemctl restart mysqld




更多精彩內容請移步

http://www.cnblogs.com/xsuid/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM