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

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


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

Значицца нашел таблицу, нашел проблему, но как ее решить особо пока не представляю.

 

 Время: Thu, 07 Jun 2007 14:37:54 +0400
Код ошибки: 1054
Сообщение сервера: Unknown column 'field_2' in 'field list'
IP Адрес клиента: ......
Запрос: UPDATE ibf_pfields_content SET field_1='.......',field_2='' WHERE member_id=264

 

Репэйр таблиц не помог. Попытался удалить второе доп. поле - разумеется та же самая ошибка...

Что с этим можно сделать?

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

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

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

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

Люди добрые помогите пож-та решить данную проблему:

при нажатии на "Изменить личные данные" в "Личных данных" выскакивает следующее:

 

mySQL query error: UPDATE ibf_users SET land='' WHERE user_id=1

SQL error: Table 'wwwschXXXXru_XXXX.ibf_users' doesn't exist
SQL error code: 
Date: 11.6.2007, 22:33

 

при нажатии на "Изменить подпись" следующее:

 

mySQL query error: UPDATE ibf_users SET signature='' WHERE user_id=1

SQL error: Table 'wwwschXXXXru_XXXX.ibf_users' doesn't exist
SQL error code: 
Date: 11.6.2007, 22:35

 

как это исправить :D

 

Всем отбой Дело было в интеграции с DLE 5.5...

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

  • 1 месяц спустя...
  • 4 недели спустя...
malaya

Знаю решение етой проблемьі. у самого недавно такая случалась, столько с таблицой ib_forums

Решении простое.

вьіполнить запрос:

REPAIR TABLE ibf_posts

РЕСПЕКТ!!!!!!!!!!!!!!!!!!!!!Заместо ibf_пост поставил своё!Всё ок!

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

А что вот это значит?

 

mySQL query error: SELECT * FROM ibf_posts WHERE pid=

SQL error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1
SQL error code: 
Date: 22.8.2007, 12:21

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

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

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

Вариант номер один:

		// 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

Вариант номер два (кусок из кода вынут кое как, по быстрому):

		$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>
		   <style>P,BODY{ font-family:arial,sans-serif; font-size:11px; }</style></head><body>
		    <br><br><blockquote><b>There appears to be an error with the {$INFO['board_name']} database.</b><br>
		   You can try to refresh the page by clicking <a href=\"java script:window.location=window.location;\">here</a>, if this
		   does not fix the error, you can contact the board administrator by clicking <a href='mailto:{$INFO['email_in']}?subject=SQL+Error'>here</a>
		   <br><br><b>Error Returned</b><br>
		   <form name='mysql'><textarea rows=\"15\" cols=\"60\">".htmlspecialchars($the_error)."</textarea></form><br>We apologise for any inconvenience</blockquote></body></html>";


	echo($out);
	die("");
}

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

// 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. \n";
}
// Сюда вставляем сообщение Администраторам что произошел авторемонт.
//+---------------------------------------
// Sending the mail
//+---------------------------------------
$contents = "Произошел автоматический ремонт таблицы <br>".$listing;

@set_time_limit(1200);

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

while ($masspm=$this->fetch_row($masspm_query))
{

$db_string = $this->compile_db_insert_string( array (
'member_id' => $masspm[id],
'msg_date' => time(),
'read_state' => $track_id,
'title' => "Робот - починяльщик сообщает",
'message' => str_replace( "\r\n", "\n", $contents),
'from_id' => $MEMBER['id'],
'vid' => 'in',
'recipient_id' => $masspm[id],

) );


$this->query("INSERT INTO ibf_messages (".$db_string['FIELD_NAMES'].") VALUES (".$db_string['FIELD_VALUES'].")");
$new_id = $this->get_insert_id();
unset($db_string);

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

$this->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

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

Если таблица не починилась, то админ может не прочитать это ПМ. К тому же в таком случае уведомление на мыло не вышлется. Лучше заменить этот кусок на отправку мыла :D
Ссылка на комментарий
Поделиться на других сайтах

Меня вообще то бальше интеросует первый вопрос. :D

ИМХО, все варианты автозапуска рипейров таблиц фтопку.

http://www.ibresource.ru/forums/index.php?...&pid=296258

Если не дай бог будет такая проблема, рискуешь рипейрами не только индексы побить, но и сами таблицы потерять.

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

FatCat, у меня не стоит автоматический бекап, я его вручную делаю, так надёжнее. :D И вот возникает вопрос, если нету автоматического бекапа то остаётся ли актуальным удаление автоматического repair?
Ссылка на комментарий
Поделиться на других сайтах

FatCat, у меня не стоит автоматический бекап, я его вручную делаю, так надёжнее. :D И вот возникает вопрос, если нету автоматического бекапа то остаётся ли актуальным удаление автоматического repair?

Я не большой знаток устройства и функционирования SQL-сервера.

 

ИМХО, рипейр хорош, если посыпались индексы.

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

 

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

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

FatCat, там в коде выше проверяется error код, так что не при каждой ошибки будет делаться repair.
Ссылка на комментарий
Поделиться на других сайтах

  • 7 месяцев спустя...

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

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

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

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

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

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

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

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

Зарузка...

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

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

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