Ошибка в клиенте Commands out of sync
Если получена ошибка Commands out of sync; you can't run this command now в клиентском коде, то клиентские функции вызываются в неправильном порядке!
Это может произойти, например, если используется mysql_use_result() и делается попытка выполнить новый запрос до того, как вызвана mysql_free_result() , или если клиент пытается выполнить два возвращающих данные запроса без обращения к mysql_use_result() либо mysql_store_result() в промежутке между ними.
Ошибка Ignoring user
Получение следующей ошибки:
Found wrong password for user: 'some_user@some_host'; ignoring user означает, что при запуске mysqld или при перезагрузке таблиц привилегий сервер нашел в таблице user запись с неправильным паролем и в результате запись просто игнорируется системой привилегий.
Причины проблемы и способы ее решения могут быть следующими:
Возможно, работает новая версия mysqld со старой таблицей user. Это можно проверить путем выполнения mysqlshow mysql user , чтобы посмотреть, короче ли поле пароля, чем 16 символов. Если это так, то положение можно исправить, запустив сценарий 'scripts/add_long_password'.
У пользователя старый пароль (длиной в 8 символов), а mysqld запущен без опции --old-protocol . Обновите данные пользователя в таблице user, задав новый пароль, или перезапустите mysqld с --old-protocol .
Пароль был установлен в таблице user без применения функции PASSWORD() . Воспользуйтесь mysql для обновления пароля пользователя в таблице user . Позаботьтесь о том, чтобы была использована функция PASSWORD() :
mysql> UPDATE user SET password=PASSWORD('your password') -> WHERE user='XXX';
Ошибка Table 'xxx' doesn't exist
Получение ошибки Table 'xxx' doesn't exist или Can't find file: 'xxx' (errno: 2) , означает, что в текущей базе данных не существует таблицы с именем xxx .
Обратите внимание: поскольку в MySQL для хранения баз данных и таблиц используются каталоги и файлы, то имена баз данных и каталогов являются зависимыми от регистра символов! (Под Windows имена баз данных и таблиц не зависят от регистра символов, но для всех ссылок на заданную таблицу в пределах запроса должен использоваться одинаковый регистр!)
Проверить, какие таблицы имеются в текущей базе данных, можно с помощью SHOW TABLES . См. раздел Синтаксис команды SHOW .
Ошибка Can't initialize character set xxx
Получение ошибки наподобие:
MySQL Connection Failed: Can't initialize character set xxx
Означает, что имеется одна из следующих ситуаций:
Кодировка является многобайтовой и не поддерживается клиентом. В этом случае необходимо перекомпилировать клиент с --with-charset=xxx или с --with-extra-charsets=xxx (см. раздел Типичные опции configure ). Весь стандартный бинарный код MySQL откомпилирован с --with-extra-character-sets=complex , что обеспечивает поддержку всех многобайтовых кодировок (см. раздел Набор символов, применяющийся для записи данных и сортировки).
Кодировка является простой кодировкой, не скомпилированной в mysqld , и файлы определения кодировки находятся не там, где рассчитывает их найти клиент. В этом случае необходимо:
Перекомпилировать клиент с поддержкой этой кодировки (см. раздел Типичные опции configure ).
Указать клиенту, где расположены файлы определения кодировки. Для многих клиентов это можно сделать с помощью опции
--character-sets-dir=path-to-charset-dir .
Скопировать файлы определения кодировки туда, где, по мнению клиента, они должны находиться.
Не найден файл (File not found)
Получение от MySQL ERROR '...' not found (errno: 23), Can't open file: ... (errno: 24) , или любой другой ошибки с номером 23 или 24 означает, что для MySQL выделено недостаточно файловых дескрипторов. Можно использовать утилиту perror для получения описания ошибки с определенным номером:
shell> perror 23 File table overflow shell> perror 24 Too many open files shell> perror 11 Resource temporarily unavailable
Проблема здесь в том, что mysqld пытается одновременно держать открытыми слишком много файлов. Можно либо указать mysqld не открывать так много файлов одновременно, либо увеличить количество файловых дескрипторов, доступных mysqld .
Чтобы предписать mysqld держать одновременно открытыми меньше файлов, можно уменьшить табличный кэш, задав safe_mysqld опцию -O table_cache=32 (значение по умолчанию 64). Уменьшение значения max_connections также уменьшит количество открытых файлов (по умолчанию значение переменной 90).
Чтобы изменить число доступных mysqld файловых дескрипторов, можно использовать опцию --open-files-limit=# в safe_mysqld или опцию -O open-files-limit=# в mysqld (cм. раздел SHOW VARIABLES .). Проще всего это сделать путем добавления опции в файл опций (см. раздел 4.1.2 Файлы параметров 'my.cnf'). Если используется ранняя версия mysqld , не поддерживающая эту возможность, можно отредактировать скрипт safe_mysqld . В скрипте есть закомментированная строка ulimit -n 256 ; можно, убрав символ '#', раскомментировать эту строку и, заменив значение 256 другим, повлиять на количество доступных mysqld файловых дескрипторов.
При помощи ulimit (и open-files-limit ) можно увеличить количество файловых дескрипторов только до предела, установленного в операционной системе. Существует также "жесткий" предел, который может быть переопределен только при запуске safe_mysqld или mysqld от имени пользователя root (но помните, что в этом случае также следует использовать опцию --user=... ). Если необходимо увеличить предел ОС по количеству доступных отдельному процессу файловых дескрипторов, обращайтесь к документации по своей операционной системе.
Обратите внимание: при использовании tcsh ulimit работать не будет! Кроме того, tcsh будет сообщать неверные значения при запросе текущих пределов! В этом случае необходимо запускать safe_mysqld с использованием sh !
1 2 3 4
8 8 8
| |