XtraBackup物理備份(未測試)
XtraBackup物理備份
Percona XtraBackup是世界上唯一的開源,免費的MySQL熱備份軟件,為InnoDB和XtraDB 數據庫執行非阻塞備份。使用Percona XtraBackup,可以實現以下優勢:
-
快速可靠地完成的備份
-
備份期間的不間斷事務處理
-
節省磁盤空間和網絡帶寬
-
自動備份驗證
-
創建熱InnoDB備份,而不暫停數據庫
-
對MySQL進行增量備份
-
將壓縮的MySQL備份壓縮到另一個服務器
-
在MySQL服務器之間移動表
-
輕松創建新的MySQL主從
-
備份MySQL,而不向服務器添加負載
Percona XtraBackup為所有版本的Percona Server,MySQL和MariaDB進行MySQL熱備份,壓縮和增量MySQL備份。Percona XtraBackup與MySQL,MariaDB和Percona Server配合使用。它支持完全非阻塞備份InnoDB,XtraDB和HailDB 存儲引擎。
Percona XtraBackup工作原理
Percona XtraBackup是基於InnoDB的崩潰恢復功能。復制InnoDB數據文件,導致內部不一致的數據; 但隨後它對文件執行崩潰恢復,使它們再次成為一致,可用的數據庫。
這是因為InnoDB維護一個重做日誌,也稱為事務日誌。這包含對InnoDB數據的每個更改的記錄。當InnoDB 啟動時,它會檢查數據文件和事務日誌,並執行兩個步驟。它將提交的事務日誌條目應用於數據文件,並對修改數據但未提交的任何事務執行撤銷操作。
Percona XtraBackup通過記錄日誌序列號(LSN)開始工作,然後復制掉數據文件。這需要一小會時間來完成,所以如果文件正在改變,那麽它們反映了數據庫 在不同時間點的狀態。同時,Percona XtraBackup運行一個後臺進程,監視事務日誌文件,並從中復制更改。Percona XtraBackup需要不斷地這樣做,因為事務日誌是以循環方式編寫的,並且可以在一段時間後重復使用。Percona XtraBackup從數據文件開始執行以來每次更改都需要事務日誌記錄。
Percona XtraBackup將使用備份鎖 ,作為一個輕量級替代。此功能在Percona Server 5.6+中可用。Percona XtraBackup使用這個自動復制非InnoDB數據,以避免阻塞修改InnoDB表的DML查詢。當服務器支持備份鎖時,xtrabackup將首 先復制InnoDB數據,運行並復制MyISAM表和.frm文件。一旦完成,文件的備份將開始。它將備 份.frm,.MRG,.MYD,.MYI,.TRG,FLUSH TABLES WITH READ LOCKLOCK TABLES FOR BACKUP.par
註意
鎖定只對MyISAM和其他非InnoDB表,只有 在 Percona XtraBackup完成所有InnoDB / XtraDB數據和日誌後備份。Percona XtraBackup將使用備份鎖 ,作為一個輕量級替代。此功能在Percona Server 5.6+中可用。Percona XtraBackup使用這個自動復制非InnoDB數據,以避免阻塞修改InnoDB表的DML查詢。 FLUSH TABLES WITH READ LOCK
之後,xtrabackup將使用阻止所有操作,可能更改二進制日誌位置或 或 報告。然後xtrabackup將完成復制REDO日誌文件和獲取二進制日誌坐標。在這完成之後xtrabackup將解鎖二進制日誌和表。 LOCK BINLOG FOR BACKUPExec_Master_Log_PosExec_Gtid_SetSHOW MASTER/SLAVE STATUS
最後,二進制日誌位置將被打印到STDERR和xtrabackup 將退出返回0如果一切正常。
需要註意的是STDERR的xtrabackup不是寫在任何文件中。您必須將其重定向到一個文件,例如,。xtrabackup OPTIONS2> backupout.log
它還將在備份的目錄中創建以下文件。
在準備階段,Percona XtraBackup使用復制的事務日誌文件對復制的數據文件執行崩潰恢復。完成此操作後,數據庫就可以恢復和使用。
備份的MyISAM和InnoDB表最終將彼此一致,因為在準備(恢復)過程之後,InnoDB的數據會前滾到備份完成的點,而不會回滾到該點開 始。這個時間點匹配所采取的位置,因此MyISAM數據和準備的 InnoDB數據是同步的。FLUSH TABLES WITHREAD LOCK
簡而言之,這些工具允許您通過復制數據文件,復制日誌文件以及將日誌應用到數據的各種組合來執行流式和增量備份等操作。
還原備份
要使用xtrabackup恢復備份,您可以使用 或選項。xtrabackup –copy-backxtrabackup –move-back
xtrabackup將從my.cnf變量datadir, innodb_data_home_dir,innodb_data_file_path,innodb_log_group_home_dir中讀取, 並檢查目錄是否存在。
這將復制MyISAM表,索引等 (.FRM,.MRG, .MYD,.MYI,.TRG,.TRN,.ARM, .ARZ,.CSM,.CSV,par和.opt的文件)首 先,InnoDB的下一步是表和索引,最後是日誌文件。它將在復制文件時保留文件的屬性,mysql在啟動數據庫服務器之前可能需要將文件的所有權更改 為,因為它們將由創建備份的用戶擁有。
或者,該選項可用於恢復備份。此選項 與唯一的區別是,它不是復制文件,而是將其移動到目標位置。由於此選項刪除備份文件,因此必須謹慎使用。在沒 有足夠的可用磁盤空間來保存這兩個數據文件及其備份副本的情況下,此功能非常有用。xtrabackup –move- backxtrabackup –copy-back
安裝XtraBackup
安裝XtraBackup 源
[[email protected] ~]# uname -r
3.10.0-327.el7.x86_64
yum -y install http://www.percona.com/downloads/percona-release/redhat/0.1-4/percona-release-0.1-4.noarch.rpm
安裝
yum -y install percona-xtrabackup-24
創建連接用戶並受權
mysql> CREATE USER [email protected] IDENTIFIED BY ‘goyun.org‘; mysql> GRANT RELOAD, LOCK TABLES, PROCESS, REPLICATION CLIENT ON *.* TO [email protected]; mysql> FLUSH PRIVILEGES;
完整備份
(1)xtrabackup只能備份innodb和xtradb兩種引擎的表,而不能備份myisam引擎的表;
(2)innobackupex是一個封裝了xtrabackup的Perl腳本,支持同時備份innodb和myisam,但在對myisam備份時需要加一個全局的讀鎖。還有就是myisam不支持增量備份。
$ xtrabackup --user=zhengda --password=goyun.org --backup \ --target-dir=/data/backup $ innobackupex --user=zhengda --password=goyun.org /path/ to /backup/dir/ $ innobackupex --user=zhengda --password=goyun.org --stream=tar ./ | bzip2 -
備份到/data/backup下
備份所有庫:$ innobackupex --defaults-file=/etc/my.cnf--user=zhengda --password=goyun.org --socket=/tmp/mysql.sock /data/backup 備份兩個庫:$ innobackupex --databases="db1 db2"--defaults-file=/etc/my.cnf--user=zhengda --password=goyun.org --socket=/tmp/mysql.sock /data/backup
增量備份
註:第一次增量備份要建立在完整備份之上才可以
–incremental /data/backup1 指定增量備份存放的目標目錄
–incremental-basedir=/data/backup 指定完整備份的目錄
$ innobackupex --defaults-file=etc/my.cnf --user=zhengda --password=goyun.org --socket=/tmp/mysql.sock --incremental /data/backuup1 --incremental-basedir=/data/backup/#會根據當天時間生成個目錄
進行第二次增量備份,需要指定上一次增量備份的目錄
–incremental /data/backup2 指定這次增量備份目錄
–incremental-basedir=/data/backup1 指定上次增量備份目錄
$ innobackupex --defaults-file=/etc/my.cnf --user=zhengda --password=goyun.org --socket=/tmp/mysql.sock --incremental /data/backup2 --incremental-basedir=/data/backup1/(....)
還原備份
–apply-log 準備還原備份的選項
–use-memory=8G 設置準備還原數據時使用的內存,可以提高準備所花費的時間
$ innobackupex --apply-log --use-memory=8G /data/backup #還原如下 $ innobackupex --defaults-file=/etc/my.cnf --user= --password= --copy-back /data/backup #或 $ xtrabackup --user=zhengda --password=goyun.org --copy-back --target-dir=/data/backup
使用Mysqldump進行邏輯備份
mysqldump作為重要的MySQL備份工具,功能相當強大。備份參數、恢復策略,需要仔細研究。
備份數據庫:
備份單個數據庫或單個數據庫中的指定表:
mysqldump [OPTIONS] database [tb1] [tb2]…
備份多個數據庫:
mysqldump [OPTIONS] –databases [OPTIONS] DB1 [DB2 DB3…]
備份所有數據庫:
mysqldump [OPTIONS] –all-databases [OPTIONS]
添加此選項備份時不鎖表
--single-transaction
案例:本地備份所有庫
mysqldump -u root -p密碼 --all-databases > ./all.sql
案例:本地恢復所有庫
mysql -u root -p密碼 < ./all.sql
案例:備份本地db1,db2兩個庫
mysqldump -u root -p密碼 --databases db1 db2 > ./db1_2.sql
案例:恢復本地db1,db2兩個庫
mysql -u root -p密碼 db1 db2 < ./db1_2.sql
案例:在B主機上執行將A主機的yun庫備份到B主機上 ,在B主機上需要創建yun庫
-C表示主機間的數據傳輸使用數據壓縮
mysqldump --host=192.168.6.108(A) -u root -p密碼 --opt yun | mysql --host=localhost(B) -u root -p密碼 -C yun
案例:在 B主機 上執行將 A主機 上的所有數據庫備份到本地
mysqldump --host=192.168.6.108(A) -u root -p密碼 --all-databases > all.sql(B)
案例:恢復在B主機上執行
XtraBackup物理備份(未測試)