魔術師日記 1 - 消失的DB
MySQL in 5.7, MyISAM has MYD, MYI, FRM files. In 8.0, the FRM is replaced with SDI (Serialized Dictionnary Information)
魔術師日記 1 - 消失的DB
公司的外包系統準備今年後不再續約,準備自己開發一套新的系統,
由於某些不好說的原因此專案沒有任何文件或是程式碼,
這週剛收到外包提供的DB備份,
既期待又怕被傷害的拆開大禮包一看,
驚喜 :這個備份檔,名不虛傳還真的是從DB檔案"備份"出來的FRM 跟MYD檔。
依照之前的經驗,本機 Windows + Laragon 的環境下開啟直接複製到laragon\data\mysql\ 、匯出成sql後、匯入到同事先前建立好的開發環境Ubuntu+Mysql 就可以開始奇幻旅程。此時後面的同事A默默地說了一句:我把檔案直接複製到開發環境中為什麼不行。讓我們請出Google大神來研究一下:
db.opt 用來記錄該庫的預設字符集編碼和字符集排序規則用的。也就是說如果你建立資料庫指定預設字符集和排序規則,那麼後續建立的表如果沒有指定字符集和排序規則,那麼該新建的表將採用db.opt檔案中指定的屬性。
default-character-set=utf8
default-collation=utf8_general_ci
.frm 主要是表結構的定義資訊,不論什麼儲存引擎,每一個表都會有一個以表名命名的.frm檔案。
.MYD和.MYI .MYD:MY Data,是MyISAM儲存引擎專用的,用於存放MyISAM表的資料。 .MYI:MY Index,專屬於MyISAM儲存引擎,主要存放MyISAM表的索引相關資訊。
.ibd和.ibdata 兩者都是專屬於InnoDB儲存引擎的資料庫檔案。 .ibd:採用獨享表空間時InnoDB表的資料檔案。 .ibdata:採用共享表空間時所有InnoDB表的資料均存放在.ibdata中,這個檔案裡還儲存了:變更緩衝區、雙寫緩衝區、撤銷日誌
理論上測試機應該也是可以的說,但是測試複製檔案後,MySQL會找不到複製的DB,在研究了一陣子之後發現魔鬼藏在測試機版本: MySQL 8.0.28
In 8.0, the FRM is replaced with SDI (Serialized Dictionnary Information).
所以直接複製在測試機試會抓不到DB,在下列連結有找到解法,但是肚子實在太餓了,剩下的部分就下回待續 …
메타데이터
- post_id
- 9d34d99f3cdb
- slug
- 魔術師日記-1-消失的db-9d34d99f3cdb
- url
- https://medium.com/@lalalili/%E9%AD%94%E8%A1%93%E5%B8%AB%E6%97%A5%E8%A8%98-1-%E6%B6%88%E5%A4%B1%E7%9A%84db-9d34d99f3cdb
- canonical_url
- https://medium.com/@lalalili/%E9%AD%94%E8%A1%93%E5%B8%AB%E6%97%A5%E8%A8%98-1-%E6%B6%88%E5%A4%B1%E7%9A%84db-9d34d99f3cdb
- author_url
- https://medium.com/@lalalili
- status
- ok
- fetched_at
- 2026-07-27 08:10:38