iT邦幫忙

0

MySQL 備份的問題

  • 分享至 

  • xImage

是這樣的,我把 xampp portable 的整個資料夾,搬到了另一台電腦上。

裡頭當然也包含 mysql 資料。

我知道,但不清楚原理,mysql 的最好備份法是 mysqldump,到目的地後再反向倒回資料庫。

但是,這幾次這麼做時,會產生一個問題,就是:

https://i.imgur.com/xRNfENg.png

不知該如何解決。

除了這個作法,直接複製 mysql 資料庫也不是不可行,但是也會有一些潛在問題。

比如,我試著第一次複製,跑起來結果資料是不齊全的(較舊),但我試著第二次複製,跑起來資料就是齊全的(最新的)。很好奇為何會有如此差異。我複製的來源是同樣同時間的檔案,而且檔案數量一樣,體積也一樣。

所以,我想問的是,備份還原 mysql,一定要用 mysqldump 嗎?直接複製檔案及檔案夾,有比較保險的作法嗎?

wiseguy iT邦超人 1 級 ‧ 2022-10-11 08:45:38 檢舉
不知道你從何得知「mysql 的最好備份法是 mysqldump」?
除非有非不得已的原因,不然有經驗的 IT 不會用這個做 MySQL 備份喔。
缺點:
1. 除非你的參數下對,不然光是直接 mysqldump <DB> 出來,99.9% 是匯不回去的。匯不回去的備份=垃圾。
2. 隨著資料越來越多,mysqldump 會越來越久,若在鎖定狀況下 dump,還能確保完整性,但其他人不能用。若在非鎖定狀況下 dump,其他人可用,但 dump 出的資料可能不完整。不完整的備份=垃圾。
3. dump 出來就是純文字,有保護嗎?別的帳號能不能看到?不安全的備份=垃圾。
ckp6250 iT邦好手 1 級 ‧ 2022-10-11 14:44:36 檢舉
>>除非你的參數下對~~~~

我不是很認同這一句話,若參數下錯,是使用者問題,不是 mysqldump 問題,怎麼能倒果為因?把匯不回去的罪狀,推到它身上?
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 個回答

2
ckp6250
iT邦好手 1 級 ‧ 2022-10-10 11:19:49

mysqldump 比較保險。

3
Ray
iT邦大神 1 級 ‧ 2022-10-10 11:54:51

因為你光複製檔案, 卻漏了記憶體裡面的資料.

DB Engine 在運作的時候, 為了加快處理速度, 會把一部份資料拿到 RAM 裡面操作, 而且不會立即回存到檔案內, 直到她工作比較不忙碌的時候, 才會回存.

使用 mysqldump 的原因, 就是因為它可以同時取出: 檔案+RAM 兩邊的所有資料. 如果 RAM 的資料還沒有回寫到檔案內, 你自己手動去複製檔案, 得到的就是不完整的結果.

下圖是 MySQL 內部的架構, 你可以發現: File system 是最後一關, 你從 Client 寫入的東西, 不一定會馬上直通到 File System 檔案內, 中間必須經過 Cache 和各種 Engine 的處理, 而這些 Cache/Engine 就會利用 RAM 當作緩衝區來提升效能, 先全部都放在 RAM 裡面處理, 等到資料都不需要被用到的時候, 才慢慢回寫到最下層的檔案內:

當你只把檔案拷貝走的時候, 其實中上層放在 RAM 裡面的資料, 全部都沒有拷貝到.

ckp6250 iT邦好手 1 級 ‧ 2022-10-11 14:46:41 檢舉

知其然,並知其所以然,
感恩。

我要發表回答

立即登入回答