Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » MySQL - Ломание таблиц в РНР

Ответить
Настройки темы
MySQL - Ломание таблиц в РНР

Аватара для Andji

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


Сообщения: 60
Благодарности: 0

Профиль | Отправить PM | Цитировать


Всем добрый.....

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

Отправлено: 15:05, 27-12-2009

 

Deadooshka


Сообщения: 2512
Благодарности: 690

Профиль | Отправить PM | Цитировать


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

Отправлено: 14:35, 28-12-2009 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для Surround

Ветеран


Сообщения: 908
Благодарности: 20

Профиль | Отправить PM | Цитировать


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

Отправлено: 10:15, 28-01-2010 | #3


Аватара для skyfish

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


Сообщения: 69
Благодарности: 23

Профиль | Отправить PM | Цитировать


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

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

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


Коррупция:

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

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

Отправлено: 13:59, 28-01-2010 | #4


Аватара для Surround

Ветеран


Сообщения: 908
Благодарности: 20

Профиль | Отправить PM | Цитировать


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

Отправлено: 16:08, 28-01-2010 | #5


Аватара для Andji

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


Сообщения: 60
Благодарности: 0

Профиль | Отправить PM | Цитировать


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

Отправлено: 03:02, 30-01-2010 | #6


Аватара для Surround

Ветеран


Сообщения: 908
Благодарности: 20

Профиль | Отправить PM | Цитировать


можно. и запускать по 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");
?>


Отправлено: 17:06, 30-01-2010 | #7



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » MySQL - Ломание таблиц в РНР

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
MSFT SQL Server - объединение таблиц по верт talich2006 Программирование и базы данных 2 17-10-2007 17:01
Импортирование таблиц ][alter Вебмастеру 1 29-09-2007 22:11
Сравнение таблиц в Excel'e xkspy Хочу все знать 1 04-01-2007 10:42
Расположение таблиц Qwe1 Вебмастеру 4 19-06-2005 02:13
Меню с помощью таблиц Lada Вебмастеру 4 17-12-2004 12:17




 
Переход