Если вы собираетесь использовать таблицы, поддерживающие транзакции
(InnoDB, BDB), следует прежде всего создать файл my.cnf
и установить опции
запуска для тех типов таблиц, с которыми планируется работать.
See Глава 7, Типы таблиц MySQL.
В общем случае сервер mysqld
запускается одним из следующих способов:
Вызовом
mysql.server
. Этот скрипт используется преимущественно для запуска и останова системы. Более подробно он описан в разделе See Раздел 2.4.3, «Автоматический запуск и остановка MySQL».Вызовом команды
safe_mysqld
, которая определяет соответствующие опции дляmysqld
и затем запускаетmysqld
с этими опциями. See Раздел 4.7.2, «safe_mysqld
, оболочкаmysqld
».Относительно Windows NT/2000/XP просьба обращаться к разделу See Раздел 2.6.2.2, «Запуск MySQL на Windows NT, 2000 или XP».
Вызовом
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
пытается использовать, уже
занят другой программой. Раздел 2.4.1, «Проблемы при запуске mysql_install_db
» и
раздел See Раздел 4.1.4, «Запуск нескольких серверов 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
, то можно попробовать создать
трассировочный файл, чтобы обнаружить данную проблему.
See Раздел D.1.2, «Создание трассировочных файлов».
При использовании таблиц InnoDB следует указывать опции запуска, специфические для InnoDB. See Раздел 7.5.2, «Параметры запуска InnoDB».
При использовании таблиц BDB (Berkeley DB) необходимо хорошо знать
различные специфические для BDB опции запуска. See Раздел 7.6.3, «Параметры запуска BDB
».