Перейти к контенту

Исправление таблиц базы


Рекомендуемые сообщения

Ну яж не смогу поменять версию скюэл, это хост только может. А вооще реальные такие советики, даже страничку сохранила.
Ссылка на комментарий
Поделиться на других сайтах

  • Ответы 113
  • Создана
  • Последний ответ

Лучшие авторы в этой теме

Лучшие авторы в этой теме

  • 4 недели спустя...
Я чтото так и недопонял до конца, я ещё мелкий и маловато секу, кому нетрудно скажите как решается проблемма "mySQL error: Невозможно открыть файл: 'ibf_forums.MYI'. (ошибка: 145)", скажите что качать, что где прописывать итд, если вам не трудно конечно...
Ссылка на комментарий
Поделиться на других сайтах

Melkiy

Блин, ну почитай же тему вдумчиво, ё-моё

Добавлено в [mergetime]1086812523[/mergetime]

REPAIR TABLE ibf_forums прямо в пхпАдмин или админцентре, и смени версию МАЙСКЛ

Ссылка на комментарий
Поделиться на других сайтах

На счет версии, и правда, 4.0.15a у меня постоянна дробила индексы.

Только не из-за того, что ibr хреново в базу пишет, а то что mysql крайне

нестабильный был:

 

040303 16:35:38 mysqld started

040303 16:35:46 InnoDB: Started

mysqld got signal 11;

This could be because you hit a bug. It is also possible that this binary

or one of the libraries it was linked against is corrupt, improperly built,

or misconfigured. This error can also be caused by malfunctioning hardware.

We will try our best to scrape up some info that will hopefully help diagnose

the problem, but since we have already crashed, something is definitely wrong

and this may fail.

 

key_buffer_size=8388600

read_buffer_size=131072

max_used_connections=0

 

 

Хотя собран он отлично, система stable, все либы вылизаны.

Естессно когда он крэшится, про индексы можно забыть.

 

Хотя на 4.0.20 стали варнинги такие вылезать:

040609 16:17:12 Aborted connection 74203 to db: 'db' user: 'user' host: `localhost' (Got an error writing communication packets)

 

хотя сокетов более чем достаточно. надо дебаг вкомпилить, посмареть

Ссылка на комментарий
Поделиться на других сайтах

ter

у меня 4.0.16. База уже 150 мег. 100000 постов. 7000 пользователей. 8000 тем. ( стучит по дереву ) тьфу тьфу ... с тех пор как поставил ни одного рипэйра ...

Ссылка на комментарий
Поделиться на других сайтах

  • 2 месяца спустя...

А интересно закачал файл repair.php. Как ни пробовал через браузер ненаходит его.

Оптимизаци и починить средствами mysql пробовал всё ранво пишет

Can't open file: 'ibf_posts.MYI'. (errno: 144)

Что порекомендуете?

Ссылка на комментарий
Поделиться на других сайтах

  • 2 месяца спустя...

Исправление таблиц базы

Это на 2.0.x нормально работает?

И есть ли способ вручную вызвать ошибку для проверки? =)

Добавлено в [mergetime]1100169251[/mergetime]

Или лучше взять этот кусок из 1.3.1 Русского Модифицированного?

 

            if ($this->return_die == 1)
            {
                    $this->error    = mysql_error();
                    $this->error_no = mysql_errno();
                    $this->failed   = 1;
                    return;
            }

            $returned_error=mysql_error();
            $the_error .= "\n\nmySQL error: ".$returned_error."\n";
        if(preg_match("/Can't open file: '(.+)\.MYI'. \(errno: 145\)/si",$returned_error,$matches)) {
                $this->query("REPAIR TABLE ".$matches[1]);
                $the_error .= "\nОшибка автоматически исправлена. Обновите страницу в браузере\n\n";
        }
            $the_error .= "mySQL error code: ".$this->error_no."\n";
            $the_error .= "Date: ".date("l dS of F Y h:i:s A");

            $out = "<html><head><title>Invision Power Board Database Error</title>

Ссылка на комментарий
Поделиться на других сайтах

  • 2 недели спустя...

Вот добавил однако оповещение PM Администраторам...

Интересно - корректно ли ? :D Блок рассылки взял из Отправки массовых сообщений группам.

Собственно, меня интересует - верно ли использованы функции, ибо ни разу еще не делал так...

=============================

 

// Repair tables if indexes are broken - BEGIN

if ( mysql_errno() == 1016 )

{

$QueryID = mysql_query("SHOW TABLES", $this->connection_id)

or die("SQL Error! Can't handle the HANDLER for Tables! Please contact administrator");

$SQLRow = array();

$TableList = array();

while ( ! ( ( $SQLRow = mysql_fetch_row($QueryID) ) === false ) ) {

$TableList[] = $SQLRow[0];

}

$listing = "";

foreach($TableList as $TableName) {

mysql_query("REPAIR TABLE $TableName", $this->connection_id)

or die("SQL Error! Please contact administrator");

$listing .= $TableName ." - Repaired. \r\n";

}

// Сюда вставляем сообщение Администраторам что произошел авторемонт.

//+---------------------------------------

// Sending the mail

//+---------------------------------------

$contents = $std->txt_stripslashes("Произошел автоматический ремонт таблицы <br>".$listing);

 

@set_time_limit(1200);

 

require "./sources/lib/emailer.php";

 

$this->email = new emailer();

 

$masspm_query = $DB->query("SELECT id, name, view_pop FROM ibf_members WHERE mgroup=4);

 

while ($masspm=$DB->fetch_row($masspm_query))

{

 

$db_string = $DB->compile_db_insert_string( array (

'member_id' => $masspm[id],

'msg_date' => time(),

'read_state' => $track_id,

'title' => $std->txt_stripslashes("Робот - починяльщик сообщает"),

'message' => str_replace( "\r\n", "\n", $contents),

'from_id' => $MEMBER['id'],

'vid' => 'in',

'recipient_id' => $masspm[id],

 

) );

 

 

$DB->query("INSERT INTO ibf_messages (".$db_string['FIELD_NAMES'].") VALUES (".$db_string['FIELD_VALUES'].")");

$new_id = $DB->get_insert_id();

unset($db_string);

 

//-----------------------------------------------------

 

$DB->query("UPDATE ibf_members SET ".

"msg_total = msg_total + 1, " .

"new_msg = new_msg + 1, " .

"msg_from_id='" . $MEMBER['id'] . "', ".

"msg_msg_id='" . $new_id . "', ".

"show_popup='" . $masspm['view_pop'] . "' ".

"WHERE id='" . $masspm['id'] . "'");

}

 

if (!headers_sent()) {

header("Location: ".$_SERVER['REQUEST_URI']);

} else {

die("Error! Please reload page...");

}

}

// Repair tables if indexes are broken - END

Ссылка на комментарий
Поделиться на других сайтах

Ну так то оно так...

Но правильнее было бы:

а) $DB-> на $this-> потому как в одном классе работаем.

б)

$listing .= $TableName ." - Repaired. \r\n";

зачем делать \r\n если потом

'message' => str_replace( "\r\n", "\n", $contents)

Тогда уж сразу

$listing .= $TableName ." - Repaired. \n";

в)

$contents = $std->txt_stripslashes("Произошел автоматический ремонт таблицы <br>".$listing);

имеет ли смысл тут слеши убирать, я не знаю. Поидее им там взяться неоткуда.

$contents = "Произошел автоматический ремонт таблицы <br>".$listing;

было бы логичнее в таком случае.

г)

require "./sources/lib/emailer.php";

$this->email = new emailer();

вообще не понял для чего используется класс отправки email. Убрать.

д)

'title' => $std->txt_stripslashes("Робот - починяльщик сообщает"),

по аналогии с п. в)

е) ну и переменная $MEMBER['id'], вообще не ясно откуда берется. Если только зарегистрировать отдельного пользователя - робота, и жестко прописать его id в $MEMBER['id'], то тогда смысл появляется.

Ссылка на комментарий
Поделиться на других сайтах

Кстати я тоже занимался программированием запросов внутри самого же модуля DB, так вот чего я понял, что $this->query() и $this->fetch_row() не катят :D

Пришлось делать через АПИ, mysql_query and etc..

Ссылка на комментарий
Поделиться на других сайтах

Пару советов
Так по доброте душевной.
Написали мы тут кодик полезный , так как у вас инвижн боард то он как раз и для вас подойдет.

Иногда базы рушаться от одновременных запросов, вы наверняка с этим сталкивались.
Так как у нас клиентов на хостинге много, у всех возникают вопросы к хостерам, что мол с моей базой ? а ну чините, а мы то тут и не причем. Так вот надоело это всё , вообщем смотрите.

Данная ошибка связана с недоработками в скриптах Invision Board, не
выполняющего блокировку таблиц при выполнении нескольких пследовательных
операций записи в базу данных. В связи с этим, при одновременном постинге
двоих или более пользователей форума происходит нарушение целостности
индексных файлов MySQL.

Для исправления данной ошибки, необходимо выполнить переиндексацию таблиц.
Для этого в Invision Board предусмотрена специальная функция в панели
администратора (http://www.softboard.ru/admin.php) - SQL Management -> mySQL
Toolbox -> Repair selected tables.

Для автоматизации данного процесса, можно изменить скрипты Invision Board,
чтобы они автоматически выполняли переиндексацию при ошибке mySQL # 1016 -
такой обработчик можно поместить в файл www/sources/Drivers/mySQL.php, в
метод fatal_error() класса db_driver:

После строк

if ($this->return_die == 1)
{
$this->error = mysql_error();
return TRUE;
}

поместить следующий код:

// Repair tables if indexes are broken - BEGIN
if ( mysql_errno() == 1016 )
{
$QueryID = mysql_query("SHOW TABLES", $this->connection_id)
or die("SQL Error! Please contact administrator");
$SQLRow = array();
$TableList = array();
while ( ! ( ( $SQLRow = mysql_fetch_row($QueryID) ) === false ) ) {
$TableList[] = $SQLRow[0];
}
foreach($TableList as $TableName) {
mysql_query("REPAIR TABLE $TableName", $this->connection_id)
or die("SQL Error! Please contact administrator");
}
if (!headers_sent()) {
header("Location: ".$_SERVER['REQUEST_URI']);
} else {
die("Error! Please reload page...");
}
}
// Repair tables if indexes are broken - END

Как насчет IPB v2? Какой файл нужно отредактировать?

Ссылка на комментарий
Поделиться на других сайтах

Вот, полночи угробил на эту модификацию... не фурычит ;)

Итак, что делал. В указанное выше место вставлял как и полагалось:

 

// Сюда вставляем сообщение Администраторам что произошел авторемонт.
//+---------------------------------------
// Sending the mail
//+---------------------------------------
$contents = "Произошел автоматический ремонт таблицы <br>".$listing;
$tit = "Робот - починяльщик сообщает";
$me = 4; \\ 4 - это id, от имени которого производится рассылка

@set_time_limit(1200);
$masspm_query = $DB->query("SELECT id, name, view_pop FROM ibf_members WHERE mgroup='4'); \\ mgroup=4 - это группа администраторов.
while ($masspm=$DB->fetch_row($masspm_query))
{

$db_string = $DB->compile_db_insert_string( array (
'member_id' => $masspm[id],
'msg_date' => time(),
'read_state' => '0',
'title' => $tit,
'message' => $contents,
'from_id' => $me,
'vid' => 'in',
'recipient_id' => $masspm[id],

) );
$DB->query("INSERT INTO ibf_messages (".$db_string['FIELD_NAMES'].") VALUES (".$db_string['FIELD_VALUES'].")");     \\   < ==== (*) Ошибку сюда выдает
$new_id = $DB->get_insert_id();
unset($db_string);

//-----------------------------------------------------

$DB->query("UPDATE ibf_members SET ".
"msg_total = msg_total + 1, " .
"new_msg = new_msg + 1, " .
"msg_from_id='" . $MEMBER['id'] . "', ".
"msg_msg_id='" . $new_id . "', ".
"show_popup='" . $masspm['view_pop'] . "' ".
"WHERE id='" . $masspm['id'] . "'");
}

 

Итак, в этом варианте мне выдает напротив (*) ошибку T_STRING

Убей бог, не могу понять где тут могут быть разные типы данных...

При этом - остается непонятным, почему 'member_id' => $masspm[id], и 'recipient_id' => $masspm[id], идут без кавычек в индексе, типа $masspm['id']. Если ставлю кавычки то выдается БОЛЬШАЯ ДЛИННАЯ ОШИБКА про какое то замещение и пробелы в переменных :D

Изменение класса $DB на $this ничего не меняет (ну и вроде как не должно раз ошибка на этом этапе возникает)...

 

Короче - запуталася я, есть возможность объяснить проще ?

Поясняю, этот кусок кода я взял из Модификации MASS_PM, и в полностью данном виде код работает в нужном месте...

Чего ему надо тут ?????

Ссылка на комментарий
Поделиться на других сайтах

При клике на профиль пользователя появляется такое сообщение об ошибке

mySQL query error: SELECT p.pid, p.post, t.tid, t.title, f.name, f.id
            FROM ibf_posts AS p LEFT JOIN ibf_topics AS t ON (p.topic_id=t.tid) LEFT JOIN ibf_forums AS f ON(t.forum_id=f.id)
            WHERE author_id=3 AND f.id IN (1,2,3)
            ORDER BY p.post_date DESC LIMIT 0, 

mySQL error: You have an error in your SQL syntax near '' at line 4
mySQL error code: 
Date: Friday 10th of December 2004 05:09:32 PM

 

Модификация форума: IPB v1.3 Final © 2003 BesTFileZ.Net & IBR Team :D

Через phpMyAdmin исправлял все таблицы, анализ таблиц показывает ОК.

В PHP и MySQL не силён. ;)

 

Кто может подсказать в чём проблема?

Ссылка на комментарий
Поделиться на других сайтах

Кто может подсказать в чём проблема?

Ошибка синтаксиса. Открой файл, и проверь правильность этого запроса. Скорее всего, где-то очепятка... :D

Ссылка на комментарий
Поделиться на других сайтах

Hamburg

так ты неправильно сделал.

Он теперь у тебя берёт $INFO[latest_amount] первых постов

Ссылка на комментарий
Поделиться на других сайтах

Хм...

if(!isset($INFO[latest_amount]))
$INFO[latest_amount] = 3;

$DB->query("SELECT p.pid, p.post, t.tid, t.title, f.name, f.id
            FROM ibf_posts AS p LEFT JOIN ibf_topics AS t ON (p.topic_id=t.tid) LEFT JOIN ibf_forums AS f ON(t.forum_id=f.id)
            WHERE author_id=".$member['id']." AND f.id IN ($forums)
            ORDER BY p.post_date DESC LIMIT 0,".$INFO[latest_amount]);

Это исходный код, именно с этой запятой (по крайней мере таким я его скачал на bestfilez.net)

После долгих поисков и изучения ткаих запросов я решил поэкспериментировать... и убрав запятую стало открыватся окно с пользовательской инфо...

выше я писал, что PHP и MySQL пока для меня :D (опыт программирования был в начале 90х)

Ссылка на комментарий
Поделиться на других сайтах

  • 1 месяц спустя...

После использования скриптика repair.php работа форума восстановилась, только в Админ-панель не заити теперь, точнее на саму страницу admin.php, пишет:

 

mySQL query error: DELETE FROM ibf_admin_sessions WHERE RUNNING_TIME < 1105906731

 

mySQL error: Incorrect key file for table: 'ibf_admin_sessions'. Try to repair it

mySQL error code:

Date: Sunday 16th of January 2005 10:18:51 PM

 

В чем может быть дело?, помогите пожалуйста.

Версия форума 1.3 русский модифицированный.

 

Вот результат работы скрипта относительно таблицы ibf_admin_sessions:

Проверка таблицы ibf_admin_sessions

Таблица Действие Тип Сообщение

forum_ichip.ibf_admin_sessions check warning Table is marked as crashed

forum_ichip.ibf_admin_sessions check warning Found 120 deleted space. Should be 0

forum_ichip.ibf_admin_sessions check warning Found 1 deleted blocks Should be: 0

forum_ichip.ibf_admin_sessions check warning Found 2 parts Should be: 1 parts

forum_ichip.ibf_admin_sessions check status OK

Оптимизация таблицы ibf_admin_sessions

forum_ichip.ibf_admin_sessions optimize status Table is already up to date

Заранее очень благодарен.

Ссылка на комментарий
Поделиться на других сайтах

Присоединиться к обсуждению

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

Гость
Ответить в этой теме...

×   Вы вставили отформатированный текст.   Удалить форматирование

  Допустимо не более 75 смайлов.

×   Ваша ссылка была автоматически заменена на медиа-контент.   Отображать как ссылку

×   Ваши публикации восстановлены.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

Зарузка...

×
×
  • Создать...

Важная информация

Находясь на нашем сайте, вы соглашаетесь на использование файлов cookie, а также с нашим положением о конфиденциальности Политика конфиденциальности и пользовательским соглашением Условия использования.