Связь и интернет Архив Программирование
   
Сделать стартовойСделать закладку            
   ПОИСК  
   
Главная / MySQL / Проблемы и распространенные ошибки /
8  Perl
8  PHP
8  JavaScript
8  HTML
8  DHTML
8  XML
8  CSS
8  C / C++
8  Pascal и Delphi
8  Турбо Ассемблер
8  MySQL
8  CASE-технологии
8  Алгоритмы
8  Python
8  Обратная связь
8  Гостевая книга
Новости о мире


Распространенные ошибки при использовании MySQL - Программирование от RIN.RU
Распространенные ошибки при использовании MySQL



Ошибка в клиенте 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 файловых дескрипторов.


При помощи ulimitopen-files-limit) можно увеличить количество файловых дескрипторов только до предела, установленного в операционной системе. Существует также "жесткий" предел, который может быть переопределен только при запуске safe_mysqld или mysqld от имени пользователя root (но помните, что в этом случае также следует использовать опцию --user=...). Если необходимо увеличить предел ОС по количеству доступных отдельному процессу файловых дескрипторов, обращайтесь к документации по своей операционной системе.


Обратите внимание: при использовании tcsh ulimit работать не будет! Кроме того, tcsh будет сообщать неверные значения при запросе текущих пределов! В этом случае необходимо запускать safe_mysqld с использованием sh!

<<<  Назад
 1  2  3  4 


 8  Комментарии к статье  8 8  Обсудить в чате

8  В тему

Как определить, чем вызваны проблемы

Вопросы, связанные с инсталляцией

Вопросы, связанные с администрированием

Проблемы, относящиеся к запросам

Вопросы, связанные с определением таблиц

 
  
  
    Copyright ©  RIN 2003 - 2004      * Обратная связь