IT貓撲網(wǎng):您身邊最放心的安全下載站! 最新更新|軟件分類(lèi)|軟件專(zhuān)題|手機(jī)版|論壇轉(zhuǎn)貼|軟件發(fā)布

您當(dāng)前所在位置:首頁(yè)數(shù)據(jù)庫(kù)MYSQL → MySQL簡(jiǎn)易備份方法

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

時(shí)間:2015/6/28來(lái)源:IT貓撲網(wǎng)作者:網(wǎng)管聯(lián)盟我要評(píng)論(0)

    一.錯(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í),為避免還有用戶(hù)來(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ò)的選擇!

    二.開(kāi)始備份

    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)容資料都寫(xiě)在DB 內(nèi),所以 php 程式檔部份異動(dòng)性應(yīng)該不大.

    再來(lái)就是 MySQL DB 部份了,預(yù)設(shè) MySQL 的 DB 檔案是存在 /var/lib/mysql 內(nèi), 以 DB 名稱(chēng)為目錄,目錄內(nèi)就是該 DB 的所有資料,像 phpbb2 這個(gè) DB, 就是存在 /var/lib/mysql/phpbb2 內(nèi),在備份前,因?yàn)榕沦Y料尚未完全寫(xiě)入磁碟, 而且 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 的目錄.)

    對(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)題!

    三.如何回存

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

tar xvfz phpbb2_20020601.tgz

    DB 發(fā)生錯(cuò)誤而要回存時(shí),其實(shí)也不難,先找出最近一次完整正常的備份,先把現(xiàn)在錯(cuò)誤的網(wǎng)頁(yè)或 DB 先更名或 tar 起來(lái),再把好的備份給解開(kā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)檔和資料分開(kāi)儲(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 名稱(chēng), 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 名稱(chēng)就可以,如只要 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 名稱(chēng)改成你的測(cè)試用 DB 名稱(chēng)即可.

    使用這種回存方式, 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 名稱(chēng))

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

CREATE DATABASE phpbb2;

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

    六 開(kāi)始排定備份

    知道備份的方法之後,就可以把整個(gè)備份的動(dòng)作作成一個(gè) Scirpt ,指定 DB 相關(guān)參數(shù)後, 便可利用 Crontab 排定備份的周期和時(shí)間,可以把下面的指令加入 Crontab 內(nèi):

00 04 * * * /home/dbadmin/backup

(backup 是 Script 的檔名)

    排定的時(shí)間當(dāng)然最好是夜間離峰時(shí). 以本文附錄提供的 Script 作備份規(guī)則說(shuō)明,每日?qǐng)?zhí)行備份作業(yè),以一周為一個(gè)周期,所以最近的資料是昨天,最久的資料是一星期前,每次備份是將指定的 DB Full Dump 成一個(gè)檔, 用 tar 壓縮後存入指定的路徑. 備份檔以 DB 的名稱(chēng)加上星期來(lái)命名,星期的表示為"0" 代表星期日,"1"代表星期一,以此類(lèi)推.

    目前該 Scirpt 一次只能備份一個(gè) DB 而已,你可以加以修改以符合你的系統(tǒng)環(huán)境及需求.

    七 結(jié)語(yǔ)

 

    目前這個(gè) Script 在測(cè)試機(jī)上測(cè)試的效果還不錯(cuò),以酷!學(xué)園討論區(qū)的2萬(wàn)多篇討論文章, DB 總大小有30幾 MB, 跑這個(gè) Script 大約只需要30幾秒就完成,下面是以 time 指令測(cè)試

    數(shù)次計(jì)算的結(jié)果:

[root@demo tmp]# time backup

real 0m32.788s

user 0m22.770s 

sys 0m4.610s

[root@demo tmp]# time backup

real 0m33.898s

user 0m24.740s

sys 0m4.590s

[root@demo tmp]# time backup

real 0m32.808s

user 0m23.710s

sys 0m4.750s

測(cè)試機(jī)的硬體配備是Intel Celeron 600 + 256mb SDRAM, 作業(yè)系統(tǒng)是CLE Linux 1.0.

因?yàn)?Dump 備份的速度很快,大部份作 MySQL 的備份都是這樣作的,假如是大型大量的DB 環(huán)境時(shí),就需要考慮以 Incremental 的備份方式,而 MySQL 本身也提供這種備份方式, 這種備份方式,一周作一次完整的備份,每天只要作異動(dòng)作業(yè)檔(LOG)的備份就行,在備份的成本上,可以節(jié)省備份時(shí)間和儲(chǔ)存空間.

完成了備份的工作安排,現(xiàn)在又可以和學(xué)園們一起快樂(lè)的上網(wǎng)沖浪去了...

.附錄-備份Script原始檔

#!/bin/sh

#

# Titl

關(guān)鍵詞標(biāo)簽:方法,備份,簡(jiǎn)易,DB,可

相關(guān)閱讀

文章評(píng)論
發(fā)表評(píng)論

熱門(mén)文章 10款MySQL數(shù)據(jù)庫(kù)客戶(hù)端圖形界面管理工具推薦10款MySQL數(shù)據(jù)庫(kù)客戶(hù)端圖形界面管理工具推薦MySQL常用維護(hù)管理工具MySQL常用維護(hù)管理工具Linux VPS/服務(wù)器上輕松導(dǎo)入、導(dǎo)出MySQL數(shù)據(jù)Linux VPS/服務(wù)器上輕松導(dǎo)入、導(dǎo)出MySQL數(shù)據(jù)MySQL復(fù)制的概述、安裝、故障、技巧、工具MySQL復(fù)制的概述、安裝、故障、技巧、工具

相關(guān)下載

人氣排行 MySQL數(shù)據(jù)庫(kù)啟動(dòng)失敗1067進(jìn)程意外終止的解決辦法總結(jié)10款MySQL數(shù)據(jù)庫(kù)客戶(hù)端圖形界面管理工具推薦Mysql 1045錯(cuò)誤解決辦法MySQL服務(wù)器進(jìn)程CPU占用100%解決辦法MySQL導(dǎo)出導(dǎo)入命令的用例MySQL無(wú)法啟動(dòng)、無(wú)法停止各種解決方法總結(jié)三種常用的MySQL建表語(yǔ)句Mysql清空表的實(shí)現(xiàn)方法