程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> 關於MYSQL數據庫 >> 一個MySQL數據庫的簡易備份方法介紹

一個MySQL數據庫的簡易備份方法介紹

編輯:關於MYSQL數據庫

適用對象: MySQL DB管理員.

適用條件: 對 Linux 環境有基礎的管理及操作能力.

文章附注: 本篇文章為自由文件,歡迎非商業性質轉載,並請注明出處!

商業性質轉載請來信告知!

特別注意: 1.本篇文章提供之程式及設定*不一定*符合您的環境,

請依您的系統環境適當地修改程式及設定.

2.在執行任何具破壞性的動作及行為前,

請確認您已作好完整可用的資料備份工作.

目錄內容

一.前言

二.錯誤修正

三.開始備份

四.如何回存

五.MySQL線上備份

一.前言

正當我在網上快樂的沖浪,在酷!學園快樂的灌口水時,竟蹦出一頁 "phpBB critical error",查詢 Database 出現錯誤的訊息,中斷了各學員在各系版唇槍舌戰,熱烈的討論,雖然過了不久,系統管理工友把網頁修好,但開始連續幾個星期,PHPBB 討論區有時還是很容易掛掉,頻率大約是一至二周一次,通常都是在周末大家最閒的時侯發生的,幸好此時剛好世界杯足球賽正好開打,不能到學園灌水,最少還有足球賽可以看.

當時修護的方式,是將 MySQL 服務停止,再把前一次可用的DB檔案蓋回去, 然後再重新啟動 MySQL 服務來測試 PHPBB 是否正常,這樣子的作法通常都有效,但總是會遺失某一段時間內的文章,這不是大家所希望的...

為了保存許多珍貴的資料和學園們惡心的口水,我開始著手准備 DB 的備份工作,准備重建這個有問題 DB ,更為將來校園的遷址作 DB 移轉准備.

(DB: Database的簡稱,以下都以 DB 取代 Database,PHPBB: 酷!學園討論區系統的軟體名稱)

二.錯誤修正

花了一些時間熟悉主機的環境後,我開始尋找錯誤在那裡...

檢測 MySQL 內 PHPBB 的 DB 後發現,有個 users 的 table 是有問題的,使用 myisamchk 嘗試去修護,發現還不行用預設方式修護,還要多加個 "-o"的參數才行,在使用 myisamchk 時,為避免還有用戶來存取 DB ,最好是能夠將 MySQL 服務停止,不然最少也要下個 "MySQLadmin flush-tables" 後,

再作 myisamchk 指令,像:

myisamchk -o PHPbb2_users.MYI

這個動作,可能要作個2'3次,直到沒有錯誤的訊息出現!

修護完,重新啟動 MySQL 服務後,就可以用 MySQL 這個 clIEnt 的指令,去 Query 一下 DB 內容,測試看是否正常.很幸運的,DB的部份在此時,運作是正常的.

當然,在你要備份之前,假如能先檢測資料是否正確,那是最好不過了, 假如有需要,可以把檢測的工作,排定在備份工作之前,但是記得,這個檢測DB 的動作不要排定在 DB 高用量的那段時間,深夜無人上線的時段是個不錯的選擇!

三.開始備份

phpBB 討論區的資料檔,主要有兩個部份,就是 php 主程式和 DB 內容,PHP 主程式的備份就比較簡單,只要把全部檔案 tar 起來就行了,就像:

tar cvfz phpbb2_20020601.tgz PHPbb

(上面的 phpbb 是指 phpBB 的 PHP 網頁程式存放目錄.)

以後有改到 phpBB 網頁程式部份再重新備份一次就行,它的內容資料都寫在DB 內,所以 PHP 程式檔部份異動性應該不大.

再來就是 MySQL DB 部份了,預設 MySQL 的 DB 檔案是存在 /var/lib/mysql 內,以 DB 名稱為目錄,目錄內就是該 DB 的所有資料,像 phpbb2 這個 DB,就是存在 /var/lib/MySQL/PHPbb2 內,在備份前,因為怕資料尚未完全寫入磁碟,而且 MySQL 會 Lock 在使用的 DB 檔案,所以應該是要先把 MySQL 先 Shutdown 一下,整個備份的程序可以下像下面的指令去完成:

/etc/rc.d/init.d/MySQLd stop 
tar cvfz phpbb2_db_20020601.tgz PHPbb2 
/etc/rc.d/init.d/MySQLd start

(上面的 phpbb2 是指存放 PHPbb2 這個 DB 的目錄.)

Ok!這樣就完成了! (什麽?就這樣! 3行就結束了?!)

對!這樣就可以了! 不過要注意的是,怕 DB 內每個 Tables 間的資料有關關聯性,所以最好是把整個 DB 一次備起來,單獨只備哪個 Tables 的檔案,以後回存時,怕會有資料關聯不一致的問題!

以酷!學園的口水討論區為例,有21000筆左右的文章加上1200名注冊會員,資料庫整個 tar 起來大約30幾 MB 左右,每天備份,以一周為周期來計算,備份大約只需要(35*7=245) 200 多 MB 左右的空間,一星期的備份燒在一張光碟還夠!

四.如何回存

PHPBB 討論區的回存,只需把檔案解回原來存放網頁的路徑就可以,用以下指令解開:

tar xvfz PHPbb2_20020601.tgz

DB 發生錯誤而要回存時,其實也不難,先找出最近一次完整正常的備份,先把現在錯誤的網頁或 DB 先更名或 tar 起來,再把好的備份給解開回原來目錄位置就行了,需要注意的是, MySQL 服務最好也是要先停止,回存完成後再啟動服務,回存 DB 的整個程序可能像下面:

/etc/rc.d/init.d/MySQLd.stop 
mv phpbb2 phpbb2_error 
tar xvfz PHPbb2_db_20020601.tgz 
/etc/rc.d/init.d/MySQLd.start

然後再去測試一下網頁及資料庫! 看使用上是否正常就行了...

五.MySQL線上備份

使用像上面的"檔案"方式備份是個不錯的方法,它最少可以保持該主機某個時間點的完整檔案備份,但還是有一些問題需要考慮到,有些主機就不只建立一個 DB 而已,總不能為了備份某個 DB 而把整個MySQL 服務停止,備份檔案的方式,回存在原主機上一定適用,但假如 MySQL 版本升級,或是在那天,該網頁空間需遷機移機到別的主機時,那就沒人敢保證備出來的資料檔可以用,所以我們可以考慮另一種備份的方式,是使用MySQL 本身提供的功能: "MySQL Data Dump",指令是 "MySQLdump".

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved