使用 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, 要的話就把此註解拿掉.

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

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

關於 Tsung

對新奇的事物都很有興趣, 喜歡簡單的東西, 過簡單的生活.
本篇發表於 My_Note-Unix。將永久鏈結加入書籤。

使用 PHP 對所有 MySQL Database 做 Optimize / Repair 的動作 有 6 則回應

  1. Treker 說道:

    請問效果如何

  2. Tsung 說道:

    資料小看不出來, 量大 Optimize 會有差, 不過我主要是做 check, 稍微做做檢查, 壞掉即早發現比較好.

  3. mic 說道:

    http://i.justrealized.com/2009/how-to-optimize-mysql-database-with-a-command/
    這裡有寫
    mysqlcheck -op database_name
    會做 optimize
    You can also use option ‘r’ to repair.
    故得到
    mysqlcheck -u root -opr --all-databas
    既可
    XD

  4. mic 說道:

    mysqlcheck -u root -opr --all-database
    orz

  5. Tsung 說道:

    感恩, 這招簡單又方便, 真是太棒了.
    mysqlcheck -u root -opr -p --all-database

發表迴響

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