Ошибка базы данных

Автор Perm, 16 ноября 2019, 01:53:33

« предыдущая - следующая »

0 Пользователей и 1 гость просматривают эту тему.

Perm

Здравствуйте.
Пользователь форума пишет о такой проблеме: "Я уже второй день не могу ни открыть тему, ни войти в уже существующие темы.
Пишет, что ошибка базы данных, обратитесь к администратору."
Ничего не менял. В чём может быть проблема?
Спасибо.

valdnieks

Вы делали в phpmyadmin восстановить таблицы?
Registered Linux user #325316
Последняя версия SMF: SMF 2.0.15
Версия GD: bundled (2.1.0 compatible)
Версия MySQL: 5.5.23
PHP: 5.6.30
Версия Web сервера: Apache/2.4.25 (Win64) PHP/5.6.30

Perm

В том-то и дело, что не делал ничего...

leon

Какая именно ошибка, он не сказал?

kak2z

Цитата: Perm от 16 ноября 2019, 12:24:05В том-то и дело, что не делал ничего...
сделайте) заходите в phpMyAdmin- выбираете все таблицы и нажимаете внизу "Восстановить"
Если нужно что то исправить, обновить, переставить, настроить, сделать форум заново - пишите в ЛС)

Snow_Irbis

Цитата: Perm от 16 ноября 2019, 12:24:05В том-то и дело, что не делал ничего...


В том-то и дело, что пока не сделать оно будет выдавать ошибку  :)

Perm

Спасибо всем за советы.
Но самое интересное, что я могу всё просматривать и оставлять сообщения.

Snow_Irbis

Цитата: Perm от 16 ноября 2019, 13:21:19Спасибо всем за советы.
Но самое интересное, что я могу всё просматривать и оставлять сообщения.


Это еще не значит что проблемы нет. Зайти в phpMyAdmin выдели все таблицы, выбери опцию восстановить таблицу 

Вам недоступны вложения в этом разделе.

Хотя в принципе можно зайти в Админка-Обслуживание-Обслуживание форума-Ремонт и там тыркнуть по тыркалке Найти и исправить любые ошибки (по моему она делает все тоже самое что описано выше)

Вам недоступны вложения в этом разделе.

valdnieks

Цитата: Snow_Irbis от 16 ноября 2019, 15:21:32Хотя в принципе можно зайти в Админка-Обслуживание-Обслуживание форума-Ремонт и там тыркнуть по тыркалке Найти и исправить любые ошибки (по моему она делает все тоже самое что описано выше)

Ещё лучше, нажав на кнопку база данных, сделать оптимизацию.
Registered Linux user #325316
Последняя версия SMF: SMF 2.0.15
Версия GD: bundled (2.1.0 compatible)
Версия MySQL: 5.5.23
PHP: 5.6.30
Версия Web сервера: Apache/2.4.25 (Win64) PHP/5.6.30

Perm

Цитата: Snow_Irbis от 16 ноября 2019, 15:21:32Хотя в принципе можно зайти в Админка-Обслуживание-Обслуживание форума-Ремонт и там тыркнуть по тыркалке Найти и исправить любые ошибки (по моему она делает все тоже самое что описано выше)
К сожалению, не помогло.

Snow_Irbis

Цитата: Perm от 16 ноября 2019, 23:30:03К сожалению, не помогло.


А восстановление таблиц делал?

Perm

Цитата: Snow_Irbis от 17 ноября 2019, 10:57:20А восстановление таблиц делал?
Делал. Не помогло.

Perm

И оптимизация тоже не помогла.

handself

можно вживую посмотреть?

Perm

Цитата: handself от 04 декабря 2019, 17:52:44можно вживую посмотреть?
Да, конечно. Попробуйте открыть любую тему (даже без регистрации). maths24.net

S.T.A.L.K.E.R.

Цитата: Perm от 16 ноября 2019, 13:21:19Спасибо всем за советы.
Но самое интересное, что я могу всё просматривать и оставлять сообщения.
Значит это какой то из модов,который ограничивает в чем то гостей и пользователей и который естественно на админа не действует.Или какая то фишка форума которая действует аналогично.
Мод или нет вычисляется легко,делаем бекап форума и по фтп льём чистый 2.0.15
Смотрим на результаты,и видно будет куда двигаться дальше.

Snow_Irbis

Цитата: Perm от 04 декабря 2019, 18:39:22Да, конечно. Попробуйте открыть любую тему (даже без регистрации). maths24.net
Ага, показывает ошибку, а в логах ошибок на форуме и на хостинге что показывает? И да, S.T.A.L.K.E.R. , дал дельный совет, вполне может быть какой то мод косячит.

Perm

Ошибка базы данных: 'mathsnet_1.smf_messages.id_member' isn't in GROUP BY
/home/***/public_html/Sources/Display.php
Вот что в логах на форуме.

S.T.A.L.K.E.R.

06 декабря 2019, 15:16:29 #18 Последнее редактирование: 06 декабря 2019, 15:36:26 от S.T.A.L.K.E.R.
Цитата: Perm от 06 декабря 2019, 12:02:43Ошибка базы данных: 'mathsnet_1.smf_messages.id_member' isn't in GROUP BY
/home/***/public_html/Sources/Display.php
Вот что в логах на форуме.
Уже ближе
Похоже что мод формул, нужно подробней смотреть. Нажимайте на карандаш рядом с ошибкой и весь код что покажет выкладывайте сюда.

Perm

Цитата: S.T.A.L.K.E.R. от 06 декабря 2019, 15:16:29Нажимайте на карандаш рядом с ошибкой и весь код что покажет выкладывайте сюда.
838:


$limit = $context['total_visible_posts'] <= $start + $limit ? $context['total_visible_posts'] - $start : $limit;839:


$start = $context['total_visible_posts'] <= $start + $limit ? 0 : $context['total_visible_posts'] - $start - $limit;840:


$firstIndex = $limit - 1;841:

}842:843:

// Get each post and poster in this topic.844:

$request = $smcFunc['db_query']('display_get_post_poster', '845:


SELECT id_msg, id_member, approved846:


FROM {db_prefix}messages847:


WHERE id_topic = {int:current_topic}' . (!$modSettings['postmod_active'] || allowedTo('approve_posts') ? '' : (!empty($modSettings['db_mysql_group_by_fix']) ? '' : '848:


GROUP BY id_msg') . '849:


HAVING (approved = {int:is_approved}' . ($user_info['is_guest'] ? '' : ' OR id_member = {int:current_member}') . ')') . '850:


ORDER BY id_msg ' . ($ascending ? '' : 'DESC') . ($context['messages_per_page'] == -1 ? '' : '851:


LIMIT ' . $start . ', ' . $limit),852:


array(853:



'current_member' => $user_info['id'],854:



'current_topic' => $topic,855:



'is_approved' => 1,856:



'blank_id_member' => 0,857:


)==>858:

);859:860:

$messages = array();861:

$all_posters = array();862:

while ($row = $smcFunc['db_fetch_assoc']($request))863:

{864:


if (!empty($row['id_member']))865:



$all_posters[$row['id_msg']] = $row['id_member'];866:


$messages[] = $row['id_msg'];867:

}868:

$smcFunc['db_free_result']($request);869:

$posters = array_unique($all_posters);870:871:

// Guests can't mark topics read or for notifications, just can't sorry.872:

if (!$user_info['is_guest'])873:

