国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 數(shù)據(jù)庫(kù) > MySQL > 正文

MySQL簡(jiǎn)易備份方法

2024-07-24 12:55:54
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

適用對(duì)象: mysql db管理員.
適用條件: 對(duì) linux 環(huán)境有基礎(chǔ)的管理及操作能力.
文章附注: 本篇文章為自由文件,歡迎非商業(yè)性質(zhì)轉(zhuǎn)載,并請(qǐng)注明出處!
商業(yè)性質(zhì)轉(zhuǎn)載請(qǐng)來(lái)信告知!
特別注意: 1.本篇文章提供之程式及設(shè)定*不一定*符合您的環(huán)境,
請(qǐng)依您的系統(tǒng)環(huán)境適當(dāng)?shù)匦薷某淌郊霸O(shè)定.
2.在執(zhí)行任何具破壞性的動(dòng)作及行為前,
請(qǐng)確認(rèn)您已作好完整可用的資料備份工作.

 目錄內(nèi)容
一.前言
二.錯(cuò)誤修正
三.開始備份
四.如何回存
五.mysql線上備份
六.mysql線上回存
七.開始排定備份
八.結(jié)語(yǔ)
九.參考資料
十.附錄-備份script原始檔

 

一.前言

        前幾周,正當(dāng)我在網(wǎng)上快樂(lè)的沖浪,在酷!學(xué)園快樂(lè)的灌口水時(shí), 竟蹦出一頁(yè) "phpbb critical error",查詢 database 出現(xiàn)錯(cuò)誤的訊息,中斷了各學(xué)員在各系版唇槍舌戰(zhàn),熱烈的討論,雖然過(guò)了不久,系統(tǒng)管理工友把網(wǎng)頁(yè)修好,但開始連續(xù)幾個(gè)星期,phpbb 討論區(qū)有時(shí)還是很容易掛掉,頻率大約是 一至二周一次,通常都是在周末大家最閑的時(shí)侯發(fā)生的,幸好此時(shí)剛好世界杯足球賽正好開打,不能到學(xué)園灌水,最少還有足球賽可以看. 當(dāng)時(shí)修護(hù)的方式,是將 mysql 服務(wù)停止,再把前一次可用的db檔案蓋回去, 然後再重新啟動(dòng) mysql 服務(wù)來(lái)測(cè)試 phpbb 是否正常,這樣子的作法通常都有效, 但總是會(huì)遺失某一段時(shí)間內(nèi)的文章,這不是大家所希望的... 為了保存許多珍貴的資料和學(xué)園們惡心的口水,我開始著手準(zhǔn)備 db 的備份 工作,準(zhǔn)備重建這個(gè)有問(wèn)題 db ,更為將來(lái)校園的遷址作 db 移轉(zhuǎn)準(zhǔn)備.

(db: database的簡(jiǎn)稱,以下都以 db 取代 database,
phpbb: 酷!學(xué)園討論區(qū)系統(tǒng)的軟體名稱)

二.錯(cuò)誤修正

花了一些時(shí)間熟悉主機(jī)的環(huán)境後,我開始尋找錯(cuò)誤在那里... 檢測(cè) mysql 內(nèi) phpbb 的 db 後發(fā)現(xiàn),有個(gè) users 的 table 是有問(wèn)題的,
使用 myisamchk 嘗試去修護(hù),發(fā)現(xiàn)還不行用預(yù)設(shè)方式修護(hù),還要多加個(gè) "-o" 的參數(shù)才行,在使用myisamchk 時(shí),為避免還有用戶來(lái)存取 db ,最好是能夠?qū)?mysql 服務(wù)停止,不然最少也要下個(gè) "mysqladmin flush-tables" 後, 再作 myisamchk 指令,像:

myisamchk -o phpbb2_users.myi

這個(gè)動(dòng)作,可能要作個(gè)2~3次,直到?jīng)]有錯(cuò)誤的訊息出現(xiàn)! 修護(hù)完,重新啟動(dòng) mysql 服務(wù)後,就可以用 mysql 這個(gè) client 的指令, 去 query 一下 db 內(nèi)容,測(cè)試看是否正常.很幸運(yùn)的,db的部份在此時(shí), 運(yùn)作是正常的. 當(dāng)然,在你要備份之前,假如能先檢測(cè)資料是否正確,那是最好不過(guò)了, 假如有需要,可以把檢測(cè)的工作,排定在備份工作之前,但是記得,這個(gè)檢測(cè)db 的動(dòng)作不要排定在 db 高用量的那段時(shí)間,深夜無(wú)人上線的時(shí)段是個(gè)不錯(cuò)的選擇!


