I. При заполнении config.php в строке $config['Database']['technicalemail'] = '[email protected]'; нужно удалить образец е-мейла, [email protected], и вместо образца вписать свой реальный е-мейл.

II. Если задаёте вопрос про ошибку БД, обязательно приводите текст ошибки

Что такое "текст ошибки"? Это нЕ то сообщение "В базе данных произошла ошибка...", которое выводится пользователям. Это отчёт об ошибке, который приходит Вам на почту, на указанный в конфиге мыл.

III. Посмотрим на него подробно.

Пример, Вам на почту пришло вот такое:
PHP код:
Database error in vBulletin :

Invalid SQL:
SELECT varnamevaluedatatype FROM setting;

MySQL Error   MySQL server has gone away
Error Number  
2006
Request Date  
SaturdayJanuary 29th 2011 10:07:28 PM
Error Date    
SaturdayJanuary 29th 2011 10:07:33 PM
Script        
http://forum.example.com/attachment.php?attachmentid=67999&stc=1&thumb=1&d=1272640505
Referrer      http://forum.example.com/showthread.php?goto=newpost&t=294
IP Address    127.0.0.1
Username      
Юзер
Classname     
vB_Database
MySQL Version 

по пунктам, что сие значит
Invalid SQL: - во время обработки какого запроса произошла ошибка
MySQL Error: - по сути, самая главная часть. Какая именно ошибка произошла
Error Number: номер ошибки. Это не порядковый номер ошибки Вашего форума) Подробно об ошибках можно прочесть здесь: http://dev.mysql.com/doc/refman/5.0/...-handling.html В частности, Server Error Codes and Messages и Client Error Codes and Messages
Request Date:
Error Date: - дата запроса и дата ошибки
Script: - при выполнении какого конкретно скрипта произошла ошибка
Referrer: - реферрер

IV. Наиболее часто встречающиеся ошибки БД и как с ними бороться, практические рекомендации.

Ахтунг: на время выполнения реставрационных работ с таблицами закрывайте форум, не пополняйте ряды камикадзе!

= = = = = Ошибки БД при установке/обновлении форума = = = = =

если при установке форума Вам выводится сообщение
Цитата: Database error
The database has encountered а problem. Please try the following:
.....

нажмите ctrl+u на странице и прочтите, что за ошибка.
Скорее всего, там будет нечто такое:
PHP код:
mysql_connect() [<a href='function.mysql-connect'&gt;function.mysql-connect</a>]: Access denied for user '*****' (using passwordYES)
/
1/home/users/example/www/forum.example.com/includes/class_core.php on line 311

MySQL Error 

Error Number 
Access denied - Доступ запрещён.
Открывайте config.php и проверяйте, правильно ли Вы его заполнили

PHP код:
Invalid SQL:

CREATE TABLE Имя_Таблицы

MySQL Error 
Table 'Имя_Таблицы' already exists
Error Number 
1050 
Таблица "Имя_Таблицы" уже существует
Убедитесь, что Вы проводите установку форума в пустую базу

PHP код:
MySQL Error Illegal mix of collations (cp1251_bin,IMPLICIT) and (latin1_bin,IMPLICIT) for operation '='
Error Number 1267 
или, аналогичное:
PHP код:
MySQL Error Illegal mix of collations (utf8_general_ci,IMPLICIT) and (utf8_unicode_ci,IMPLICIT) for operation '='
Error Number 1267 
Illegal mix of collations: Недопустимое сочетание сопоставлений
идём в phpmyadmin - и смотрим на кодировки таблиц и полей таблиц
Все таблицы базы должны быть в одной кодировке
Все строковые поля таблиц должны быть в кодировке таблиц
Аналогичная ошибка, Illegal mix of collations, может возникать при поисковых запросах, если в БД бардак из кодировок.

= = = = = Ошибки/обвалы соединения, превышение нагрузки = = = = =

PHP код:
mysql_connect() [<a href='function.mysql-connect'>function.mysql-connect</a>]: Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)
/usr/hosting/1/www/example.com/forum/includes/class_core.php on line 311

MySQL Error   :
Error Number  : 
здесь в пункте MySQL Error: - пусто
В данной ошибке говорится, что нет соединения с базой данных. К хостеру.

PHP код:
mysql_connect() [<a href='function.mysql-connect'>function.mysql-connect</a>]: Too many connections
/home/example/data/www/example.com/includes/class_core.php on line 311

