使用 PHP 對所有 MySQL Database 做 Optimize / Repair 的動作

發現 Blog 的速度越來越慢, 主要原因應該是資料越來越多, Database 也開太多(資料蒐集 等等), 於是想說要來為所有 DB 做 Optimize 和 Repair 的動作.

詳可見:

簡單說就是要對所有 Table 做這兩個動作:

  • OPTIMIZE TABLE table_name;
  • REPAIR TABLE table_name;

註1: 如果都是 MyISAM 格式, 可以考慮用 myisamchk 直接做, ex:

  1. cd /var/lib/mysql/DB_NAME
  2. myisamchk --quick --check-only-changed --sort-index --analyze *.MYI

註2: /usr/bin/mysqlcheck -u root -p --all-database # 可以做全部 database 的 check

DB 少 或 Table 少的話, 還可以考慮手動做, 但是當 DB 一頁拉不完時, 還是乖乖寫程式來解決~

此程式註解部份, 有需掉時再自行打開, 下述是註解部份的說明:

  • information_schema: 舊的 MySQL 這個 DB 第一次可能會有錯誤, 所以可以先略過第一次(全部 REPAIR 一次), 之後就可以跑了. (意思是, 若執行時有錯誤, 就把這個註解拿掉, 略過檢查 information_schema 這個 Database)
  • Collation: 要看每個 Table 的編碼, 順便看還有哪些是 latin1 編碼的, 以後有空再把他轉成 utf8.
  • REPAIR: 順便做 REPAIR TABLE table_nmae, 要的話就把此註解拿掉.

2020/9/4 補上 PDO 版本的

感謝 Mic 提供的資訊: How to optimize MySQL database with a command

  • mysqlcheck -u root -opr -p --repair --all-database # 此命令就可以 Check 所有 MyISAM 的 Table, 非 MyISAM 會出現 "Table does not support optimize, doing recreate + analyze instead" 自動略過

作者: Tsung

對新奇的事物都很有興趣, 喜歡簡單的東西, 過簡單的生活.

在〈使用 PHP 對所有 MySQL Database 做 Optimize / Repair 的動作〉中有 6 則留言

mic 發表迴響取消回覆

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料