近期發現備份的 MySQL 數據目錄異常膨脹,多出 ibdata1、ib_logfile0、ib_logfile1 三個文件。排查後發現是從 5.0 遷移到 5.5 時,因 5.5 無法直接關閉 InnoDB 啟動,只能暫時開啟,導致預設產生這些系統表空間與日誌文件。嘗試限制文件大小卻發現最小 10 MB,仍嫌過大,遂決定徹底禁用 InnoDB。
在 my.cnf 的 [mysqld] 區塊添加:
default-storage-engine=MYISAM
innodb=OFF
重啟 MySQL 後,刪除上述三個文件即可。
5.6 版本預設使用 InnoDB,且不再允許簡單關閉。除上述兩行外,還必須額外指定臨時表引擎並禁用所有 InnoDB 相關的 INFORMATION_SCHEMA 表,否則服務無法啟動或頻繁崩潰。
default-storage-engine=MYISAM
default-tmp-storage-engine=MYISAM
innodb=OFF
loose-innodb-trx=0
loose-innodb-locks=0
loose-innodb-lock-waits=0
loose-innodb-cmp=0
loose-innodb-cmp-per-index=0
loose-innodb-cmp-per-index-reset=0
loose-innodb-cmp-reset=0
loose-innodb-cmpmem=0
loose-innodb-cmpmem-reset=0
loose-innodb-buffer-page=0
loose-innodb-buffer-page-lru=0
loose-innodb-buffer-pool-stats=0
loose-innodb-metrics=0
loose-innodb-ft-default-stopword=0
loose-innodb-ft-inserted=0
loose-innodb-ft-deleted=0
loose-innodb-ft-being-deleted=0
loose-innodb-ft-config=0
loose-innodb-ft-index-cache=0
loose-innodb-ft-index-table=0
loose-innodb-sys-tables=0
loose-innodb-sys-tablestats=0
loose-innodb-sys-indexes=0
loose-innodb-sys-columns=0
loose-innodb-sys-fields=0
loose-innodb-sys-foreign=0
loose-innodb-sys-foreign-cols=0
loose- 前綴表示「若選項不存在則忽略」,確保兼容性。配置來源:Oracle 官方文檔。
mysql_upgrade 升級系統表(遷移版本時必做)。my.cnf 加入上述配置。ibdata1、ib_logfile* 文件。