Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   Ломание таблиц в РНР (http://forum.oszone.net/showthread.php?t=161642)

Andji 27-12-2009 15:05 1305476

Ломание таблиц в РНР
 
Всем добрый.....

Форум РНРВВ, база MySQL, тип MyISAM.
5 месяцев все было нормально, потом начали ломаться таблицы (определение хостера), вплоть до полного отключения форума. Через РМА все восстановил, но теперь приходится несколько раз в день проводить оптимизацию, т.к. из-за дефрагментации перестают работать некоторые важные функции форума.
Вопросы:
как избежать постоянных дефрагментаций (из-за чего они происходят)?
может ли эта проблема быть по вине хостера?

Sham 28-12-2009 14:35 1306181

попробуйте repair table - для начала только индексы...
Код:

REPAIR TABLE `table` QUICK

Surround 28-01-2010 10:15 1332093

вот у меня тоже стала наблюдаться регулярно эта проблема ломания таблиц. Как можно профилактику провести?

skyfish 28-01-2010 13:59 1332338

Surround, простого рецепта, помимо указанного Sham, нет. Я могу лишь добавить несколько пояснений:

Фрагментация:

Любая MyISAM база со временем фрагментируется. Это особенности её архитектуры и её ахиллесова пята — даже единичный row может быть размазан по десятку мест. За MyISAM, увы, пока нужно просто следить как за ребёнком-аутистом.


Коррупция:

1. Не является обязательно прямым следствием фрагментации.
2. В подавляющем большинстве случаев ломаются только индексы, что упрощает процедуру восстановления.
3. Из неестественных причин коррупции — главным можно назвать убийство/рестарт демона во время записи (напрямую или вследствие некорректного рестарта системы). Поищите в логе ошибок restarted mysqld, может ваш хостер перезагружается как неандерталец.
4. Реже причиной является модификация таблицы внешней программой (скажем, myisamchk) во время модификации её демоном.
5. Ещё реже причиной являются железные проблемы — память и диск.
6. Довольно редко — сочетание кривого кода и старой, с коррумпирующими багами, версии MySQL.
7. Крайне редко — просто безумный код.

Это основные моменты и факторы, на которые следует обратить внимание в профилактическом смысле. Оперативное лечение — по рецепту Sham выше.

Surround 28-01-2010 16:08 1332494

ну оперативное решение - это понятно. Просто неприятно, что оно возникает и возникает регулярно.
Началось на форуме на vBulletin. На сервере есть еще БД, на них такого не наблюдалось ниразу...

Andji 30-01-2010 03:02 1334016

А можно ли установить скрипт у хостера, который автоматически проводит оптимизацию через определенный промежуток времени? Если да, то есть ли готовые решения?

Surround 30-01-2010 17:06 1334361

можно. и запускать по cron (многие хостеры предоставляют такую фишку)
например, код такой:
PHP код:

<?php
$db_host 
'127.0.0.1'
$db_user 'mysql'
$db_pass 'mysql_password';
$db_name 'myBase'
    
set_time_limit(0);

mysql_connect($db_host$db_user$db_pass) or die(mysql_error() . "\n\n");
mysql_select_db($db_name) or die(mysql_error() . "\n\n");

$r mysql_query("SHOW TABLES");

$q "LOCK TABLES";

while(
$row mysql_fetch_row($r))
{
  
$table[] = $row[0];
  
$q .= " " $row[0]." WRITE,";
}
$q substr($q,0,strlen($q)-1);
mysql_query($q);

foreach(
$table as $value)
{
  
$q "OPTIMIZE TABLE ".$value;
  print 
$qflush();
  
mysql_query($q) or die("QUERY: \"$q\" " mysql_error() . "\n\n");
}
mysql_query("UNLOCK TABLES");
?>



Время: 21:45.

Время: 21:45.
© OSzone.net 2001-