будет реализовано Переписать админку

Protektor

Пользователь

<?php

$aDB = array('db_name_1', 'db_name_2', 'db_name_3'); // Массив имен баз данных.

function Connect() { // Функция подключения к MySQL.
$link = mysql_connect('localhost', 'root', 'pass') or die('mysql_connect');
return $link;
}

$link = Connect();

foreach ($aDB as $db_name) {
$data = array();
$sql = 'SHOW TABLE STATUS FROM `' . $db_name . '` WHERE `Data_free` > 0';
$result = mysql_query($sql);
if (mysql_num_rows($result) > 0) {
while ($row = mysql_fetch_assoc($result)) {
$data[] = '`' . $db_name . '`.`' . $row['Name'] . '`';
}
mysql_free_result($result);
} else continue;

$sql = 'OPTIMIZE TABLE ' . implode(',', $data);
mysql_query($sql);
}

?>
крон задача
/usr/bin/php -f /home/admin/web/ваш.сайт/public_html/optimize_table.php >/dev/null 2>&1
И можно забыть про оптимизацию таблиц
 

Kryl

Пользователь
Protektor
Может вот так проще , без лишних подключений , только крон задачу в админке создать да и файл закинуть в папку jobs.
PHP:
<?php

if (!defined('BB_ROOT')) die(basename(__FILE__));

foreach ($aDB as $db_name) {
$data = array();
$sql = 'SHOW TABLE STATUS FROM `' . $db_name . '` WHERE `Data_free` > 0';
$result = mysql_query($sql);
if (mysql_num_rows($result) > 0) {
while ($row = mysql_fetch_assoc($result)) {
$data[] = '`' . $db_name . '`.`' . $row['Name'] . '`';
}
mysql_free_result($result);
} else continue;

$sql = 'OPTIMIZE TABLE ' . implode(',', $data);
mysql_query($sql);
}

?>
 

Dr_Brown

Пользователь
А можно как то разделить таблицы, bb_post_html и bb_post_text от всех остальных ?
Так как они весят больше всего, и на слабых VDS подвешивают мускл.
 

Dr_Brown

Пользователь
задача выполняется, но в логах такая ошибко:

[14-Dec-2016 09:29:17 Europe/Moscow] PHP Warning: mysql_fetch_assoc(): 32 is not a valid MySQL result resource in /var/www/....../data/www/......./includes/db/mysql.php on line 252
 

Kryl

Пользователь
Dr_Brown
вот это
PHP:
$db_name = название базы
поменять на это
PHP:
$aDB = array('имя базы'); // Массив имен баз данных.

нотис в логах все равно есть ..
 

Kryl

Пользователь
вот это ковнокод изначально не рабочий
PHP:
<?php

$aDB = array('db_name_1', 'db_name_2', 'db_name_3'); // Массив имен баз данных.

function Connect() { // Функция подключения к MySQL.
$link = mysql_connect('localhost', 'root', 'pass') or die('mysql_connect');
return $link;
}

$link = Connect();

foreach ($aDB as $db_name) {
$data = array();
$sql = 'SHOW TABLE STATUS FROM `' . $db_name . '` WHERE `Data_free` > 0';
$result = mysql_query($sql);
if (mysql_num_rows($result) > 0) {
while ($row = mysql_fetch_assoc($result)) {
$data[] = '`' . $db_name . '`.`' . $row['Name'] . '`';
}
mysql_free_result($result);
} else continue;

$sql = 'OPTIMIZE TABLE ' . implode(',', $data);
mysql_query($sql);
}

?>

Protektor скопировал откуда то , и сюда скинул , даже без проверки .
 

Kryl

Пользователь
Вот может заработает )

PHP:
<?php

if (!defined('BB_ROOT')) die(basename(__FILE__));



$alltables = mysql_query("SHOW TABLES");

while ($table = mysql_fetch_assoc($alltables))
{
   foreach ($table as $db => $tablename)
   {
       mysql_query("OPTIMIZE TABLE '".$tablename."'")
       or die(mysql_error());

   }
}

?>
 

Dr_Brown

Пользователь
Я конечно не силен в mysql но похоже что mysql_fetch_assoc и mysql_free_result используют разные расширения php mysql.so и mysqli.so, из за это конфликт. Взоможно что-то с ассоциативным массивом не то, имею в виду выборку из базы.
 

tpuser

Пользователь
Только за использование mysql_* функций в 2016 году можно сразу руки отрубать, они уже в php5 давно как deprecated, в php7 их вообще выпилили. Если уж пишите говнокод, то пишите с mysqli_*. А вообще нужно уходить от убогого MyISAM к няшному InnoDB, это просто несерьезно.
 
Сверху