
- 類型:濾鏡插件大。7.6M語言:中文 評(píng)分:6.6
- 標(biāo)簽:
MariaDB數(shù)據(jù)庫管理系統(tǒng)是MySQL的一個(gè)分支,主要由開源社區(qū)在維護(hù),采用GPL授權(quán)許可。開發(fā)這個(gè)分支的原因之一是:Oracle公司收購了MySQL后,有將MySQL閉源的潛在風(fēng)險(xiǎn),因此社區(qū)采用分支的方式來避開這個(gè)風(fēng)險(xiǎn)。
數(shù)據(jù)對(duì)我們來說再重要不過了,那我們?nèi)绾巫龅綄?duì)數(shù)據(jù)盡可能的安全呢,當(dāng)我們的數(shù)據(jù)丟失了那又該怎么做呢,所以說數(shù)據(jù)備份對(duì)我們的數(shù)據(jù)安全性來說太重要了。
數(shù)據(jù)對(duì)我們來說再熟悉不過了,也最平常不過了,我們每天都在接觸各色各樣的數(shù)據(jù),數(shù)據(jù)記錄了我們平常相關(guān)的業(yè)務(wù)信息,所以數(shù)據(jù)對(duì)于我們來說是很重要的, 這么重要的數(shù)據(jù)如果我們的數(shù)據(jù)丟失了那我們是不是相關(guān)的業(yè)務(wù)都沒法進(jìn)行了呢,這應(yīng)該是個(gè)很麻煩的問題,那我們?cè)趺幢Wo(hù)我們的數(shù)據(jù)的安全呢,這就要用到我們 的數(shù)據(jù)備份了。
如何執(zhí)行備份恢復(fù):備份與恢復(fù)在工作環(huán)境中是重中之重,為什么需要用到備份和恢復(fù)呢:
1、一般是做災(zāi)難恢復(fù)的,比如說自然災(zāi)害等。
2、可以做審計(jì)的,比如說某一數(shù)據(jù)在過去是什么樣的。
3、做測(cè)試的,比如說一個(gè)新的業(yè)務(wù)架構(gòu)數(shù)據(jù)存儲(chǔ)方式是否扛得著業(yè)務(wù)的訪問
備份的目的是用于恢復(fù)的,如果備份的數(shù)據(jù)用到時(shí)恢復(fù)不了數(shù)據(jù)怎么辦,所以對(duì)備份數(shù)據(jù)做恢復(fù)測(cè)試是很有必要的。而且還要定期性的去做測(cè)試。
備份類型:有很多種
根據(jù)備份時(shí),數(shù)據(jù)庫服務(wù)器是否在線:
冷備份:cold backup,服務(wù)器要離線,意味著我們的讀寫操作都不可以進(jìn)行了,這是最安全的備份方式,也是最不靠譜的方式。
溫備份:warm backup,全局施加共享鎖,只可讀,不可寫的備份叫溫備份
熱備份:hot backup,數(shù)據(jù)庫不離線,讀寫操作都可以進(jìn)行
InnoDB記錄數(shù)據(jù)時(shí)都會(huì)給數(shù)據(jù)一個(gè)序列號(hào),所以在備份時(shí)基于MVCC(多版本并發(fā)控制)的機(jī)制自動(dòng)加快照,每啟動(dòng)一個(gè)事務(wù)都會(huì)創(chuàng)建當(dāng)前集的一個(gè)快 照,而后基于MVCC的機(jī)制把每一個(gè)序列號(hào)都給它記錄一份下來,備份時(shí)只備份序列號(hào)或序列號(hào)之前的數(shù)據(jù),往后發(fā)生的將不做備份,如果事務(wù)的隔離級(jí)別不是特 別高的話,它并不會(huì)影響事務(wù)的讀寫操作,而這樣備份出來的數(shù)據(jù)一定是時(shí)間點(diǎn)一致的數(shù)據(jù),所以要完成熱備份,通常是基于事務(wù)的存儲(chǔ)引擎才能夠完成的。
根據(jù)備份時(shí)的數(shù)據(jù)集進(jìn)行分類:
完全備份:full backup:指?jìng)浞菡麄(gè)庫,當(dāng)下數(shù)據(jù)集的整個(gè)庫的數(shù)據(jù)
部分備份:partial backup:只備份某張表或某張表的一部份數(shù)據(jù),有時(shí)備份單張表是有必要的。
根據(jù)備份時(shí)的接口(直接備份數(shù)據(jù)文件還是通過mysql服務(wù)器導(dǎo)出數(shù)據(jù))
物理備份:直接復(fù)制(歸檔)數(shù)據(jù)文件的備份方式;跨平臺(tái)能力沒有邏輯備份好,physucal backup。大數(shù)據(jù)集用這個(gè)比較好。
邏輯備份:把數(shù)據(jù)庫中提出來保存為文本文件;通常使用的工具是mysqldump,logical backup,對(duì)于大容量數(shù)據(jù)不適用。恢復(fù)速度很慢,占據(jù)空間很大
根據(jù)備份時(shí)是否備份整個(gè)數(shù)據(jù)還是僅備份變化的數(shù)據(jù):
完全備份:full backup,跟備份數(shù)據(jù)集中的完全備份概念是相同的,也是備份整個(gè)庫
增量備份:incremental backup,上一次完全備份之后所改變的數(shù)據(jù)做備份的為增量備份,比如說周一做一次備份,周二做一次備份,周三又做一次,這樣一天天累加上去的叫增量備份。比較節(jié)約空間。
差異備份:differential backup,比如說周一做一次備份,到周二了就把周一和周二這兩天的做一次備份,到周三就把周一周二周三的做一次備份,這就叫差異備份。比較容易恢復(fù)。
備份策略:需要考慮到的問題
1、選擇備份方式,選擇哪種方式根據(jù)我們的生產(chǎn)環(huán)境所需要來定;
2、執(zhí)行備份時(shí)間,選項(xiàng)一個(gè)訪問最少的時(shí)間做備份是比較合理的;
3、考慮到恢復(fù)成本:恢復(fù)時(shí)長;
4、備份成本:考慮到鎖時(shí)間、備份時(shí)長、備份負(fù)載;
備份對(duì)象:我們備份需要備份什么呢
1、備份數(shù)據(jù)庫中的數(shù)據(jù)是最重要的;
2、MySQL的配置文件,這個(gè)也是我們備份的對(duì)象
3、MySQL的代碼也是需要備份的:存儲(chǔ)過程,存儲(chǔ)函數(shù),觸發(fā)器
4、OS相關(guān)的配置文件,如crontab配置計(jì)劃及相關(guān)的腳本
5、如果是在主從復(fù)制的場(chǎng)景中,跟復(fù)制相關(guān)的信息也要備份
6、為了保證數(shù)據(jù)足夠可靠,二進(jìn)制日志文件也需要備份
常用的備份工具:
mysqldump:邏輯備份工具,是單線程備份工具,所以在某個(gè)服務(wù)器上做備份時(shí)它只能啟動(dòng)一個(gè)CPU啟動(dòng)一個(gè)線程進(jìn)行備份,性能比較差。
對(duì)InnoDB熱備、對(duì)MyISAM只能做到溫備、對(duì)Aria溫備,備份和恢復(fù)過程較慢;
mysqldumper:多線程的mysqldump,對(duì)多個(gè)庫或多張表可以同時(shí)進(jìn)行,提高性能;
mysqldump、mysqldumper,這兩個(gè)都是邏輯備份工具,通常情況也很難實(shí)現(xiàn)差異或增量備份,只能做完全備份,但可以做部分備份,比如只備份一張表是可以實(shí)現(xiàn)的;
基于冷備份時(shí):cp, 要基于lvm-snapshot邏輯卷快照進(jìn)行備份的,接近于熱備工具,因?yàn)橐日?qǐng)求全局鎖,而后創(chuàng)建快照,并在創(chuàng)建快照完成后釋放全局鎖;而后使用 cp、tar等工具進(jìn)行物理備份(因?yàn)閺?fù)制的源數(shù)據(jù)文件),所以備份和恢復(fù)數(shù)據(jù)速度較快,缺點(diǎn)很難實(shí)現(xiàn)增量備份,并且請(qǐng)求全局鎖需要等待一段時(shí)間,在繁忙 的服務(wù)器上尤其如此。
SELECT clause INTO OUTFILE ‘/path/to/somefile’;把挑選出來的子句保存到某一個(gè)文件中,是個(gè)部分備份工具,不會(huì)備份關(guān)系定義,僅備份表中的數(shù)據(jù),但這也是個(gè)邏輯 備份工具,在速度上也快于mysqldump,也沒法實(shí)現(xiàn)增量備份。
LOAD ADTA INFILE ‘/path/from/somefile’;表示從哪里讀數(shù)據(jù)來恢復(fù)的;
Innobase:提供了商業(yè)備份工具為Innobackup,可以實(shí)現(xiàn)InnoDB的熱備支持增量備份;但是對(duì)于MyISAM不支持增量備份,只能實(shí)現(xiàn)完全備份,屬于物理備份,速度比較快。
Xtrabackup:由Percona組織提供的開源備份工具,物理備份,速度快;
Mysqlhostcopy:幾乎冷備,吹牛工具,不適用;
mysqldump:常用的備份工具,也是個(gè)邏輯備份工具,用于小數(shù)據(jù)備份,一般都是在5G以下的小數(shù)據(jù)進(jìn)行備份;可以使用文本進(jìn)行二次處理;相當(dāng)于MySQL的客戶端工具
使用格式:mysqldump [options] [db_name [tbl_name ...]]
備份單個(gè)庫時(shí)用這個(gè)工具:mysqldump[option] db_name
恢復(fù)時(shí),如果目標(biāo)庫不存在,需要事先手動(dòng)創(chuàng)建
--all-databases:備份所有的數(shù)據(jù)庫--databases db1 db2:備份指定的多個(gè)數(shù)據(jù)庫,用空格隔開--lock-all-tables:請(qǐng)求鎖定所有表之后再備份,一般只對(duì)MyISAM做溫備,不過也可以對(duì)InnoDB和Aria做溫備。--events:備份事件調(diào)度器代碼--routines:備份存儲(chǔ)過程和存儲(chǔ)函數(shù)--triggers:備份觸發(fā)器--flush-logs:備份前、請(qǐng)求到鎖以后滾動(dòng)日志,備份時(shí)滾動(dòng)日志,手動(dòng)滾動(dòng)就要手動(dòng)施加鎖--master-data=[0|1|2]復(fù)制時(shí)的同步位置標(biāo)記,0表示不記錄,1記錄carnge master語句,2記錄為注釋為change master語句--single-transaction:能夠?qū)nnoDB存儲(chǔ)引擎實(shí)現(xiàn)熱備份,啟動(dòng)一個(gè)單一的大事物,基于MVCC(多版本并發(fā)控制)實(shí)現(xiàn)對(duì)InnoDB存儲(chǔ)引擎的熱備,它會(huì)自動(dòng)加鎖的,不要跟--lock-all-tables同時(shí)使用; # mysqldump --databases hellodb --lock-all-tables > /tmp/hellodb.sql :備份數(shù)據(jù)庫,并且請(qǐng)求表鎖,這里備份的所有寫操作都會(huì)被阻塞,這種方式也不太理想。 # mysqldump --databases hellodb --lock-all-tables --flush-logs > /tmp/hellodb.sql # mysqldump --databases hellodb --single-transaction --flush-logs > /tmp/hellodb.sql:保證這個(gè)庫下所有的表的存儲(chǔ)引擎都是InnoDB的前提下使用--single-transaction進(jìn)行熱備。 分時(shí)間段查看二進(jìn)制日志后重定向到某個(gè)文件中去: # mysqlbinlog --start-porition=367 --stop-position=669 master-bin.000005 > /tmp/hellodb.inc.sql 定義一個(gè)開始點(diǎn)和一個(gè)結(jié)束點(diǎn)就可以把二進(jìn)制文件重定向到某個(gè)文件中再進(jìn)行恢復(fù)了;
使用mysqldump備份時(shí):
請(qǐng)求鎖:--lock-all-tables使用--single-transaction進(jìn)行innodb熱備;
滾動(dòng)日志:--flush-logs
選定要備份的庫:--databases
指定二進(jìn)制日志文件及位置:--master-data=2
注意:備份前需要加鎖,恢復(fù)時(shí),建議關(guān)閉二進(jìn)制日志,關(guān)閉其它用戶連接
備份策略:mysqldump+二進(jìn)制日志文件:
恢復(fù):完全備份+各二進(jìn)制日志文件中至此刻的事件,恢復(fù)過程發(fā)生的事件沒必要也寫到二進(jìn)制日志文件中去;所以在恢復(fù)時(shí)要臨時(shí)性的關(guān)閉二進(jìn)制日志文件:
MariaDB [(hellodb)] > set session sql_log_bin=0:臨時(shí)關(guān)閉二進(jìn)制日志文件 MariaDB [(hellodb)] > source /tmp/hellodb.sql;在數(shù)據(jù)庫命令行直接讀取備份文件
對(duì)MySQL配置文件,以及與MySQL相關(guān)的OS配置文件在每次修改后都應(yīng)該直接進(jìn)行備份
lvm-snapshot:基于LVM快照的備份
1、基于快照做備份有個(gè)提前,事物日志跟數(shù)據(jù)文件必須在同一個(gè)卷上;
2、創(chuàng)建快照卷之前,要請(qǐng)求MySQL的全局鎖,在快照創(chuàng)建完成之后釋放鎖;
3、請(qǐng)求全局鎖完成這后做一次日志滾動(dòng);做標(biāo)記,時(shí)間記錄,做二進(jìn)制日志文件及位置標(biāo)記(需要手動(dòng)進(jìn)行);
注意:
1、將數(shù)據(jù)和備份放在不同的磁盤設(shè)備上,異機(jī)或異地的備份存儲(chǔ)為理想;
2、備份的數(shù)據(jù)應(yīng)該周期性的進(jìn)行還原測(cè)試;
3、每次災(zāi)難恢復(fù)后都應(yīng)該立即做一次完全備份
4、針對(duì)不同規(guī);蚣(jí)別的數(shù)據(jù)量,要定制好備份策略;
5、二進(jìn)制日志應(yīng)該跟數(shù)據(jù)文件在不同的磁盤上,并周期性的備份好二進(jìn)制日志文件;
從備份中恢復(fù)應(yīng)該遵循的步驟:
1、停止MySQL服務(wù)器;
2、記錄服務(wù)器的配置和文件權(quán)限;
3、將數(shù)據(jù)從備份移到MySQL數(shù)據(jù)目錄,其執(zhí)行方式依賴于工具;
4、改變配置和文件權(quán)限;
5、以限制訪問模塊重啟服務(wù)器,mysqld的--skip-network選項(xiàng)可跳過網(wǎng)絡(luò)功能;
方法:編輯my.cnf配置文件,添加如下項(xiàng)
skip-networking
socket=/tmp/mysql-recovery.sock
6、載入邏輯備份(如果有),而后檢查和重放二進(jìn)制日志
7、檢查已經(jīng)還原的數(shù)據(jù);
8、重新以完全訪問模式重啟服務(wù)器;
使用mysqldump實(shí)現(xiàn)備份,用二進(jìn)制日志恢復(fù)數(shù)據(jù),這里我們以當(dāng)前系統(tǒng)上的數(shù)據(jù)庫hellodb為例:
第一步:先把hellodb這個(gè)數(shù)據(jù)庫做一次完全備份,當(dāng)然,如果數(shù)據(jù)庫的數(shù)據(jù)很大,比如說大于10G的話不建議使用mysqldump這個(gè)工具做備份,這里我們只為了說明問題:
# -u指定用戶,-p指用戶密碼,--databases指定備份哪個(gè)數(shù)據(jù)庫,--lock-all-tables指?jìng)浞輹r(shí)請(qǐng)求表鎖,--flush-logs滾動(dòng)日志 [root@node0 ~]# mysqldump -uroot -plinux --databases hellodb --lock-all-tables --flush-logs --master-data=2 > /root/hellodb.sql [root@node0 ~]# ll -h hellodb.sql-rw-r--r-- 1 root root 7.8K May 2 14:26 hellodb.sql [root@node0 ~]#
第二步:在數(shù)據(jù)庫hellodb中修改或創(chuàng)建一些表或數(shù)據(jù),使得之前備份的數(shù)據(jù)跟現(xiàn)有的數(shù)據(jù)庫中的數(shù)據(jù)存在差別,以完后后面的通過二進(jìn)制日志進(jìn)行數(shù)據(jù)恢復(fù):
MariaDB [hellodb]> CREATE TABLE newtable; ERROR 1113 (42000): A table must have at least 1 column MariaDB [hellodb]> CREATE TABLE newtable(Name CHAR(20)); Query OK, 0 rows affected (1.11 sec) MariaDB [hellodb]> INSERT INTO newtable values ('Tom'),('Jerry'),('Lucy'); Query OK, 3 rows affected (0.13 sec) Records: 3 Duplicates: 0 Warnings: 0
第三步:把這個(gè)hellodb這個(gè)數(shù)據(jù)庫給刪除了去:
MariaDB [hellodb]> CREATE TABLE newtable; ERROR 1113 (42000): A table must have at least 1 column MariaDB [hellodb]> CREATE TABLE newtable(Name CHAR(20)); Query OK, 0 rows affected (1.11 sec) MariaDB [hellodb]> INSERT INTO newtable values ('Tom'),('Jerry'),('Lucy'); Query OK, 3 rows affected (0.13 sec) Records: 3 Duplicates: 0 Warnings: 0
第四步:查看我們的二進(jìn)制日志文件,把后來改修改和創(chuàng)建的記錄二進(jìn)制日志的信息保存出來,以便我們恢復(fù)新增的數(shù)據(jù)內(nèi)容,我們備份時(shí)做了日志滾動(dòng),所以查看最后一個(gè)日志信息就可以了;
[root@node0 ~]# cd /mydata/data/[root@node0 data]# mysqlbinlog --start-position=403 --stop-position=663 mysql-bin.000004 > /tmp/hellodb.binlog.sql
第五步:恢復(fù)數(shù)據(jù),進(jìn)入到mysql的命令行模式下,把二進(jìn)制日志關(guān)掉,恢復(fù)數(shù)據(jù)時(shí)不需要把恢復(fù)信息記錄到二進(jìn)制日志中去;
# 關(guān)閉當(dāng)前全話的二進(jìn)制日志文件 MariaDB [(none)]> SET session sql_log_bin=0; MariaDB [(none)]> source /root/hellodb.sql MariaDB [hellodb]> SHOW MASTER STATUS; 查看兩次二進(jìn)制文件有沒有改動(dòng);+------------------+----------+--------------+------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +------------------+----------+--------------+------------------+ | mysql-bin.000004 | 815 | | | +------------------+----------+--------------+------------------+MariaDB [hellodb]> SHOW TABLES; MariaDB [hellodb]> source /tmp/hellodb.binlog.sql MariaDB [hellodb]> SELECT * FROM newtable;+-------+ | Name | +-------+ | Tom | | Jerry | | Lucy | +-------+3 rows in set (0.00 sec) MariaDB [hellodb]> SET session sql_log_bin=1; 讓二進(jìn)制上線
OK,這種就是基于mysqldump+二進(jìn)制日志完成數(shù)據(jù)完全恢復(fù)過來了,通過二進(jìn)制日志可以很好的幫助我們恢復(fù)那些可能沒有來得急備份的數(shù)據(jù),對(duì)我們的數(shù)據(jù)安全有很重要。
lvm-snapshot:基于邏輯卷快照做備份,這里要注意的是,快照并不是備份,最多也只是說借助于快照來做數(shù)據(jù)備份,快照本身不是備份;
做了快照之后,一旦源卷的數(shù)據(jù)需要修改,就要把源卷上的數(shù)據(jù)復(fù)制一份到快照卷上,以后再通過快照卷訪問時(shí),那些修改了的數(shù)據(jù)都通過快照存儲(chǔ)來訪問,沒修改的還通過源卷訪問,快照只存儲(chǔ)變化的數(shù)據(jù);
1、它僅僅是作為源卷的一個(gè)訪問路徑;
2、剛創(chuàng)建好的快照卷時(shí),快照卷中是沒有任何數(shù)據(jù)的,它僅是所有數(shù)據(jù)指向了源卷的數(shù)據(jù),所以訪問的數(shù)據(jù)都是來自源卷;
3、一旦源卷中的數(shù)據(jù)需要修改了,某一數(shù)據(jù)在改之前需要將數(shù)據(jù)復(fù)制一份到快照卷中,所以以后再通過快照卷訪問的數(shù)據(jù)都是一部分來自快照卷,一部份來自源 卷;那些修改的數(shù)據(jù)來自快照卷,沒修改的數(shù)據(jù)來自源卷;快照卷僅是能夠給我們提供了一個(gè)時(shí)間一致性文件的訪問通路;
做快照卷要注意的幾點(diǎn):
1、基于快照備份時(shí),事務(wù)日志必須跟數(shù)據(jù)文件在同一個(gè)卷上;
2、創(chuàng)建快照卷之前,要請(qǐng)求mysql的全局鎖,在快照創(chuàng)建完成之后釋放鎖;
3、請(qǐng)求全局鎖完成之后做一次日志滾動(dòng),以便記錄時(shí)間點(diǎn)的;做二進(jìn)制日志文件及位置標(biāo)記,就是master-data;
第一步:首先先看一下你的數(shù)據(jù)目錄的是不是邏輯卷,mount看一下,如果不是邏輯卷的話就別這樣玩;
[root@node0 ~]# mount/dev/mapper/vg0-root on / type ext4 (rw) proc on /proc type proc (rw) sysfs on /sys type sysfs (rw) devpts on /dev/pts type devpts (rw,gid=5,mode=620) tmpfs on /dev/shm type tmpfs (rw)/dev/sda1 on /boot type ext4 (rw)/dev/mapper/vg0-usr on /usr type ext4 (rw)/dev/mapper/vg0-var on /var type ext4 (rw)/dev/mapper/mydata-mysqldata on /mydata/data type ext4 (rw,noatime) none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw) [root@node0 ~]# lvs LV VG Attr LSize Pool Origin Data% Move Log Cpy%Sync Convert mysqldata mydata -wi-ao---- 8.00g root vg0 -wi-ao---- 20.00g swap vg0 -wi-ao---- 2.00g usr vg0 -wi-ao---- 10.00g var vg0 -wi-ao---- 20.00g [root@node0 ~]# vgs VG #PV #LV #SN Attr VSize VFree mydata 1 1 0 wz--n- 10.00g 2.00g vg0 1 4 0 wz--n- 59.99g 7.99g [root@node0 ~]#
第二步:請(qǐng)求鎖,這個(gè)如果是在生產(chǎn)環(huán)境中我們可以用腳本來完成,因?yàn)檫@樣請(qǐng)求到釋放鎖的時(shí)間就可以比較快;
MariaDB [(none)]> FLUSH TABLES WITH READ LOCK; # 請(qǐng)求鎖 Query OK, 0 rows affected (0.01 sec) MariaDB [(none)]> FLUSH LOGS; # 滾動(dòng)一下日志 Query OK, 0 rows affected (0.02 sec) MariaDB [(none)]> SHOW MASTER STATUS; # 查看一下日志position信息+------------------+----------+--------------+------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +------------------+----------+--------------+------------------+ | mysql-bin.000002 | 365 | | | +------------------+----------+--------------+------------------+1 row in set (0.04 sec) MariaDB [(none)]>
第三步:創(chuàng)建快照卷,要在你的邏輯卷的有效空間大小范圍內(nèi)創(chuàng)建,不能超過邏輯卷的大。
[root@node0 ~]# mkdir backup [root@node0 ~]# mysql -e 'show master status'+------------------+----------+--------------+------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +------------------+----------+--------------+------------------+ | mysql-bin.000002 | 365 | | | +------------------+----------+--------------+------------------+[root@node0 ~]# mysql -e 'show master status' > /root/backup/binlog.pos [root@node0 ~]# lvcreate -L 100M -s -n mydata-snap -p r /dev/mydata/mysqldata Logical volume "mydata-snap" created [root@node0 ~]# lvs LV VG Attr LSize Pool Origin Data% Move Log Cpy%Sync Convert mydata-snap mydata sri-a-s--- 100.00m mysqldata 0.01 mysqldata mydata owi-aos--- 8.00g root vg0 -wi-ao---- 20.00g swap vg0 -wi-ao---- 2.00g usr vg0 -wi-ao---- 10.00g var vg0 -wi-ao---- 20.00g [root@node0 ~]#
第四步:然后再到mysql命令行中釋放鎖:
MariaDB [(none)]> UNLOCK TABLES; Query OK, 0 rows affected (0.01 sec) MariaDB [(none)]>
第五步:掛載快照卷,然后需要備份什么只需要復(fù)制一份數(shù)據(jù)目錄就可以了,其實(shí)的按需要做備份就可以了,如果不確定也可以全都復(fù)制好了,安全起見:
[root@node0 ~]# mount /dev/mydata/mydata-snap /data -o ro [root@node0 ~]# cd /data/[root@node0 data]# ls aria_log.00000001 ibdata1 multi-master.info mysql-bin.000002 node0.tanxw.com.pid aria_log_control ib_logfile0 mysql mysql-bin.index test hellodb ib_logfile1 mysql-bin.000001 node0.tanxw.com.err [root@node0 data]#
第六步:這里才是做真正的備份,只要直接復(fù)制數(shù)據(jù)就可以了,備份完之后就可以卸載快照卷了,如果不需要就可以把快照卷刪除就可以了:
[root@node0 data]# cp -a /data/ /root/backup/data-2014-05-02 # -a歸檔復(fù)制數(shù)據(jù) [root@node0 data]# cd /root/backup/data-2014-05-02[root@node0 data-2014-05-02]# ls aria_log.00000001 ibdata1 multi-master.info mysql-bin.000002 node1.tanxw.com.pid aria_log_control ib_logfile0 mysql mysql-bin.index test hellodb ib_logfile1 mysql-bin.000001 node1.tanxw.com.err [root@node0 data-2014-05-02]# pwd/root/backup/data-2014-05-02[root@node0 data-2014-05-02]# umount /data/[root@node0 ~]# lvremove /dev/mydata/mydata-snap # 刪除快照 Do you really want to remove active logical volume mydata-snap? [y/n]: y Logical volume "mydata-snap" successfully removed [root@node0 ~]#
在這里需要注意的是:如果備份這一刻有數(shù)據(jù)修改了,那我們備份下來的數(shù)據(jù)是不會(huì)保存快照后修改的數(shù)據(jù)的;
結(jié)束:
數(shù)據(jù)備份與恢復(fù)的重要性大家都知道,當(dāng)然備份也是其中一個(gè)而且是歸重要的一個(gè)保護(hù)數(shù)據(jù)安全性的重要手段之一,所以能熟練掌握數(shù)據(jù)的備份與恢復(fù)對(duì)我們工作來說也是至關(guān)重要的,有什么不對(duì)希望大神多多指點(diǎn)。