三.開始備份

phpbb 討論區(qū)的資料檔,主要有兩個(gè)部份,就是 php 主程式和 db 內(nèi)容,
php 主程式的備份就比較簡(jiǎn)單,只要把全部檔案 tar 起來(lái)就行了,就像:

tar cvfz phpbb2_20020601.tgz phpbb

(上面的 phpbb 是指 phpbb 的 php 網(wǎng)頁(yè)程式存放目錄.)

以後有改到 phpbb 網(wǎng)頁(yè)程式部份再重新備份一次就行,它的內(nèi)容資料都寫在db 內(nèi),所以 php 程式檔部份異動(dòng)性應(yīng)該不大.

再來(lái)就是 mysql db 部份了,預(yù)設(shè) mysql 的 db 檔案是存在 /var/lib/mysql 內(nèi), 以 db 名稱為目錄,目錄內(nèi)就是該 db 的所有資料,像 phpbb2 這個(gè) db, 就是存在 /var/lib/mysql/phpbb2 內(nèi),在備份前,因?yàn)榕沦Y料尚未完全寫入磁碟, 而且 mysql 會(huì) lock 在使用的 db 檔案,所以應(yīng)該是要先把 mysql 先 shutdown 一下, 整個(gè)備份的程序可以下像下面的指令去完成:

/etc/rc.d/init.d/mysqld stop
tar cvfz phpbb2_db_20020601.tgz phpbb2
/etc/rc.d/init.d/mysqld start

(上面的 phpbb2 是指存放 phpbb2 這個(gè) db 的目錄.) ok!這樣就完成了! (什麼?就這樣! 3行就結(jié)束了?!)

對(duì)!這樣就可以了! 不過(guò)要注意的是,怕 db 內(nèi)每個(gè) tables 間的資料有關(guān)關(guān)聯(lián)性, 所以最好是把整個(gè) db 一次備起來(lái),單獨(dú)只備哪個(gè) tables 的檔案,以後回存時(shí), 怕會(huì)有資料關(guān)聯(lián)不一致的問(wèn)題! 以酷!學(xué)園的口水討論區(qū)為例,有21000筆左右的文章加上1200名注冊(cè)會(huì)員,資料庫(kù)
整個(gè) tar 起來(lái)大約30幾 mb 左右,每天備份,以一周為周期來(lái)計(jì)算,備份大約只需要
(35*7=245) 200 多 mb 左右的空間,一星期的備份燒在一張光碟還夠!

本新聞共3頁(yè),當(dāng)前在第1頁(yè)  1  2  3 

 


四.如何回存

phpbb 討論區(qū)的回存,只需把檔案解回原來(lái)存放網(wǎng)頁(yè)的路徑就可以,用以下指令解開:

tar xvfz phpbb2_20020601.tgz

db 發(fā)生錯(cuò)誤而要回存時(shí),其實(shí)也不難,先找出最近一次完整正常的備份,先把現(xiàn)在錯(cuò)誤的網(wǎng)頁(yè)或 db 先更名或 tar 起來(lái),再把好的備份給解開回原來(lái)目錄位置就行了,需要注意的是, mysql 服務(wù)最好也是要先停止,回存完成後再啟動(dòng)服務(wù),回存 db 的整個(gè)程序
可能像下面:

/etc/rc.d/init.d/mysqld.stop
mv phpbb2 phpbb2_error
tar xvfz phpbb2_db_20020601.tgz
/etc/rc.d/init.d/mysqld.start

然後再去測(cè)試一下網(wǎng)頁(yè)及資料庫(kù)! 看使用上是否正常就行了...


五.mysql線上備份

使用像上面的"檔案"方式備份是個(gè)不錯(cuò)的方法,它最少可以保持該主機(jī)某個(gè)時(shí)間點(diǎn)的完整檔案?jìng)浞?但還是有一些問(wèn)題需要考慮到,有些主機(jī)就不只建立一個(gè) db 而已, 總不能為了備份某個(gè) db 而把整個(gè) mysql 服務(wù)停止,備份檔案的方式,回存在原主機(jī)上一定適用,但假如mysql 版本升級(jí),或是在那天,該網(wǎng)頁(yè)空間需遷機(jī)移機(jī)到別的主機(jī)時(shí), 那就沒(méi)人敢保證備出來(lái)的資料檔可以用,所以我們可以考慮另一種備份的方式,是使用 mysql 本身提供的功能: "mysql data dump",指令是 "mysqldump".