MySQL Error     
:
Error Number     
"Too many connections" - дословно "слишком много соединений"
возникает по разным причинам
- действительно много народу/ботов ломится на форум
- хостер не тянет, или у него стоят какие-то ограничения
Решение: смотреть логи доступа, может, действительно было столпотворение в этот момент... или дос/ддос (не обязательно Вашего форума, мб под огнём кто-то из расположенных на том же сервере)
посоветоваться с хостером, если он достаточно адекватный

PHP код:
mysql_connect(): User Имя_юзера_БД has already more than 'max_user_connections' active connections
/example/forum/includes/class_core.php on line 271

MySQL Error 
:
Error Number 
"Пользователь превысил максимальное количество соединений"
Настройки хостинга. Обычно переговоры с хостером тут не спасают, бежать надо...

PHP код:
Invalid SQL: [тут какой-то запрос]

MySQL Error   MySQL server has gone away 
В ошибке сказано, что MySQL server ушёл... за пивом...© не отвечает.
Варианты решения: смотреть на запрос и на время появления ошибки.
Если ошибки с таким текстом валятся пачками, систематически и примерно в одно и то же время суток, а запросы все разные, выяснить у хостера, чем занимается сервак в это время. Может, бекапится - это как раз чаще всего бывает - и тогда сам запрос значения не имеет, проблему решаем с хостером. (вариации на тему "соседний сайт лежит под ддосом" тоже решаем с хостером)
Если ошибку вызывает в разное время суток один и тот же запрос/скрипт - анализировать запрос/скрипт

PHP код:
Invalid SQL: [тут какой-то запрос]

MySQL Error Lost connection to MySQL server during query
Error Number 
2013 
Во время выполнения запроса соединение с MySQL server было потеряно
Ошибка очень близка к описанной выше, gone away
Анализировать запрос: может, там действительно такой паровоз запрашивается, что он физически не успевает выполниться или ему памяти не хватает

PHP код:
MySQL Error Can't find file: '.\путь=Имя_Таблицы.frm' (errno: 24)
Error Number : 1017 
Невозможно открыть файл
Причины могут быть разными
Как правило, такая шибка появляется периодически и, в общем, почти не мешает работе форума
файл (временно) недоступен
причины:
- превышение допустимой нагрузки на сервер
- "холодный" рестарт сервера
Обращайтесь к хостеру, шлите ему текст ошибки и пояснение, что она возникает именно периодически, пусть принимает меры... если сервер не рестартили, пусть смотрит логи по нагрузке
Подробно о такой ошибке - в этом посте http://vbsupport.org/forum/showpost....4&postcount=13 [?]

= = = = = Ошибки таблиц = = = = =

PHP код:
Invalid SQL: [тут какой-то запрос]

MySQL Error Table 'Имя_Таблицы' is marked as crashed and should be repaired 
В ошибке сказано, что таблица "Имя_Таблицы" помечена как "поломатая" и должна быть починена
Админка - Обслуживание - Восстановить/оптимизировать таблицы - отметить нужную таблицу и выполнить операцию. Обычно этого достаточно.
Если такая ошибка появляется иногда, редко, то можно особо не беспокоиться. "Редко" в моём понимании - раз в полгода/год
Если же такие ошибки сыпятся систематически - то есть, постоянно "ломаются" таблицы - нужно принимать меры. Причин может быть много, версия/настройки mysql, память на сервере, кривые скрипты. Помогает попинать хостера. Или сменить.

PHP код:
MySQL Error Can't open file: 'Имя_Таблицы.MYI' (errno: 145) 
по сути, ошибка 145 - это описанная выше "Table was marked as crashed and should be repaired"
однако невозможность открыть файл - это уже системная ошибка, и если стандартное "Восстановить/оптимизировать таблицы" не помогает, обращаемся к хостеру.

PHP код:
Invalid SQL: [тут запрос]

