是這樣的,我把 xampp portable 的整個資料夾,搬到了另一台電腦上。
裡頭當然也包含 mysql 資料。
我知道,但不清楚原理,mysql 的最好備份法是 mysqldump,到目的地後再反向倒回資料庫。
但是,這幾次這麼做時,會產生一個問題,就是:
不知該如何解決。
除了這個作法,直接複製 mysql 資料庫也不是不可行,但是也會有一些潛在問題。
比如,我試著第一次複製,跑起來結果資料是不齊全的(較舊),但我試著第二次複製,跑起來資料就是齊全的(最新的)。很好奇為何會有如此差異。我複製的來源是同樣同時間的檔案,而且檔案數量一樣,體積也一樣。
所以,我想問的是,備份還原 mysql,一定要用 mysqldump 嗎?直接複製檔案及檔案夾,有比較保險的作法嗎?
因為你光複製檔案, 卻漏了記憶體裡面的資料.
DB Engine 在運作的時候, 為了加快處理速度, 會把一部份資料拿到 RAM 裡面操作, 而且不會立即回存到檔案內, 直到她工作比較不忙碌的時候, 才會回存.
使用 mysqldump 的原因, 就是因為它可以同時取出: 檔案+RAM 兩邊的所有資料. 如果 RAM 的資料還沒有回寫到檔案內, 你自己手動去複製檔案, 得到的就是不完整的結果.
下圖是 MySQL 內部的架構, 你可以發現: File system 是最後一關, 你從 Client 寫入的東西, 不一定會馬上直通到 File System 檔案內, 中間必須經過 Cache 和各種 Engine 的處理, 而這些 Cache/Engine 就會利用 RAM 當作緩衝區來提升效能, 先全部都放在 RAM 裡面處理, 等到資料都不需要被用到的時候, 才慢慢回寫到最下層的檔案內:
當你只把檔案拷貝走的時候, 其實中上層放在 RAM 裡面的資料, 全部都沒有拷貝到.