使用 mysql 的 dump 功能可以把 db 的"結(jié)構(gòu)","資料"或"結(jié)構(gòu)加資料" dump 成 文字檔, mysqldump 指令提供的彈性很大,你可以選擇把整個(gè) db dump 成一個(gè)檔, 或是每個(gè) table 為一個(gè)檔,甚至是把結(jié)構(gòu)檔和資料分開儲(chǔ)存都可以. 檢測(cè)酷!學(xué)園的 phpbb 資料庫(kù)後發(fā)現(xiàn),以結(jié)構(gòu)加資料 full dump 成一個(gè)檔案, 檔案的大小大約也是30幾mb左右. 在 dump 之前最好多下個(gè) flush-logs 更新 log, 所以整個(gè) dump 的指令如下:

mysqladmin -uroot -p flush-logs
mysqldump phpbb2 -uroot -p opt > phpbb2_20020601.sql

(phpbb2 是 db 名稱, opt 是一個(gè)使用完整 dump 參數(shù))

再使用 time 指令去測(cè)試執(zhí)行時(shí)間,這個(gè)30幾 mb 的 db , dump 出來(lái)竟只要15秒左右, query 的速度還真是快,假如只是要單獨(dú) dump 某個(gè) table 時(shí),只要在上面的指令後, 轉(zhuǎn)出符號(hào) ">" 前加個(gè) table 名稱就可以,如只要 phpbb2_users 這個(gè) table 的 dump 時(shí), 只要下:

mysqldump phpbb2 -uroot -p opt phpbb2_users > phpbb2_users_20020601.sql

dump 出來(lái)的檔案是個(gè)純文字檔,你可以用 tar 把它壓起來(lái),以上面30幾 mb 的 db 為例, 大約可以把檔案大小壓到1/3左右的大小,因?yàn)?dump 出是文字檔,所有的資料都是以明文 顯示,所以必須注意一下備份檔保存的安全性,而且建議備份檔最好再另外儲(chǔ)存於異地以及其他易於保存的媒體上,像光碟片或磁帶,這樣的備份才有意義.


六.mysql線上回存

若要回存整個(gè)資料庫(kù),只需將壓縮的備份檔還原成 dump 的檔案,再用下面的指令回存:

mysql phpbb2 -uroot -p < phpbb2_20020601.sql

這邊需注意的是,若建立備份時(shí)是以"opt"或"add-drop-table"為參數(shù)時(shí),回存的動(dòng)作是先將舊的 table 先刪除,重建 table 的結(jié)構(gòu)後再把 data 匯入,所以回存後, 所有的資料會(huì)回到你當(dāng)時(shí)備份那個(gè)時(shí)間點(diǎn),因此在回存資料時(shí),可以考慮把現(xiàn)有錯(cuò)誤或不完整的 db 先備份一份下來(lái),以備不時(shí)之需,或是拿來(lái)比對(duì)錯(cuò)誤的地方在那里,當(dāng)然你也可以把資料回存到另一個(gè)測(cè)試用的 db 內(nèi),只要把上面指令的 db 名稱改成你的測(cè)試用 db 名稱即可.

使用這種回存方式, mysql 服務(wù)不需停止,也不會(huì)動(dòng)到其他正在使用的 db ,在一些提供mysql 服務(wù)的虛擬主機(jī),可用這種方式作你自己的 db 備份及回存.

另外,假如你是系統(tǒng)重建或是移機(jī)時(shí),切需在新的 mysql 內(nèi),新建一個(gè)空白 db 後,才行作回存的工作,你可以用下面的指令建立:

mysql -uroot -p -e "create database phpbb2"

(上面的phpbb2是你要新建的 db 名稱)

另一種作法,先用 "mysql" 指令進(jìn)入 "mysql client console", 然後再用:

create database phpbb2;

這樣就行了,記得尾端要加個(gè) ";" 符號(hào)該行指令才會(huì)執(zhí)行.


 

共2頁(yè): 上一頁(yè) 1 [2] 下一頁(yè)

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 温宿县| 崇州市| 柯坪县| 河西区| 庄浪县| 南阳市| 双鸭山市| 屯昌县| 鲁甸县| 阜平县| 二手房| 宁德市| 天镇县| 古蔺县| 兴安县| 大同市| 轮台县| 巢湖市| 盐源县| 新乡县| 承德市| 扶风县| 黔西| 溧阳市| 台北县| 张掖市| 贵阳市| 靖江市| 峨眉山市| 沁源县| 策勒县| 玉田县| 漳平市| 惠东县| 嘉峪关市| 肇州县| 贵德县| 雅江县| 松溪县| 民县| 滨海县|