MySQL 自動最佳化資料表 (optimize)
by 資訊藝術家 • 2009/05/14 • linux • 1 Comment
在 Mysql 5 以上就有提供這樣功能的程式可以用 ~~ 用法入下
mysqlcheck --all-databases --optimize --auto-repair
那我們將它放到 Crontab 裡排程, 這樣就可以讓他自動執行囉 ~~
設定每天早上 1:05 執行
5 1 * * * /usr/bin/mysqlcheck --all-databases --optimize --auto-repair > /dev/null 2>&1
那沒有提供 mysqlcheck 的 Mysql 版本可以用以下的 php 程式來 Run
<?php $dbh = mysql_connect('DB_SERVER_IP', 'DB_ROOT_ID', 'DB_ROOT_PASS'); $resource = mysql_query('SHOW DATABASES', $dbh); //echo 'Found ' . mysql_num_rows($resource) . " databases.</br>"; while ($db_t = mysql_fetch_assoc($resource)) { $db_name = $db_t['Database']; // echo "<font color="#FF0000">Database : $db_name</font></br>"; mysql_select_db($db_name, $dbh); $r = mysql_query('SHOW TABLE STATUS', $dbh); while ($t = mysql_fetch_assoc($r)) { // echo $t['Name']."<br>"; if ($t['Data_free'] > 0) { // echo $t['Name'] . " optimization.n"; mysql_query('OPTIMIZE TABLE ' . $t['Name'], $dbh) or die(mysql_error()); } } } ?>
把這個程式碼存成 optimize.php, 設定 Crontab 在早上 1:50 執行
50 1 * * * /usr/bin/php /var/www/html/kiss/optimize.php
這樣, DB 每天都是最佳化的資料表囉, 當資料小的時候沒感覺, 大的時候, 整體會快很多喔 ~~