第1關(guān):備份與恢復(fù)
任務(wù)描述
本關(guān)任務(wù):
備份數(shù)據(jù)庫,然后再恢復(fù)它。
相關(guān)知識(shí)
為了完成本關(guān)任務(wù),你需要掌握:
1.MySQL的恢復(fù)機(jī)制;
2.MySQL提供的備份與恢復(fù)工具。
MySQL的恢復(fù)機(jī)制
和大多數(shù)DBMS一樣,MySQL利用備份、日志文件實(shí)現(xiàn)恢復(fù)。
具體理論知識(shí)在此不詳細(xì)介紹。
MySQL的備份與恢復(fù)工具
MySQL提供了以下工具:
- 邏輯備份工具:mysqldump
- 物理備份工具:mysqlbackup(僅限商用版)
- 日志工具:mysqlbinlog
- 還原工具:mysql
- 管理工具:mysqladmin
mysqldump
邏輯備份工具,它產(chǎn)生一系的SQL語句,執(zhí)行這些語句可以重建原數(shù)據(jù)庫的所有對(duì)象和數(shù)據(jù)。缺省輸出是控制臺(tái),可以通過重定向符號(hào),將其產(chǎn)生的SQL語句集合存入到某個(gè)文件。
mysqldump可以備份服務(wù)器上的全部數(shù)據(jù)庫,也可以指定某些數(shù)據(jù)庫,或者一個(gè)數(shù)據(jù)庫中的某些表。mysqldump -h127.0.0.1 -uroot -p123123 [options] --databases db_name
–databases 參數(shù)用指定數(shù)據(jù)庫名,后面可跟一個(gè)或多個(gè)數(shù)據(jù)庫的名字,多個(gè)數(shù)據(jù)庫名間用空格隔開。
mysqldump命令行工具還可以帶若干參數(shù),可選的參數(shù)多達(dá)幾十個(gè),詳見官方參考手冊。這里只介紹一個(gè):
–flush-logs 刷MySQL日志,即重新開始一個(gè)日志文件。
重新開始一個(gè)新的日志文件,對(duì)未來確定哪些日志更有用很有幫助。通常海量備份前的日志文件,其重要性會(huì)降低許多,因?yàn)橛袀浞菰谑?,除非備份文件出故障,你可能不再需要使用之前的日志文件?/p>
mysqlbackup
mysqlbackup是MySQL的物理備份工具,只有付費(fèi)的商用企業(yè)版才有。
mysql
mysql是MySQL最重要的客戶端管理工具,通常用戶都是通過mysql登錄到MySQL服務(wù)器,進(jìn)行各種操作。此外,還可以直接通過它執(zhí)行SQL腳本,還原或創(chuàng)建新庫。
mysql -h127.0.0.1 -uroot -p12313 < mydb.sql
這樣會(huì)直接執(zhí)行mydb.sql的腳本。通過mysqldump備份出來的腳 本文件,可以用該方法直接用來恢復(fù)原數(shù)據(jù)庫。
mysqladmin
mysqladmin是MySQL服務(wù)器的管理工具,一般用于配置服務(wù)器,也可以用來創(chuàng)建或刪除數(shù)據(jù)庫:mysqladmin [options] command [command-arg] [command [command-arg]]
常用的command(執(zhí)行命令)有:
create db_name 創(chuàng)建數(shù)據(jù)庫
drop db_name 刪除數(shù)據(jù)庫
flush-logs 刷日志
flush-tables 刷表,所有表數(shù)據(jù)寫入磁盤盤
kill id,id,… 殺死某些進(jìn)程
password new_password 修改(登錄者的)登錄密碼
ping 檢查服務(wù)器是否可用
status 顯示服務(wù)器狀態(tài)
variables 顯示各配置參數(shù)的值
…
同樣,該工具也支持不少可選的參數(shù),詳見官方手冊。
mysqlbinlog
mysqlbinlog是MySQL的日志管理工具。在需要手工介入的故障恢復(fù)中,該工具必不可少。當(dāng)然,平常也可以用它查看日志。
mysqlbinlog mysql-bin.000983
上面的例子,用來查看日志文件mysql-bin.000983。MySQL的日志文件具有相同的前綴,后面的數(shù)字是日志文件的順序。這個(gè)前綴是可配置的。比如,也可能是binlog.*,例如:
執(zhí)行日志文件會(huì)導(dǎo)致日志所記錄的事件重新做一遍,這樣可以恢復(fù)一個(gè)給定時(shí)間段的數(shù)據(jù),恢復(fù)的方法如下:mysqlbinlog [option] binlog_files | mysql -u root -p
介質(zhì)故障的恢復(fù)通常需要把最近一次備份后所有的日志文件全部列上。
mysqlbinlog也支持幾十個(gè)可選的參數(shù),比如:
–disable-log-bin 在通過日志恢復(fù)數(shù)據(jù)庫期間不再寫日志
–no-defaults 不使用MySQL默認(rèn)的設(shè)置
其它參數(shù)數(shù)詳情請參考官方文檔。
MySQL還有其它一些工具(如mysqlimport,mysqlshow等),這里不一一介紹。
編程要求
設(shè)有居民人口登記數(shù)據(jù)庫residents,請為該數(shù)據(jù)庫做一次靜態(tài)的(你一個(gè)人獨(dú)享服務(wù)器)海量邏輯備份,備份文件命名為residents_bak.sql。 然后再用該邏輯備份文件恢復(fù)數(shù)據(jù)庫。
評(píng)測程序并不檢查備份文件的名字,你可以用其它文件名,但要保證備份和恢復(fù)時(shí),使用同一個(gè)文件。備份和恢復(fù)的命令分別寫在test1_1.sh和test1_2.sh文件中。
- test1_1.sh - 作備份
- test1_2.sh - 作恢復(fù)
切莫把兩個(gè)文件弄反了。
根據(jù)提示,在右側(cè)代碼文件編輯器填寫語句,完成上述要求。缺 省情況下你看到的應(yīng)該是test1_1.sh。鼠標(biāo)移至“代碼文件”右側(cè)的三角符號(hào),會(huì)列出全部代碼文件,你可以在兩個(gè)代碼文件間自由切換。當(dāng)所有代碼文件都填寫完成后,點(diǎn)擊“評(píng)測”按鈕。
注意:mysql,mysqldump,mysqladmin運(yùn)行時(shí)需提供登錄用戶名和密碼,由于不是在交互式環(huán)境中使用這些工具,你需要在命令行上給出登錄所需要的信息,例如:
mysql -h127.0.0.1 -uroot -p123123
但在命令行曝光密碼具有極高風(fēng)險(xiǎn),MySQL會(huì)拋出警告信息,故評(píng)測程序會(huì)通過其它途徑提供登錄密碼,請?jiān)诿钚惺÷?p參數(shù)。以mysql為例,你只需要這樣寫即可:
mysql -h127.0.0.1 -uroot
測試說明
數(shù)據(jù)庫residents是本來就有的,平臺(tái)會(huì)先運(yùn)行test1_1.sh來作備份,然后會(huì)drop掉residents。再運(yùn)行test1_2.sh來恢復(fù)數(shù)據(jù)庫。最后檢查恢復(fù)是否成功,如果在每個(gè)residents實(shí)列上的評(píng)測結(jié)果,都與預(yù)期結(jié)果完全一致即過可通關(guān)。
開始你的任務(wù)吧,祝你成功!
代碼參考
test1_1.sh 文件內(nèi)容
# 你寫的命令將在linux的命令行運(yùn)行
# 對(duì)數(shù)據(jù)庫residents作海量備份,備份至文件residents_bak.sql:
mysqldump -h127.0.0.1 -uroot --flush-logs --databases residents > residents_bak.sql
test1_2.sh 文件內(nèi)容
# 你寫的命令將在linux的命令行運(yùn)行
# 利用備份文件residents_bak.sql還原數(shù)據(jù)庫:
mysql -h127.0.0.1 -uroot < residents_bak.sql
第2關(guān) 備份+日志:介質(zhì)故障的發(fā)生與數(shù)據(jù)庫的恢復(fù)
任務(wù)描述
本關(guān)任務(wù):
模擬介質(zhì)故障的發(fā)生,以及如何利用備份和備份之后的日志恢復(fù)數(shù)據(jù)庫。
相關(guān)知識(shí)
只要有備份文件,和自上次備份以來的日志文件,即使發(fā)生介質(zhì)故障導(dǎo)致整個(gè)數(shù)據(jù)庫丟失,也可以在更換介質(zhì)后,恢復(fù)數(shù)據(jù)庫。上一關(guān)已介紹有關(guān)知識(shí)。
在生產(chǎn)環(huán)境中,數(shù)據(jù)庫文件、備份文件、日志文件都不會(huì)存放在同一介質(zhì)上,甚至都不會(huì)存放在同一地理空間。為的就是災(zāi)難發(fā)生后,有機(jī)會(huì)恢復(fù)數(shù)據(jù)。
本關(guān)將摸擬介質(zhì)故障的發(fā)生與數(shù)據(jù)庫的恢復(fù)。你要使用的工具包括:
- mysql
- mysqldump
- mysqlbinlog
上一關(guān)已經(jīng)介紹了它們的用法。
編程要求
摸擬介質(zhì)故障的發(fā)生與數(shù)據(jù)庫的恢復(fù)。依時(shí)間順序發(fā)生下列事件(其中標(biāo)記為紅色的部分將由你來完成,其余部分由評(píng)測程序完成):
時(shí)間點(diǎn)1:數(shù)據(jù)庫train有業(yè)務(wù)數(shù)據(jù)產(chǎn)生;
時(shí)間點(diǎn)2:對(duì)數(shù)據(jù)庫train作一次海量備份,同時(shí)新開日志;
時(shí)間點(diǎn)3:數(shù)據(jù)庫train又有業(yè)務(wù)數(shù)據(jù)產(chǎn)生;
時(shí)間點(diǎn)4:故障發(fā)生;
時(shí)間點(diǎn)5:恢復(fù)數(shù)據(jù)庫,保證兩次發(fā)生的業(yè)務(wù)數(shù)據(jù)都不丟失。
請你完成時(shí)間點(diǎn)2和時(shí)間點(diǎn)5(標(biāo)注紅色的部分)的工作,將完成任務(wù)的腳本填寫到對(duì)應(yīng)文件中:
- 對(duì)數(shù)據(jù)庫train作一次海量邏輯備份同時(shí)開新日志:test2_1.sh
- 利用備份文件和日志文件恢復(fù)數(shù)據(jù)庫: test2_2.sh
切莫把兩個(gè)文件弄反了。
所有其它工作,評(píng)測程序會(huì)替你完成:
- 在發(fā)生業(yè)務(wù)數(shù)據(jù)的時(shí)間點(diǎn),會(huì)批量寫入數(shù)據(jù);
- 在故障發(fā)生的時(shí)間點(diǎn),數(shù)據(jù)庫train會(huì)被drop掉。
- 在drop數(shù)據(jù)庫之前,評(píng)測程序會(huì)將備份后新開的日志文件保存為log/binlog.000018
這里,評(píng)測程序總是替你找到你需要的那個(gè)日志文件,并保存在一個(gè)固定的日志文件中,供你恢復(fù)使用。但在實(shí)踐中,日志文件是一直在變化的,即便是在這樣一個(gè)由你獨(dú)享服務(wù)器實(shí)例的環(huán)境下,兩次點(diǎn)擊“評(píng)測”按鈕,日志文件也會(huì)因評(píng)測程序多次寫入數(shù)據(jù),加上你的備份與恢復(fù)操作而發(fā)生變化,當(dāng)日志文件達(dá)到一定規(guī)模時(shí),MySQL還會(huì)自動(dòng)開啟新日志文件。在本地實(shí)驗(yàn)時(shí),自己要學(xué)會(huì)識(shí)別你需要哪個(gè)或哪些日志文件。
請根據(jù)提示,在右側(cè)代碼文件編輯器填寫語句,完成上述要求。缺 省情況下你看到的應(yīng)該是test2_1.sh。鼠標(biāo)移至“代碼文件”右側(cè)的三角符號(hào),會(huì)列出全部代碼文件,你可以在兩個(gè)代碼文件間自由切換。當(dāng)所有代碼文件都填寫完成后,點(diǎn)擊“評(píng)測”按鈕。
測試說明
評(píng)測程序?qū)凑諘r(shí)間順序觸發(fā)上述相應(yīng)事件,在輪到時(shí)間點(diǎn)2和時(shí)間點(diǎn)5時(shí),運(yùn)行你的腳本。在所有事件結(jié)束后檢查數(shù)據(jù)庫有沒有成功恢復(fù)。如果在數(shù)據(jù)庫的兩個(gè)不同實(shí)例上,故障發(fā)生后,數(shù)據(jù)庫都得以完全恢復(fù),即可通關(guān)。
開始你的任務(wù)吧,祝你成功!
代碼參考
test2_1.sh 文件內(nèi)容文章來源:http://www.zghlxwxcb.cn/news/detail-451188.html
# 這是shell腳本,將在linux命令行上執(zhí)行
# 命令行上可省略密碼的指定
# 請寫出對(duì)數(shù)據(jù)庫train作邏輯備份并新開日志文件的命令,備份文件你可以自己命名(如train_bak.sql):
mysqldump -h 127.0.0.1 -uroot --flush-logs --databases train > backup/train_bak.sql
test2_2.sh 文件內(nèi)容文章來源地址http://www.zghlxwxcb.cn/news/detail-451188.html
# 這是shell腳本,將在linux命令行上執(zhí)行
# 命令行上可省略密碼的指定
# 請寫出利用邏輯備份和日志恢復(fù)數(shù)據(jù)庫的命令:
mysql -h127.0.0.1 -uroot < backup/train_bak.sql
mysqlbinlog --no-defaults log/binlog.000018 | mysql -h127.0.0.1 -uroot
到了這里,關(guān)于MySQL-備份+日志:介質(zhì)故障與數(shù)據(jù)庫恢復(fù)的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!