Зачастую приходится в консоль или в phpmyadmin, чтобы оптимизировать таблицы.
Ниже представлю php скрипт для выполнения этой задачи автоматически.
Создаём файл myoptim.php:
- Код: Выделить всё · Развернуть
<?php echo '<pre>' . "\n\n"; set_time_limit( 100 ); // $time = microtime(); $time = explode(' ', $time); $time = $time[1] + $time[0]; $start = $time; // //Connection variables : $h = 'куда коннектимся, хост'; $u = 'пользователь баз данных'; $p = 'пароль от датабазы'; // $dummy_db = 'Указывать любое название базы от юзера'; // // $db_link = mysql_connect($h,$u,$p); // $res = mysql_db_query($dummy_db, 'SHOW DATABASES', $db_link) or die('Could not connect: ' . mysql_error()); echo 'Found '. mysql_num_rows( $res ) . ' databases' . "\n"; $dbs = array(); while ( $rec = mysql_fetch_array($res) ) { $dbs [] = $rec [0]; } // foreach ( $dbs as $db_name ) { echo "Database : $db_name \n\n"; $res = mysql_db_query($dummy_db, "SHOW TABLE STATUS FROM `" . $db_name . "`", $db_link) or die('Query : ' . mysql_error()); $to_optimize = array(); while ( $rec = mysql_fetch_array($res) ) { if ( $rec['Data_free'] > 0 ) { $to_optimize [] = $rec['Name']; echo $rec['Name'] . ' needs optimization' . "\n"; } } if ( count ( $to_optimize ) > 0 ) { foreach ( $to_optimize as $tbl ) { mysql_db_query($db_name, "OPTIMIZE TABLE `" . $tbl ."`", $db_link ); } } } // $time = microtime(); $time = explode(' ', $time); $time = $time[1] + $time[0]; $finish = $time; $total_time = round(($finish - $start), 6); echo 'Parsed in ' . $total_time . ' secs' . "\n\n"; ?>
Редактируете данные на свои
- $h = 'куда коннектимся, хост';
$u = 'пользователь баз данных';
$p = 'пароль от датабазы';
$dummy_db = 'Указывать любое название базы от юзера';
Записываем задачу в крон, пример команды подразумевает выполнение каждые 3 часа, меняйте как вам удобнее:
* */03 * * * cd /пусть до вашего скрипта/ && /usr/bin/php ./myoptim.php
Кстати, если выполнить команду cd /пусть до вашего скрипта/ && /usr/bin/php ./myoptim.php в консоли (ssh), можно увидеть ход выполнение и подробности.
На этом всё!)