捕夢網雲端主機提供資料庫備份還原服務
我們有使用捕夢網的雲端解決方案,有提供免費的備份還原服務,可以指定還原30天的資料或是程式。
因為用的是雲端方案,所以,備份還原資料不限,通通都是免費(整個方案一年十多萬),資料只花了半個小時就還原了,後來我們發現,連資料庫都要還原。
可是資料庫還原了一個小時,還沒有好,我就再打電話去問,原來捕夢網用的是實體備份的方式,所謂的實體備份,就是直接備份資料檔。
直接備份資料檔的好處就是,動作簡單,而且備份動作很快,最重要的是不佔CPU效能。只要備份/var/lib/mysql下的實體檔案,備份真的很容易,只要用到CP/DD指令即可。另一個缺點是,同一個版本的資料庫系統,還原很容易,如果mysql的版本不同,就有可能還元失敗。
捕夢網採用的這個備份方式,俗稱Binary Copy式備份,mysql資料匣中,資料庫名稱就是資料匣名稱,每個資料表會有三種檔案格式。
1. FRM: 儲存這個資料表的結構
2. MYD: Row Data,也就是你存在資料表(table)裡的資料
3. MYI: 此資料表的索引
我習慣的備份方式
我習慣的備份方式是使用mysqldump指令,直接下指令,就把檔案備份起來,俗稱MySQL Dump資料庫備份,備份出來的檔文是文字檔。
之前沒有CLI(Command Line Interface)的時候,就是自己寫程式,把資料一樣倒出sql statement,一樣備份出來,而且備份的檔案還有亂碼名稱,安全性很高。
用這個方式的缺點就是,要有CLI,或是我們自行開發程式,而且還要有資料庫的帳號和密碼。而且要佔CPU效能。好處是,還原容易,一個指令下下去,就等結果,透過這種方式,我還原過600MB的MySQL資料庫。
當捕夢網的備份方式遇到MyISAM的時候?
這兩個東西相遇,不會有什麼火花,反而是一個災難,這麼說好了!不是一行指令下下去打完收工。
因為備份時,要連同ibdata1一起備份,還原時,不是資料檔丟進去就好,還要做資料庫修複才可以用。
是的!不是我們想的這麼簡單,檔案丟進去,restart mysql服務就收工。
當使用 innoDB 模式建立資料庫時,mysql 預設所有 database 的實體資料均放在 ibdata1 檔內, 所以當 database 眾多時該檔的膨脹就很快。
MyISAM問題也不是不能解
其實每個table都可以有自己的資料檔,不用進中到ibdata1中,只要修改my.ini;加入innodb_file_per_table=1 參數,
這樣就可以直接備份檔案,還原起來也比較簡便。
由此可知,捕夢網用的還是舊的方式,舊的技術和方法。
MySQL使用MyISAM引擎的資料庫修復方式
1.找到資料匣下的innodb的Logfile,長的像下面這樣,確認他們的存在,才能修復資料庫
-rw-rw—- 1 mysql mysql 5242880 Jun 25 11:30 ib_logfile0
-rw-rw—- 1 mysql mysql 5242880 Jun 25 11:30 ib_logfile1
2.把mysql開到安全模式
/usr/sbin/mysqld –innodb_log_file_size=5242880 –innodb_force_recovery=6
無誤的話會看到下面的資料
MyISAM: The user has set SRV_FORCE_NO_LOG_REDO on
MyISAM: Skipping log redo
070625 11:59:36 MyISAM: Started; log sequence number 0 0
MyISAM: !!! innodb_force_recovery is set to 6 !!!
070625 11:59:36 [Note] /usr/sbin/mysqld: ready for connections.
Version: ‘5.0.18’ socket: ‘/var/lib/mysql/mysql.sock’ port: 3306 SUSE MySQL
3.把資料用mysqldump指令把資料備出來
mysqldump -u root -p database > database.sql
資料庫會做修復的動作
Got error: 1146: Table ‘database.table’ doesn’t exist when using LOCK TABLES
4.還原資料
mysql -u root -p database < database.sql
小結
還是用MyISAM引擎比較安全,MyISAM還真的不是這麼好處理。光是要做還原資料,又不能影響到別的資料庫運作,就要主機搬來搬去,我真的好懶,真的。
PS1.不是我匯入10萬筆資料造成的問題,何況我只倒了5000多筆不到6000筆的資料
PS2.我已經套用網路先進的script,把所有的MyISAM改成MyISAM引擎
PS3.時間與空間的選擇,要看使用環境以及管理員的喜好