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

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


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

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

 

 Время: 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 месяцев спустя...

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

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

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

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

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

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

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

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

Зарузка...

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

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

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