MySQL Error Table 'Имя_Таблицы' doesn't exist 
В ошибке сказано, что таблица "Имя_Таблицы" не существует
Варианты:
1. Отсутствует штатная таблица.
Как узнать, штатная это таблица или нет? - откройте файл mysql-schema.php из папки install и посмотрите.
Случай не такой уж экзотический, как кажется на первый взгляд. Лечение: Админка - Обслуживание - Восстановить/оптимизировать таблицы - посмотреть, указанная таблица выводится в списке? Как это ни парадоксально, но она может там выводиться и восстановить + оптимизировать через админку может помочь.
Нет в списке? - идём в ПМА - phpmyadmin - и смотрим... варианты повреждений могут быть очень разными, тут всё индивидуально. Если у таблицы повредилось имя - вправляем.
Если таблица отсутствует всего одна, и это не одна из жизненно необходимых таблиц, а что-то типо datastore, deletionlog, editlog, moderatorlog, strikes - привела реальные примеры того, с чем лично сталкивалась - создаём таблицу вручную. Как? - откройте всё тот же файл mysql-schema.php, найдите код создания нужной таблицы, скопируйте его и выполните SQL-запрос, можно через админку, можно через ПМА. В случае с datastore может оказаться недостаточно просто создать пустую таблицу, тогда следует воспользоваться tools.php из папки do_not_upload
Одновременно думаем о причине, по которой могла исчезнуть таблица: глюк? неосторожность? сбой на хостинге? Был случай, когда при попытке очистить таблицу strikes её просто удалили (и не заметили...))
Если таблиц вдруг отсутствует несколько - это очень серьёзный повод задуматься.
Если отсутствуют или насмерть изуродованы таблицы forum, post, thread, ... - то есть те, которые бессмысленно создавать пустыми - путь один, поднимать бэкап. И очень серьёзно подумать о безопасности и смене хостера.

2. Вы ещё помните, о какой ошибке речь?
Ошибка MySQL : Table 'Имя_Таблицы' doesn't exist
Вы посмотрели mysql-schema и не обнаружили там таблицы, которая doesn't exist.
Вывод: таблица создавалась и запрашивается каким-то хаком.
Вариант первый: Вы как раз сейчас ставите/обновляете какой-то хак, который должен был создать таблицу, и по какой-то причине не создал.
Лечение: уверены, что всё сделали по инструкции? Хак совместим с Вашей версией vB и mysql'а? Открыть сам хак и посмотреть код установки - там присутствует код создания таблицы? - если нет, то фтопку хак (хотя все мы периодически ошибаемся и что-то забываем...) Если Вам этот хак жизненно необходим, создавайте таблицу вручную или обращайтесь к разработчику.
Даже если справились сами, не поленитесь сообщить разработчику о проблеме, пусть пофиксит для будущих поколений.
Особо обратите внимание вот на что: бывает, что таблица создаётся хаком с учётом наличия префиксов таблиц, а запрашивается - без префикса, и наоборот.

Словарик:
CREATE TABLE - создать таблицу
ALTER TABLE - изменить (уже существующую) таблицу
DROP TABLE - удалить таблицу
REPAIR TABLE - "починить" таблицу
TRUNCATE TABLE - очистить таблицу

Вариант второй: Нет, Вы сейчас ничего не ставите. "Та были какие-то хаки, что-то когда-то я поудалял, хто ж теперь вспомнит..." Ай, как нехорошо) Вам - в эту тему: http://vbsupport.org/forum/showthread.php?t=32396

Вариант третий
NEW !!! Если сразу после установки хака получаем ошибку MySQL Error : Table 'Имя_Таблицы' doesn't exist
и в ошибке указана таблица от свежеустанавливаемого хака,
это может означать следующую комбинацию факторов:
в хаке проставлено подавление вывода ошибок БД;
+ у вас MySQL 5.1.7 и выше
+ в хаке в коде инсталляции прописан TYPE=MyISAM
этот синтаксис не поддерживается новыми версиями MySQL
ничего страшного
откройте хак (продукт)
найдите <installcode> - и далее код создания таблицы (или нескольких таблиц)
найдите текст TYPE=MyISAM (он в конце создания каждой таблицы) и замените слово TYPE на ENGINE
а ещё лучше, если Вы точно знаете, что у Вас MySQL 5.1.7 и выше, открыть продукт до установки и посмотреть

= = =
Совершенно аналогично, как Table doesn't exist, может отсутствовать столбец в таблице
PHP код:
MySQL Error Unknown column 'Имя' in 'field list' 
PHP код:
MySQL Error   Unknown column 'Имя' in 'where clause' 
рекомендации те же, что и для Table doesn't exist

= = =
Если при установке хака получаем ошибку
PHP код:
Invalid SQL:

CREATE TABLE Имя_Таблицы

MySQL Error 
Table 'Имя_Таблицы' already exists 
скорее всего, этот хак уже был однажды установлен и недо-удалён, Вам опять же в эту тему: http://vbsupport.org/forum/showthread.php?t=32396
вероятность того, что разные хаки создают таблицу с тем же именем, достаточно мала, но исключать её не стоит. Если Вы уверены, что ни Вы, ни Ваши со-админы никогда не ставили этот хак, займитесь поисками, откуда взялась таблица с таким именем.


