Проблемы при запуске сервера MySQL


Если вы собираетесь использовать таблицы, поддерживающие транзакции (InnoDB, BDB), следует прежде всего создать файл my.cnf и установить опции запуска для тех типов таблиц, с которыми планируется работать. Типы таблиц MySQL.

В общем случае сервер mysqld запускается одним из следующих способов:

При своем запуске демон mysqld изменяет свой каталог на каталог данных (datadir). В нем он ожидает найти журнальные файлы, файлы pid (ID процессов) и собственно базы данных.

Местоположение каталога данных жестко устанавливается при компиляции дистрибутива. Однако если mysqld ожидает найти каталог данных где-либо в другом месте, а не там, где он действительно расположен в вашей системе, то демон mysqld не будет работать правильно. Если есть проблемы с неправильными путями, то, вызывая mysqld с опцией --help, вы можете найти информацию о том, что разрешают опции mysqld и какие установки путей приняты по умолчанию. Можно переопределить установки по умолчанию указанием правильных имен путей как аргументов mysqld в командной строке (эти опции также можно использовать с safe_mysqld).

Обычно требуется указывать mysqld только каталог, в котором устанавливается MySQL. Это можно сделать с помощью опции --basedir. Можно также использовать --help для проверки эффекта от изменения опций путей (учтите, что --help должна быть последней опцией в команде mysqld). Например:

shell> EXECDIR/mysqld --basedir=/usr/local --help

После определения требуемых установок путей запускайте сервер без опции --help.

Какой бы метод вы ни использовали для запуска сервера, если его неудачный запуск завершается корректно, то проверьте журнальный файл, чтобы узнать, почему запуск происходит неудачно. Журнальные файлы находятся в каталоге данных (обычно /usr/local/mysql/data для бинарного дистрибутива, /usr/local/var для дистрибутива исходного кода и \mysql\data\mysql.err под Windows). В каталоге данных следует искать файлы с именами в виде host_name.err и host_name.log, где host_name - имя вашего серверного хоста. Затем проверьте последние несколько строк этих файлов:

shell> tail host_name.err
shell> tail host_name.log

В журнальном файле нужно искать что-нибудь похожее на следующее:

000729 14:50:10 bdb: Recovery function for LSN 1 27595 failed
000729 14:50:10 bdb: warning: ./test/t1.db: No such file or directory
000729 14:50:10 Can't init databases

Это означает, что вы не запустили mysqld с --bdb-no-recover и база данных Berkeley DB нашла что-то ошибочное в своих журнальных файлах при попытке восстановить ваши базы данных. Чтобы иметь возможность продолжить, необходимо переместить старый журнальный файл Berkeley DB из каталога баз данных в некоторое другое место, где позже можно будет изучить его. Журнальные файлы имеют имена log.0000000001 и т.д.; номер возрастает при каждом запуске.

Если вы запускаете mysqld работает с поддержкой таблиц BDB и mysqld при старте выводит дамп оперативной памяти (coredump), то причиной этого это могут быть какие-либо проблемы с журналом восстановления BDB. В этом случае можно попробовать запуск mysqld с --bdb-no-recover. Если это помогает, то следует удалить все файлы log.* из каталога данных и попробовать запустить mysqld опять.

Если выдается приведенная ниже ошибка, то это означает, что некоторая другая программа (или другой сервер mysqld) уже использует данный TCP/IP порт или сокет, на которых mysqld пытается слушать:

Can't start server: Bind on TCP/IP port: Address already in use
или
Can't start server : Bind on unix socket...

Чтобы убедиться, что другого работающего сервера mysqld нет, используйте ps. Если другой работающий сервер не найден, то можно попробовать выполнить команду telnet your-host-name tcp-ip-port-number и нажать пару раз клавишу «Enter». Если вы не получаете сообщения об ошибке вроде следующего telnet: Unable to connect to remote host: Connection refused, значит, что порт TCP/IP порт, который mysqld пытается использовать, уже занят другой программой. Проблемы при запуске mysql_install_db и раздел Запуск нескольких серверов MySQL на одном компьютере.

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

shell> mysqladmin variables
или
shell> mysqladmin -h 'your-host-name' variables

Если при запуске mysqld вы получили ошибку Errcode 13, что значит Permission denied, это означает, что у вас не было прав читать/создавать файлы в базе данных MySQL или в журнальном каталоге. В таком случае вам следует либо запускать mysqld как пользователь root, либо изменить права доступа к упомянутым файлам и каталогам, чтобы иметь права использовать их.

Если safe_mysqld запускает сервер, но вы не можете подключиться к нему, то следует убедиться, что в /etc/hosts есть запись, которая выглядит примерно так:

127.0.0.1 localhost

Эта проблема возникает только в системах, не имеющих рабочей библиотеки потоков, и для которых MySQL следует конфигурировать для использования потоков MIT-pthreads.

Если вы не можете запустить mysqld, то можно попробовать создать трассировочный файл, чтобы обнаружить данную проблему. Создание трассировочных файлов.

При использовании таблиц InnoDB следует указывать опции запуска, специфические для InnoDB. Параметры запуска InnoDB.

При использовании таблиц BDB (Berkeley DB) необходимо хорошо знать различные специфические для BDB опции запуска. Параметры запуска BDB.