{874:


$mark_at_msg = max($messages);875:


if ($mark_at_msg >= $topicinfo['id_last_msg'])876:



$mark_at_msg = $modSettings['maxMsgID'];877:


if ($mark_at_msg >= $topicinfo['new_from'])878:


{

S.T.A.L.K.E.R.

А теперь в БД идите в таблицу smf_messages и там проверяйте есть ли поле id_member и все ли с ним нормально.

Perm

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

S.T.A.L.K.E.R.

Цитата: Perm от 12 декабря 2019, 20:31:58Большое спасибо! А как это посмотреть?
Через phpMyAdmin
Цитата: Perm от 12 декабря 2019, 20:31:58Самое интересное, что не помог даже откат к базе двухмесячной давности, когда такой проблемы не было.
И БД откатывали или только файлы?
Дайте ссылку на мод формул который стоит у Вас.
Там дело похоже что в самом запросе к БД
Хостер у себя ничего не обновлял?

handself

Попробуйте удалить ONLY_FULL_GROUP_BY из переменной mysql sql_mode

Perm

Здравствуйте. Кажется, нашёл причину: хостер обновил ПО на сервере, в том числе и MySQL. К прежней версии откатываться отказывается. Значит, проблема не решаема? Есть ли смысл обновиться до 2.1? Или это ничего не даст?

Delysid

Цитата: Perm от 20 декабря 2019, 23:17:18Здравствуйте. Кажется, нашёл причину: хостер обновил ПО на сервере, в том числе и MySQL. К прежней версии откатываться отказывается. Значит, проблема не решаема? Есть ли смысл обновиться до 2.1? Или это ничего не даст?
Попробуйте поставить самую низкую из доступных PHP версий.
Если хостер обновился - то по умолчанию у вас могла подставится высокая версия PHP.
Мой хостер тоже обновился и по умолчанию поставилась php 7.2. Благо там была PHP 7.1 и я её включил..
Если вы базу установите в новую версию SMF то если у вас формулы - очень большая вероятность что у вас все формулы слетят...

Perm

Цитата: handself от 13 декабря 2019, 20:36:29Попробуйте удалить ONLY_FULL_GROUP_BY из переменной mysql sql_mode
Спасибо. А как это сделать?

Perm

Выяснил: стоит php 5.6. Есть ещё вариант 7.3. MySQL - 10.2.30-MariaDB

naul

Цитата: undefinedЗначит, проблема не решаема?

Хостер обновил ПО и версия стала 5.6?  Странно как-то.
Сами версию измените,  напр. 7, в .htaccess, добавьте строку:
AddHandler application/x-httpd-php-7.0 .php

Perm

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

handself

Насколько я понял проблема с запросами в которых есть GROUP BY
Сменой версии PHP здесь не поможешь.
Попробуй в phpmyadmin удалить из sql_mode - ONLY_FULL_GROUP_BY

Perm

handself, спасибо. А как это сделать?

Delysid

Цитата: Perm от 21 декабря 2019, 13:36:02handself, спасибо. А как это сделать?
Вы это не сделаете на шаред хостинге если у вас нету прав администратора сервера.
Просто умер какой то мод, скорее всего нужно его удалить.
Информации о вашей ошибке мало и нету конкретно участка кода который вызывает ошибку.

Delysid

Можно попробовать
1: Изменить кодировку UTF-8 в качестве входной.
2: Попробовать в load.php
Код
 // Most database systems have not set UTF-8 as their default input charset.
Код
	if (!empty($db_character_set))
Код
		$smcFunc['db_query']('set_character_set', '
Код
			SET NAMES ' . $db_character_set,
Код
			array(
Код
			)
Код
		);

добавить ниже
Код
	$smcFunc['db_query']('', '
Код
		SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,\'ONLY_FULL_GROUP_BY\',\'\'))',
Код
		array(
Код
		)
Код
	);

handself

21 декабря 2019, 16:15:58 #34 Последнее редактирование: 22 декабря 2019, 12:46:29 от handself
Цитата: Delysid от 21 декабря 2019, 15:04:41Вы это не сделаете на шаред хостинге если у вас нету прав администратора сервера.

Это не совсем точно.
Если у вас просто php скрипт и вы используете mysqli то можно сбросить sql_mode вот так:
Код
$mysqli->query("SET SESSION sql_mode=''");

А если вы используете PDO - вот так (указать в опция для подключения):
Код
PDO::MYSQL_ATTR_INIT_COMMAND  =>  "SET sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));"

К стати, smf использует mysqli для работы с бд. Найдите где устанавливается переменная $mysql_set_mode в true и должно все получиться.
Кусок кода для smf 2.0.15 подтверждает
Код
// This makes it possible to have SMF automatically change the sql_mode and autocommit if needed.
if (isset($mysql_set_mode) && $mysql_set_mode === true)
$smcFunc['db_query']('', 'SET sql_mode = \'\', AUTOCOMMIT = 1',
array(),
false
);

Snow_Irbis

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

S.T.A.L.K.E.R.

22 декабря 2019, 09:48:40 #36 Последнее редактирование: 22 декабря 2019, 10:00:33 от S.T.A.L.K.E.R.
Цитата: Snow_Irbis от 22 декабря 2019, 01:40:03А что если по очереди удалять моды, и смотреть есть ли ошибка или нет? А потом, зная мод который вызывает ошибку уже смотреть что не так.
Можно не удалять по очереди.
Это мод формул.Я уже сказал про это,по логам видно.
Обновилась не версия РНР,обновилась версия MySQL.Я проходил такое у себя,сервер автоматом с панели обновился.