СТАНЬ VIP
Архиепископ Микаел Аджапахян ответил ПашинянуThe Washington Post сообщает, что европейские разведывательные службы получили документ, содержащий жёсткие переговорные требования РоссииПутин заявил, что главная цель — как можно быстрее нанести окончательное поражение противникуСамвел Карапетян возглавил новую партию Сильная АрменияВладимир Зеленский выступил с предложением о «перемирии в небе и на море», а также выразил сожаление по поводу инцидента, произошедшего во время его встречи с Дональдом ТрампомТрамп заявил, что ранее Зеленский, похоже, не стремился к миру в Украине, но теперь изменил свою позицию и согласился

Не названный блог

Оптимизация MySql датабаз и таблиц с помощью cron

Автоматическая оптимизация MySql датабаз и таблиц по заданному интервалу с помощью cron.

Зачастую приходится в консоль или в 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), можно увидеть ход выполнение и подробности.
На этом всё!)