NEW !!! Если при установке хака получаем ошибку:

PHP код:
MySQL Error You have an error in your SQL syntaxcheck the manual that corresponds to your MySQL server version for the right syntax to use near 'TYPE=MYISAM' at line ...
Error Number 1064 
это означает, что у Вас достаточно новый MySQL, а хак написан давно или "по старинке"
ничего страшного
откройте хак (продукт)
найдите <installcode> - и далее код создания таблицы (или нескольких таблиц)
найдите текст TYPE=MyISAM (он в конце создания каждой таблицы) и замените слово TYPE на ENGINE
а ещё лучше, если Вы точно знаете, что у Вас MySQL 5.1.7 и выше, открыть продукт до установки и посмотреть


NEW !!! Ошибка при установке vBadvanced CMPS
Если при установке вБА получаем всё ту же ошибку

PHP код:
MySQL Error You have an error in your SQL syntaxcheck the manual that corresponds to your MySQL server version for the right syntax to use near 'TYPE=MYISAM' at line ...
Error Number 1064 
открыть файл admincp/vbacmps_install.php

найти

PHP код:
$db->reporterror 1;

    
$enginevar 'ENGINE';
    if (
version_compare(MYSQL_VERSION'4.0.18''<'))
    {
        
$enginevar 'TYPE';
    }

    
// ##### Insert Tables 
и удалить или закомментировать строки

PHP код:
 if (version_compare(MYSQL_VERSION'4.0.18''<'))
    {
        
$enginevar 'TYPE';
    } 
====

PHP код:
Invalid SQLINSERT IGNORE INTO session [и какие-то данные]

MySQL Error Table 'session' is full 
В ошибке говорится о заполнении таблицы сессий
обычно при такой ошибке залогиниться нельзя, в админку зайти - тоже
Лечение: зайти в ПМА - phpmyadmin - и очистить таблицу session. Очистить, а не удалить!
После этого зайти в админку и проверить выполнение запланированных заданий. Таблица должна очищаться по крону. Для того, чтобы крон срабатывал, необходимо, чтобы в шаблоне (footer) присутствовала переменная $cronimage
Если переменной в шаблоне нет - возвращайте немедленно. Кроме того, внимательно прочтите этот пост http://vbsupport.org/forum/showpost....3&postcount=94 [?] и, пока не ушли далеко от ПМА, проверьте БД на наличие временных таблиц

= = = = = Прочие ошибки = = = = =

PHP код:
MySQL Error You have an error in your SQL syntaxcheck the manual that corresponds to your MySQL server version for the right syntax to use near [далее описаниечто именно использовано и где]
Error Number 1064 
Чаще всего возникает при использовании хаков. Не обязательно хак "плохой", не торопитесь ругать кодера.
Особенно тяжело ловить такие ошибки, если они порождены сочетанием хаков. Протестировать все возможные комбинации при отладке хака - физически нереально.
Лечение: смотреть и анализировать всё: сам запрос, скрипт, реферрер
Локализовать хак, который вызывает ошибку (выключить все хаки, убедиться, что ошибка пропала, включать хаки по одному)
Далее - по желанию/возможностям, лечить проблемный хак или удалить

NEW! Ошибка в многостраничной теме

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

PHP код:
Invalid SQL:

            
SELECT post.postidpost.visiblepost.userid
            FROM post 
AS post
            
            WHERE post
.threadid ИД_темы
                
AND post.visible IN (1
                
,2
                
,0
                
)
                
            
ORDER BY post.dateline;

MySQL Error   Got error 134 from storage engine
Error Number  
1030
...
Script        домен/showthread.php?t=ИД_темы 
и тут возможны варианты: тема открывается гостям, но даёт ошибку для юзеров
или открывается гостям и юзерам, но недоступна для модеров/админов - тут играет роль выборка и сортировка видимых постов, WHERE post.visible = 1
то не паникуйте, тема жива-здорова, но не может открыться: недостаточно места в директории для временных файлов
лечение: решить проблему с местом
возможно, недостаточно памяти для выполнения выборки постов - увеличить выделенную майсиквелу память
обращайтесь к хостеру или сисадмину сервера
как только тема станет доступна, немедленно закрыть её и открыть дубль-2

Источник : http://vbsupport.org/