發現 Blog 的速度越來越慢, 主要原因應該是資料越來越多, Database 也開太多(資料蒐集 等等), 於是想說要來為所有 DB 做 Optimize 和 Repair 的動作.
詳可見:
- MySQL Reference Manual :: OPTIMIZE TABLE Syntax
- MySQL Reference Manual :: REPAIR TABLE Syntax
- myisamchk — MyISAM Table-Maintenance Utility
簡單說就是要對所有 Table 做這兩個動作:
- OPTIMIZE TABLE table_name;
- REPAIR TABLE table_name;
註1: 如果都是 MyISAM 格式, 可以考慮用 myisamchk 直接做, ex:
- cd /var/lib/mysql/DB_NAME
- 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" 自動略過