第 1 頁 (共 3 頁)
[討論]不建議的 MySQL 資料備份方式
發表於 : 2006-10-21 02:17
由 chiouss
包括我自己還有一些認識的人在內,很多人都知道 MySQL 的備份可以透過把 mysql\data\ 這個目錄複製起來 (UN*X 的話可能是 /var/db/mysql/ 之類的) 來達到目的,甚至有人曾經寫過用
rsync 來同步多台 mysql server database 的文章,然而這是個不被官方接受的備份方式...儘管我以前也是這樣幹的
MySQL 從 3.23 變到 4.0 的變化之一就是讓預設的 db 格式變成 InnoDB (3.23 的後期版本要使用 mysql-max 才支援),這種格式的好處是可以支援更多的正式 SQL 指令,像是 foreign key (有接觸比較多資料庫的人應該會知道,MySQL 還有很多正式的 SQL 指令沒有支援到),根據我的經驗,使用這種格式的資料庫,如果你把其中一個 database (也就是你 mysql/data/ 裡面的一個目錄) 備份覆蓋回去的話,可能會在讀取或是寫入的時候出現錯誤。Manual 裡面是有提過 InnoDB 如果要做 "binary backup" 的話要怎麼做,但是
backup 章節裡面還是只有寫 mysqldump 這種正統的用法 -- 當然,你也要使用正確。
直接用 mysql/data/ 來備份還有一個問題,通常是發生在 major version upgrade 的時候 (ex. 3.23 -> 4.0),mysql 本身的資料欄位有更動或是新增,這時候直接使用這種備份有時候會遇到寫入資料的時候沒有 default value 的問題,我碰了好幾次。用 sql 備份的時候 default value 會在你 import sql 進去的時候自動加上,就不會有這個問題。
我只碰過以上兩種錯誤的 case,提出來和大家分享。雖然我也知道 4.1 以後的 charset 問題讓大家用起來很頭大,但是我覺得還是用 sql 備份比較妥當,當然你也可以兩個都做。

發表於 : 2006-10-21 02:20
由 chiouss
對了,InnoDB 只有在 mysql server 停止的時候才可以備份喔...
舊的 MyISAM 也是建議在 lock table 的情況下作備份...
發表於 : 2006-10-21 09:42
由 進藤光
嗯嗯~直接 copy 檔案的備份方式確實是不太好...
不過呢,mysqldump 只幫你備份出來,要自動 restore 那就....
而且還希望兩台 SQL Server 都能同步的話,就更 OOXX 了.... XD
底下是他們寫給我的最新一封回信,之前的就不用貼囉~很顯然,我果然又遇到 Bug 了~我老是遇到一堆 Bug... XD
看樣子得等到 MySQL Administrator 1.2.5 或是 1.3 版才能解決我的問題,這樣子直接用 MySQL Administrator 設定的自動備份應該就能使用了... 希望啦~
ID: 22318
Updated by: Vladimir Kolesnikov
Reported by: Brent Su
Category: MySQL Administrator
Severity: S2 (Serious)
-Status: In progress
+Status: Closed
Version: 1.2.3 RC
Operating System: Mac OS X Server 10.4.7
Tags: MySQL Administrator 1.2.3 RC
Assigned To: Vladimir Kolesnikov
[19 Oct 16:32] Vladimir Kolesnikov
Thank you for your bug report. This issue has been committed to our
source repository of that product and will be incorporated into the
next release.
If necessary, you can access the source repository and build the latest
available version, including the bug fix. More information about
accessing the source trees is available at
http://dev.mysql.com/doc/en/installing-source.html
發表於 : 2006-10-21 11:06
由 chiouss
進藤光 寫:不過呢,mysqldump 只幫你備份出來,要自動 restore 那就....
restore 就...這樣阿 XD
代碼: 選擇全部
mysql --user=root --password='root_password' phpbb2 < phpbb2.sql
而且還希望兩台 SQL Server 都能同步的話,就更 OOXX 了.... XD
備分系統本來就很難做到 real time 的同步了,真的要同步備份那就用 RAID-1 吧!
*茶*
發表於 : 2006-10-21 12:00
由 進藤光
chiouss 寫:進藤光 寫:不過呢,mysqldump 只幫你備份出來,要自動 restore 那就....
restore 就...這樣阿 XD
啊~不是啦~~我是說 restore 最好不要天天自動 restore... 萬一被入侵 phpBB,這下不就全都掛?

