標籤:作用 啟動 nal 第一個 開啟 amp from percona font
1 概述
1.1 簡介
Xtrabackup是由percona提供的mysqlDatabase Backup工具,據官方介紹,這也是世界上惟一一款開源的能夠對innodb和xtradb資料庫進行熱備的工具。
PXB(Percona XtraBackup)是物理備份,是基於複製檔案備份,備份時可以遠程操作,基於mysql協議遠端連線,需要備份的主機不用安裝PXB,但是,執行恢複資料操作時mysql服務不能啟動,所以恢複時只能本地恢複,而且在本地的伺服器上要安裝PXB
PXB在恢複增量資料時,先合并第一次增量到全量上,然後合并第二次增量。。。合并最後一次增量,最後一次增量被合并後,有問題的事務才會被復原,所有增量都被合并到一起後,再複製到資料目錄下,然後才啟動mysql服務。mysql伺服器啟動後,最後一次增量之後的少量資料,同樣要根據二進位記錄檔進行恢複。
PXB實現單表匯入和匯出,innodb要實現必須要啟用單表功能,因為如果不開啟該功能,innodb中把frm和fbm複製到另一個mysql中,另一個mysql是無法載入這個表的,因為新的伺服器不能識別複製過來的資料表空間,伺服器內部記錄的lsn(記錄序號)不一樣,另一台機器上是不能識別的。myISAM沒有這個問題,所有的表複製到其他的mysql可以被識別。
執行熱備時,備份啟動時,可能有些事務該執行一半,即正在執行中的事務,所以為了確保已經提交的事務是完整的,PXB也會一起備份交易記錄,這樣才能知道對應的事務的狀態,還原的時候,才能確保mysql可以被啟動。
啟動前,會根據交易記錄,將該提交的提交(執行完的事務尚未提交,還儲存在交易記錄中),將該復原的復原,相當於是資料庫的崩潰後修複操作,這樣才能把資料庫服務正常啟動。
備份時要備份交易記錄,這是一定要執行的。
如果是全量+增量的備份,如果全量備份中,有些執行中的事務此時不能被復原,因為可能是在增量備份中已經被commit了,所以恢複的時候,必須是最後一次增量被恢複後,有問題的事務才會被復原
1.2 PXB特點
(1)備份過程快速、可靠;
(2)備份過程不會打斷正在執行的事務;
(3)能夠基於壓縮等功能節約磁碟空間和流量;
(4)自動實現備份檢驗;
(5)還原速度快;
1.3 安裝
其最新版的軟體可從 http://www.percona.com/software/percona-xtrabackup/ 獲得。本文基於RHEL5.8的系統,因此,直接下載相應版本的rpm包安裝即可,這裡不再示範其過程。
安裝PXB
版本是percona-xtrabackup-24-2.4.7-2.el7.x86_64.rpm
[[email protected] yum.repos.d]#yum -y install /root/percona-xtrabackup-24-2.4.7-2.el7.x86_64.rpm
其中,安裝的工具中/usr/bin/innobackupex工具使用perl語言對xtrabackup做了二次封裝,支援用戶端遠端連線的方式備份
2 備份的實現
2.1 完全備份
#注意,如果沒有指定資料庫,則表示備份所有的庫,會在目錄 /path/to/BACKUP-DIR/下建立以當前日期為名稱的目錄,把備份出的所有檔案放到該日期目錄下,備份和恢複要注意屬主和屬組的問題,可能備份出的檔案屬組和屬主都會root許可權,注意還原屬組和屬主,沒有指定備份方式,則是全量備份
文法如下
# innobackupex --user=DBUSER --password=DBUSERPASS /path/to/BACKUP-DIR/
如果要使用一個最小許可權的使用者進行備份,則可基於如下命令建立此類使用者:
mysql> CREATE USER ’bkpuser’@’localhost’ IDENTIFIED BY ’s3cret’;
mysql> REVOKE ALL PRIVILEGES, GRANT OPTION FROM ’bkpuser’;
mysql> GRANT RELOAD, LOCK TABLES, REPLICATION CLIENT ON *.* TO ’bkpuser’@’localhost’;
mysql> FLUSH PRIVILEGES;
使用innobakupex備份時,其會調用xtrabackup備份所有的InnoDB表,複製所有關於表結構定義的相關檔案(.frm)、以及MyISAM、MERGE、CSV和ARCHIVE表的相關檔案,同時還會備份觸發器和資料庫配置資訊相關的檔案。這些檔案會被儲存至一個以時間命名的目錄中。
在備份的同時,innobackupex還會在備份目錄中建立如下檔案:
(1)xtrabackup_checkpoints —— 備份類型(如完全或增量)、備份狀態(如是否已經為prepared狀態)和LSN(記錄序號)範圍資訊;
每個InnoDB頁(通常為16k大小)都會包含一個記錄序號,即LSN。LSN是整個資料庫系統的系統版本號碼,每個頁面相關的LSN能夠表明此頁面最近是如何發生改變的。
(2)xtrabackup_binlog_info —— mysql伺服器當前正在使用的二進位記錄檔及至備份這一刻為止二進位日誌事件的位置。
(3)xtrabackup_binlog_pos_innodb —— 二進位記錄檔及用於InnoDB或XtraDB表的二進位記錄檔的當前position。
(4)xtrabackup_binary —— 備份中用到的xtrabackup的可執行檔;
(5)backup-my.cnf —— 備份命令用到的配置選項資訊;
在使用innobackupex進行備份時,還可以使用--no-timestamp選項來阻止命令自動建立一個以時間命名的目錄;如此一來,innobackupex命令將會建立一個BACKUP-DIR目錄來儲存備份資料。
2.2 準備(prepare)一個完全備份
一般情況下,在備份完成後,資料尚且不能用於恢複操作,因為備份的資料中可能會包含尚未提交的事務或已經提交但尚未同步至資料檔案中的事務。因此,此時資料檔案仍處理不一致狀態。“準備”的主要作用正是通過復原未提交的事務及同步已經提交的事務至資料檔案也使得資料檔案處於一致性狀態。
innobakupex命令的--apply-log選項可用於實現上述功能。如下面的命令:
# innobackupex --apply-log /path/to/BACKUP-DIR
如果執行正確,其最後輸出的幾行資訊通常如下:
xtrabackup: starting shutdown with innodb_fast_shutdown = 1
120407 9:01:36 InnoDB: Starting shutdown...
120407 9:01:40 InnoDB: Shutdown completed; log sequence number 92036620
120407 09:01:40 innobackupex: completed OK!
在實現“準備”的過程中,innobackupex通常還可以使用--use-memory選項來指定其可以使用的記憶體的大小,預設通常為100M。如果有足夠的記憶體可用,可以多劃分一些記憶體給prepare的過程,以提高其完成速度。
2.3、從一個完全備份中恢複資料
注意:恢複不用啟動MySQL
innobackupex命令的--copy-back選項用於執行恢複操作,其通過複製所有資料相關的檔案至mysql伺服器DATADIR目錄中來執行恢複過程。innobackupex通過backup-my.cnf來擷取DATADIR目錄的相關資訊。
# innobackupex --copy-back /path/to/BACKUP-DIR
如果執行正確,其輸出資訊的最後幾行通常如下:
innobackupex: Starting to copy InnoDB log files
innobackupex: in '/backup/2012-04-07_08-17-03'
innobackupex: back to original InnoDB log directory '/mydata/data'
innobackupex: Finished copying back files.
120407 09:36:10 innobackupex: completed OK!
請確保如上資訊的最行一行出現“innobackupex: completed OK!”。
當資料恢複至DATADIR目錄以後,還需要確保所有資料檔案的屬主和屬組均為正確的使用者,如mysql,否則,在啟動mysqld之前還需要事先修改資料檔案的屬主和屬組。如:
# chown -R mysql:mysql /mydata/data/
2.4 使用innobackupex進行增量備份
每個InnoDB的頁面都會包含一個LSN資訊,每當相關的資料發生改變,相關的頁面的LSN就會自動成長。這正是InnoDB表可以進行增量備份的基礎,即innobackupex通過備份上次完全備份之後發生改變的頁面來實現。
要實現第一次增量備份,可以使用下面的命令進行:
# innobackupex --incremental /backup --incremental-basedir=BASEDIR
其中,BASEDIR指的是完全備份所在的目錄,此命令執行結束後,innobackupex命令會在/backup目錄中建立一個新的以時間命名的目錄以存放所有的增量備份資料。另外,在執行過增量備份之後再一次進行增量備份時,其--incremental-basedir應該指向上一次的增量備份所在的目錄。
需要注意的是,增量備份僅能應用於InnoDB或XtraDB表,對於MyISAM表而言,執行增量備份時其實進行的是完全備份。
“準備”(prepare)增量備份與整理完全備份有著一些不同,尤其要注意的是:
(1)需要在每個備份(包括完全和各個增量備份)上,將已經提交的事務進行“重放”。“重放”之後,所有的備份資料將合并到完全備份上。
(2)基於所有的備份將未提交的事務進行“復原”。
於是,操作就變成了:
# innobackupex --apply-log --redo-only BASE-DIR
接著執行:
# innobackupex --apply-log --redo-only BASE-DIR --incremental-dir=INCREMENTAL-DIR-1
而後是第二個增量:
# innobackupex --apply-log --redo-only BASE-DIR --incremental-dir=INCREMENTAL-DIR-2
其中BASE-DIR指的是完全備份所在的目錄,而INCREMENTAL-DIR-1指的是第一次增量備份的目錄,INCREMENTAL-DIR-2指的是第二次增量備份的目錄,其它依次類推,即如果有多次增量備份,每一次都要執行如上操作;
最後一個增量命令完成後,要在全量備份上做“復原”操作。
# innobackupex --apply-log BASE-DIR
2.5 Xtrabackup的“流”及“備份壓縮”功能
Xtrabackup對備份的資料檔案支援“流”功能,即可以將備份的資料通過STDOUT傳輸給tar程式進行歸檔,而不是預設的直接儲存至某備份目錄中。要使用此功能,僅需要使用--stream選項即可。如:
# innobackupex --stream=tar /backup | gzip > /backup/`date +%F_%H-%M-%S`.tar.gz
甚至也可以使用類似如下命令將資料備份至其它伺服器:
# innobackupex --stream=tar /backup | ssh [email protected] "cat - > /backups/`date +%F_%H-%M-%S`.tar"
此外,在執行本地備份時,還可以使用--parallel選項對多個檔案進行並行複製。此選項用於指定在複製時啟動的線程數目。當然,在實際進行備份時要利用此功能的便利性,也需要啟用innodb_file_per_table選項或共用的資料表空間通過innodb_data_file_path選項儲存在多個ibdata檔案中。對某一資料庫的多個檔案的複製無法利用到此功能。其簡單使用方法如下:
# innobackupex --parallel /path/to/backup
同時,innobackupex備份的資料檔案也可以儲存至遠程主機,這可以使用--remote-host選項來實現:
# innobackupex [email protected] /path/IN/REMOTE/HOST/to/backup
2.6 匯入或匯出單張表
預設情況下,InnoDB表不能通過直接複製表檔案的方式在mysql伺服器之間進行移植,即便使用了innodb_file_per_table選項。而使用Xtrabackup工具可以實現此種功能,不過,此時需要“匯出”表的mysql伺服器啟用了innodb_file_per_table選項(嚴格來說,是要“匯出”的表在其建立之前,mysql伺服器就啟用了innodb_file_per_table選項),並且“匯入”表的伺服器同時啟用了innodb_file_per_table和innodb_expand_import選項。
(1)“匯出”表
匯出表是在備份的prepare階段進行的,因此,一旦完全備份完成,就可以在prepare過程中通過--export選項將某表匯出了:
# innobackupex --apply-log --export /path/to/backup
此命令會為每個innodb表的資料表空間建立一個以.exp結尾的檔案,這些以.exp結尾的檔案則可以用於匯入至其它伺服器。
(2)“匯入”表
要在mysql伺服器上匯入來自於其它伺服器的某innodb表,需要先在當前伺服器上建立一個跟原表表結構一致的表,而後才能實現將表匯入:
mysql> CREATE TABLE mytable (...) ENGINE=InnoDB;
然後將此表的資料表空間刪除:
mysql> ALTER TABLE mydatabase.mytable DISCARD TABLESPACE;
接下來,將來自於“匯出”表的伺服器的mytable表的mytable.ibd和mytable.exp檔案複製到當前伺服器的資料目錄,然後使用如下命令將其“匯入”:
mysql> ALTER TABLE mydatabase.mytable IMPORT TABLESPACE;
2.7 使用Xtrabackup對資料庫進行部份備份
Xtrabackup也可以實現部份備份,即只備份某個或某些指定的資料庫或某資料庫中的某個或某些表。但要使用此功能,必須啟用innodb_file_per_table選項,即每張表儲存為一個獨立的檔案。同時,其也不支援--stream選項,即不支援將資料通過管道傳輸給其它程式進行處理。
此外,還原部份備份跟還原全部資料的備份也有所不同,即你不能通過簡單地將prepared的部份備份使用--copy-back選項直接複製回資料目錄,而是要通過匯入表的方向來實現還原。當然,有些情況下,部份備份也可以直接通過--copy-back進行還原,但這種方式還原而來的資料多數會產生資料不一致的問題,因此,無論如何不推薦使用這種方式。
(1)建立部份備份
建立部份備份的方式有三種:Regex(--include), 枚舉表檔案(--tables-file)和列出要備份的資料庫(--databases)。
(a)使用--include
使用--include時,要求為其指定要備份的表的完整名稱,即形如databasename.tablename,如:
# innobackupex --include='^mageedu[.]tb1' /path/to/backup
(b)使用--tables-file
此選項的參數需要是一個檔案名稱,此檔案中每行包含一個要備份的表的完整名稱;如:
# echo -e 'mageedu.tb1\nmageedu.tb2' > /tmp/tables.txt
# innobackupex --tables-file=/tmp/tables.txt /path/to/backup
(c)使用--databases
此選項接受的參數為資料名,如果要指定多個資料庫,彼此間需要以空格隔開;同時,在指定某資料庫時,也可以只指定其中的某張表。此外,此選項也可以接受一個檔案為參數,檔案中每一行為一個要備份的對象。如:
# innobackupex --databases="mageedu testdb" /path/to/backup
(2)整理(preparing)部份備份
prepare部份備份的過程類似於匯出表的過程,要使用--export選項進行:
# innobackupex --apply-log --export /pat/to/partial/backup
此命令執行過程中,innobackupex會調用xtrabackup命令從資料字典中移除缺失的表,因此,會顯示出許多關於“表不存在”類的警告資訊。同時,也會顯示出為備份檔案中存在的表建立.exp檔案的相關資訊。
(3)還原部份備份
還原部份備份的過程跟匯入表的過程相同。當然,也可以通過直接複製prepared狀態的備份直接至資料目錄中實現還原,不要此時要求資料目錄處於一致狀態。
3 例子
3.1 使用xtrabackup進行本地全量的備份和恢複
完全+binlog
備份:innobackupex --user --password= --host= /PATH/TO/BACKUP_DIR
準備:innobackupex --apply-log /PATH/TO/BACKUP_DIR
恢複:innobackupex --copy-back
注意:--copy-back需要在mysqld主機本地進行,mysqld服務不能啟動;innodb_log_file_size可能要重新設定;
執行個體如下
資料備份:
建立備份的目錄
[[email protected] yum.repos.d]#mkdir /mydata/backups
執行備份
[[email protected] yum.repos.d]#innobackupex --user=root --password=Pass1234 --host=localhost /mydata/backups/
最後看到如下資訊,表示備份完成
xtrabackup: Transaction log of lsn (65107278) to (65107278) was copied.
180115 17:27:11 completed OK!
完成後,產生以時間命名的目錄如下,該目錄下有對應資料庫的檔案
/mydata/backups/2018-01-15_17-26-59
/mydata/backups/2018-01-15_17-26-59目錄下查看複製的內容如下,
[[email protected] 2018-01-15_17-26-59]#ls /mydata/backups/2018-01-15_17-26-59
backup-my.cnf mysql sunny xtrabackup_checkpoints xtrabackup_logfile
ibdata1 performance_schema xtrabackup_binlog_info xtrabackup_info zbxproxydb
除了資料庫中原來庫,其他的檔案介紹如下
backup-my.cnf:myslq伺服器的配置資訊,這些配置資訊對將來重新啟動服務至關重要。
xtrabackup-binlog_info:記錄二進位檔案的資訊,指備份的那個時間段處於哪個二進位檔案的哪個位置
xtrabackup-checkpoints:檢查點,記錄備份自己的屬性,如 lsn,其中,compact是指有沒有打包,backup_type指備份的類型,recover_binlog_info有沒有需要通過binlog恢複的備份資訊
xtrabackup-info:記錄備份工具自身的資訊,如備份時使用什麼工具,使用什麼選項串連伺服器等資訊,伺服器版本,備份時間,恢複的時候,需要依賴這些資訊進行恢複。PXB恢複資料時需要依賴這些資訊來判斷如何恢複
xtrabackup-logfile:PXB執行時的log資訊,這是二進位資訊,不能用cat查看。
一般還會有交易記錄,如果當前是乾淨的,如沒有未提交的事務,可能就不會複製交易記錄,但是一般生產環境是存在為提交的事務,所以,一般會有交易記錄
注意,為了資料安全起見,不要把備份後的資料還是儲存在本地mysql的伺服器上,否則,伺服器崩潰,可能導致備份的資料也丟失,這樣就起不到資料備份的作用。或者,備份後可以將產生的備份檔案完整打包,放到另一個伺服器上。
資料恢複:
將以上的備份資訊恢複備份到另一台機器75上,另一台機器也要裝PXB,因為恢複操作需要藉助PXB
將71備份的資料拷貝到75上
[[email protected] ~]#scp -r /mydata/backups/2018-01-15_17-26-59/ 192.168.1.75:/root
先停止75伺服器上的mysql服務
[[email protected] source]#systemctl stop mariadb.service
75上安裝PXB
[[email protected] ~]#yum -y install /root/percona-xtrabackup-24-2.4.7-2.el7.x86_64.rpm
恢複操作,準備一台乾淨的mysql資料庫,即/var/lib/mysql目錄下沒有內容,如果有內容,需要清空,清空前先確認一下資料是否還有用
使用選項--apply-log:該選項將應用交易記錄到資料檔案,要復原的交易回復,提交的提交,進行資料的同步,還沒開始恢複資料,是恢複前的準備工作
進入75上備份資料的目錄下
[[email protected] ~]#cd /root/2018-01-15_17-26-59/
[[email protected] 2018-01-15_17-26-59]#innobackupex --apply-log ./
看到如下資訊為完成
InnoDB: Shutdown completed; log sequence number 65107505
180115 17:58:44 completed OK!
此時,恢複前的準備工作完成
執行以下命令,自動載入設定檔,擷取相關的資訊,如資料目錄的路徑,進行資料恢複時會將資料恢複到資料目錄下
[[email protected] 2018-01-15_17-26-59]#innobackupex --copy-back ./
看到如下資訊,則資料恢複成功
180115 19:52:17 completed OK!
變更檔的屬主和屬組
[[email protected] mysql]#chown -R mysql.mysql /var/lib/mysql/*
重啟服務
[[email protected] mysql]#systemctl restart mariadb
到這裡全量備份恢複完成,注意,完成後,在75這台再做一次全量備份,以備後續可能75故障,需要在另一台mysql伺服器上進行全量備份,原來71的全量備份檔案已經不能用。
注意,備份的操作,可以用指令碼操作,寫成計劃任務,定時完成。但是,恢複的操作,建議一定要手工執行,因為有可能恢複過程出現問題,有可能損壞備份,就出現麻煩,所以,恢複的操作,建議平常進行演練,保證出現問題,可以及時進行恢複
3.2 全量+增量備份,同時用二進位檔案實現還原時間點
完全+增量+binlog
備份:完全+增量+增量+...
完全+差異
準備:
innobackupex --apply-log --redo-only BASEDIR
innobackupex --apply-log --redo-only BASEDIR --incremental-dir=INCREMENTAL-DIR
恢複:
innobackupex --copy-back BASEDIR
執行個體如下
完成全量備份
[[email protected] mysql]#innobackupex --user=root --host=localhost --password=Pass1234 /mydata/backups
第一次增量備份如下,選項--incremental指明位置,--incremental-basedir指明基於哪一次的基礎增量
[[email protected] mysql]#innobackupex --user=root --host=localhost --password=Pass1234 --incremental /mydata/backups --incremental-basedir=/mydata/backups/2018-01-15_20-10-02
會產生一個新的檔案,此時目錄名稱是 2018-01-15_20-23-13
檢查如下,查看 2018-01-15_20-23-13下的xtrabackup_checkpoints檔案
[[email protected] 2018-01-15_20-23-13]#cat /mydata/backups/2018-01-15_20-23-13/xtrabackup_checkpoints
backup_type = incremental
from_lsn = 65109252
to_lsn = 65110280
last_lsn = 65110280
compact = 0
第二次增量備份,如果此時的增量是基於全量來做,則為差異備份,如果此時是基於第一次的增量,即 --incremental-basedir=/mydata/backups/2018-01-15_20-23-13,則為增量備份。
這裡示範的是基於第一次的增量再一次進行增量
[[email protected] backups]#innobackupex --user=root --host=localhost --password=Pass1234 --incremental /mydata/backups --incremental-basedir=/mydata/backups/2018-01-15_20-23-13
則在/mydata/backups下產生新的目錄2018-01-15_21-34-33
檢查二進位檔案的位置資訊
[[email protected] 2018-01-15_21-34-33]#cat /mydata/backups/2018-01-15_21-34-33/xtrabackup_binlog_info
master-log.0000052714
此時,不做備份,但是更新一下資料庫,在資料庫中的二進位檔案會繼續記錄資訊
MariaDB [sunny]> update students set major="maths" where age=90;
然後檢查一下二進位記錄檔
[[email protected] 2018-01-15_21-34-33]#mysqlbinlog -j 2714 /mydata/log/master-log.000005
有一條記錄為
update students set major="maths" where age=90
但是不做備份操作,假設此時資料庫崩潰了,目前備份的資料沒有最後一個更新age=90的資料,因此,恢複資料需要拿二進位記錄檔進行恢複,儲存該二進位檔案記錄,跳過之前有備份的資訊,從master-log.000005檔案的2714位元組開始記錄
[[email protected] 2018-01-15_21-34-33]#mysqlbinlog -j 2714 /mydata/log/master-log.000005 >/tmp/mybinlog.sql
恢複資料
首先,準備一台感覺的mysql伺服器,沒有做過任何初始化配置,目錄/var/lib/mysql下是空的。
這裡假設ip是73伺服器
停止mysql服務
[[email protected] mysql]#systemctl stop mariadb
安裝PXB
yum -y install /root/percona-xtrabackup-24-2.4.7-2.el7.x86_64.rpm
進行資料恢複前,先將資料合併到完全備份,進行整合,前幾次要添加選項--redo-only,最後合并完成後,基於所有的備份將未提交的事務進行“復原”,注意,合并順序很關鍵,增量要使用絕對路徑,操作如下
進入全量備份的目錄下,執行如下操作
[[email protected] 2018-01-15_20-10-02]#innobackupex --apply-log --redo-only ./
接下來,還是在全量的目錄下,開始合并第一個增量,指明增量目錄,注意,增量要使用絕對路徑
[[email protected] 2018-01-15_20-10-02]#innobackupex --apply-log --redo-only ./ --incremental-dir=/mydata/backups/2018-01-15_20-23-13
第一個增量合并完成後,合并第二個增量
[[email protected] 2018-01-15_20-10-02]#innobackupex --apply-log --redo-only ./ --incremental-dir=/mydata/backups/2018-01-15_21-34-33
第二個增量合并完成後,把沒完成的交易回復,即去掉--redo-only選項
[[email protected] 2018-01-15_20-10-02]#innobackupex --apply-log ./
此時備份是一個完整的備份,擁有所有的增量
檢查
在全量的目錄下檢查 xtrabackup_checkpoints檔案的last_lsn已經是最後一個增量的數值,命令如下
[[email protected] 2018-01-15_20-10-02]#cat xtrabackup_checkpoints
將71 上的合并後的全量備份的資料2018-01-15_20-10-02拷貝到73上,注意,這裡合并後的全量備份資料下次恢複已經不能用了,因為已經做了合并和復原,只能用於本次的資料恢複,本次資料恢複後,要對新的mysql伺服器重新做一次全量備份,重新啟動一個備份序列,以備下次恢複使用
[[email protected] 2018-01-15_20-10-02]#scp -r /mydata/backups/2018-01-15_20-10-02 192.168.1.73:/root
資料拷貝完成後,到73這台mysql伺服器上
進入拷貝過來的全量備份2018-01-15_20-10-02的目錄下
[[email protected] ~]#cd /root/2018-01-15_20-10-02
[[email protected] 2018-01-15_20-10-02]#innobackupex --copy-back ./
完成後,可以查看到資料已經被拷貝到/var/lib/mysql/下,更改/var/lib/mysql/目錄下的所有組和所有主
[[email protected] mysql]#chown -R mysql.mysql /var/lib/mysql/*
啟動服務
[[email protected] mysql]#systemctl start mariadb.service
此時,服務正常啟動後,還需要做時間點資料還原,即將二進位記錄檔進行重放,還原資料
此時檢查一下資料庫,進入資料庫後
MariaDB [sunny]> select * from students where age=90;
age=90的major還沒有被更新為maths
和儲存下來的二進位檔案/tmp/mybinlog.sql
scp /tmp/mybinlog.sql 192.168.1.73:/root
注意,這裡將/root下的mybinlog.sql移動到/tmp下,這樣所有的使用者都能讀取該目錄下的檔案,接下來直接採用在73mysql服務裡直接用source來讀取/tmp下的mybinlog.sql檔案
恢複二進位日誌前先臨時關閉本機73的mysql二進位日誌記錄功能
MariaDB [sunny]> set @@session.sql_log_bin=OFF;
開始恢複二進位檔案,三個方法
MariaDB [sunny]> source /tmp/mybinlog.sql
或者
MariaDB [sunny]> \. /tmp/mybinlog.sql
或者在shell裡直接匯入
[[email protected] ~]#mysql -uroot -pPass123456 </tmp/mybinlog.sql
完成後,再次開啟二進位日誌的記錄功能
MariaDB [sunny]> set @@session.sql_log_bin=ON;
此時,備份完成,但是,先做一次全量備份,然後再將伺服器上線
[[email protected] ~]#mkdir -p /mydata/backup73
[[email protected] ~]#innobackupex --user=root --host=localhost --password=Pass123456 /mydata/backup73
到此,備份完成,可以上線新恢複資料的mysql伺服器
資料庫 之 備份工具Xtrabackup進行MySQL備份