發表於 : 2006-10-21 16:20
由 chiouss
進藤光 寫:啊~不是啦~~我是說 restore 最好不要天天自動 restore... 萬一被入侵 phpBB,這下不就全都掛?

哪有人天天把備份拿來 restore 的,又不是和自己的硬碟 I/O 過意不去? = =
發表於 : 2006-11-27 07:59
由 白牙
chiouss 寫:對了,InnoDB 只有在 mysql server 停止的時候才可以備份喔...
舊的 MyISAM 也是建議在 lock table 的情況下作備份...
也就是說, 如果我用的是 Windows 系統,
只要把 SQL Server 完全停止
使用土法煉鋼的備份 \mysql\data\* 仍然不會有 InnoDB 的問題嗎?

發表於 : 2006-11-27 11:14
由 小竹子
restore 的時候用指令我常會遇到衝碼問題就會失敗ˊˋ
發表於 : 2006-11-27 13:18
由 chiouss
小竹子 寫:restore 的時候用指令我常會遇到衝碼問題就會失敗ˊˋ
因為你開了 magic_quote :Q
發表於 : 2006-11-27 22:14
由 ckmarkhsu
chiouss 寫:進藤光 寫:啊~不是啦~~我是說 restore 最好不要天天自動 restore... 萬一被入侵 phpBB,這下不就全都掛?

哪有人天天把備份拿來 restore 的,又不是和自己的硬碟 I/O 過意不去? = =
有xd 作 demo site 的時候就會用到:o
發表於 : 2006-11-27 23:29
由 chiouss
ckmarkhsu 寫:有xd 作 demo site 的時候就會用到:o
demo site 也只會拿一開始的 database 來 restore 吧?
不過其實我玩 demo site 都是資料庫整個砍掉重練的

發表於 : 2006-11-27 23:32
由 chiouss
白牙 寫:也就是說, 如果我用的是 Windows 系統,
只要把 SQL Server 完全停止
使用土法煉鋼的備份 \mysql\data\* 仍然不會有 InnoDB 的問題嗎?

都說
*不建議*你這樣做了,還是堅持要用的話請自己保重...

發表於 : 2006-11-28 17:28
由 ckmarkhsu
chiouss 寫:ckmarkhsu 寫:有xd 作 demo site 的時候就會用到:o
demo site 也只會拿一開始的 database 來 restore 吧?
不過其實我玩 demo site 都是資料庫整個砍掉重練的

不是不是啦:$ 就是那種給別人試用的 DEMO SITE,每天早上凌晨四點 restore 一下
不過好像也只有 restore 不會 backup XD
發表於 : 2006-11-28 23:09
由 chiouss
貼個直接升級會出現的 error 出來給大家看
代碼: 選擇全部
E:\MySQL\bin\mysqld-nt: Table 'mysql.plugin' doesn't exist
061128 22:43:04 [ERROR] Can't open the mysql.plugin table. Please run he mysql_upgrade script to create it.
061128 22:43:04 [ERROR] SCHEDULER: Table mysql.event is damaged. Can not open
061128 22:43:04 [Note] SCHEDULER: Purging queue. 0 events
061128 22:43:04 [ERROR] SCHEDULER: Error while loading from disk.
那個 mysql_upgrade 的 shell script 只給 UN*X 用的,Win32 版除非你裝 cygwin 之類的東西否則沒辦法跑

發表於 : 2006-11-28 23:56
由 進藤光
請問【直接升級】是什麼意思呢?下載新的 MySQL 版本,點選安裝?
