Не могу запустить / остановить службу MySQL

Принятие веб-сервера Debian Etch с запущенным MySQL.

Я обычно запускаю, останавливаю и перезапускаю msyql используя:

/etc/init.d/mysql restart

По какой-то причине в этой настройке я получаю следующее:

: ~ # /etc/init.d/mysql stop

Остановка сервера базы данных MySQL: сбой mysqld!

Процесс MySQL работает нормально:

:~# ps aux | grep mysql 
root      2045  0.0  0.1   2676  1332 ?        S    Jun25   0:00 /bin/sh /usr/bin/mysqld_safe
mysql     2082  0.6 10.7 752544 111188 ?       Sl   Jun25  18:49 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --user=mysql --pid-file=/var/run/mysqld/mysqld.pid --skip-external-locking --port=3306 --socket=/var/run/mysqld/mysqld.sock
root      2083  0.0  0.0   1568   504 ?        S    Jun25   0:00 logger -p daemon.err -t mysqld_safe -i -t mysqld
root     11063  0.0  0.0   2856   716 pts/0    S+   17:29   0:00 grep mysql

Я уверен, что есть действительно простой способ сделать это, но я хочу понять, что происходит. Почему типичный способ не работает для меня?

РЕДАКТИРОВАТЬ ОБНОВЛЕНИЕ как обновление:

JBRLSVR001:/var/log/mysql# mysqladmin shutdown
JBRLSVR001:/var/log/mysql# dpkg --list mysql\*
Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Installed/Config-files/Unpacked/Failed-config/Half-installed 
|/ Err?=(none)/Hold/Reinst-required/X=both-problems (Status,Err: uppercase=bad)
||/ Name                                         Version                                      Description
 +++-============================================-============================================-========================================================================================================
un  mysql-client                                 <none>                                       (no description available)
un  mysql-client-4.1                             <none>                                       (no description available)
ii  mysql-client-5.0                             5.0.32-7etch8                                mysql database client binaries
ii  mysql-common                                 5.0.32-7etch8                                mysql database common files (e.g. /etc/mysql /my.cnf)
un  mysql-common-4.1                             <none>                                       (no description available)
ii  mysql-server                                 5.0.32-7etch8                                mysql database server (meta package depending on the latest version)
un  mysql-server-4.1                             <none>                                       (no description available)
ii  mysql-server-5.0                             5.0.32-7etch8                                mysql database server binaries

Завершение работы mysqladmin работает, но мне все еще любопытно, почему не работают команды /etc/init.d/mysql.

11 ответов

Решение
mysqladmin shutdown

должно работать, чтобы выключить сервер.

Я вижу две вероятные возможности:

  1. MySQL имеет проблему и по какой-то причине отказывается закрываться.
  2. Предыдущий админ сделал что-то странное. Либо изменил скрипт init.d, либо вообще не стал использовать пакеты Debian для установки MySQL.

Что значит dpkg --list mysql\* сказать?

Что говорит /var/log/mysql.err? Или другие журналы mysql?

РЕДАКТИРОВАТЬ:

Так mysqladmin shutdown работал?

В соответствии с этим установлен пакет mysql-server (mysql-server-5.0; пакет mysql-server, вероятно, просто заглушка). Таким образом, они могли установить над ним? Бег debsums mysql-server-5.0 мог бы сказать тебе больше. dpkg --listfiles mysql-server-5.0 тоже могу помочь...

Что на самом деле в /etc/init.d/mysql? Я не проверял эту конкретную версию пакета, но он должен попытаться использовать mysqladmin shutdown... Может быть, вам повезло, и они только сломали это...

Почему это происходит

Это распространенная проблема, если вы выполняете импорт mysql и перезаписываете саму базу данных mysql, например, когда вы можете восстанавливать данные из резервной копии mysqldump -A.

Это хорошо: вы, вероятно, хотите сделать резервную копию всех ваших пользователей mysql, разрешений и т. Д., Но это может нанести ущерб таким вещам, как пользователь debian-sys-maint, используемый для чистого отключения mysql.

Хотя эта новая база данных, возможно, изменит и пароль root, и пароль debian-sys-maint, конечно, она не изменит автоматически ожидаемый пароль debian-sys-maint в /etc/mysql/debian.cnf. На самом деле, если вы не сделали резервную копию этого файла, вы, вероятно, даже не знаете, что это за пароль!

Сброс пароля root для mysql (необязательно)

Обо всем по порядку. Если пароль root для mysql был разным на старом и новом серверах, вы можете использовать mysqladmin, чтобы исправить это:

mysql -p -u root password 'newpassword'

Однако, когда вы устанавливаете apt-get mysql-server, он, вероятно, запросил у вас новый пароль root для mysql, и вы, вероятно, использовали тот же пароль, который вы использовали ранее.

Исправьте пароль Debian Sys Maint.

Итак, теперь ищите пароль Debian sys maint, который Debian создал для вас, когда вы установили его на новом сервере. (Вам нужен sudo, потому что это должен быть файл с высокой степенью защиты.)

sudo cat /etc/mysql/debian.cnf

Теперь войдите в mysql, используя пароль root, который вы установили выше:

mysql -p -u root   # use your new password when prompted

Сбросьте пароль для пользователя debian-sys-maint и не забудьте сбросить привилегии:

>  SET PASSWORD FOR 'debian-sys-maint'@'localhost' = PASSWORD('samepassword');
>  FLUSH PRIVILEGES;
>  QUIT

Проверьте, чтобы убедиться, что это работает:

sudo /etc/init.d/mysql restart

Быстрая подсказка

Если вам когда-либо понадобится сбросить пароль root для сервера без необходимости выключения сервера, эта учетная запись пользователя имеет право это сделать - просто заархивируйте файл debian.cnf и войдите в систему с этим пользователем. NB Защитите эту учетную запись пользователя, как root.

pkill mysql

определенно будет работать

Еще 2 подсказки:

sh -x /etc/init.d/mysql restart

Это покажет вам команды, выполняемые сценарием инициализации.

установите пакеты debsums, и вы можете проверить, какие пакеты были изменены (проверка также доступна для RPM, но IMHO работает лучше).

Скрипт отключения mysql использует пользователя debian-sys-maint для запуска "отключения mysqladmin", считывая пароль для пользователя из /etc/mysql/debian.cnf. Вы должны проверить, что этот файл существует, и что вы можете запустить mysqladmin shutdown от имени этого пользователя.

Технически вы можете закончить это:

pkill -9 mysqld

Но вы можете потерять данные?

Возможно, вам лучше спросить кого-нибудь на http://www.faultserver.ru

Предполагая, что пакет несколько странный, проблема может быть в файле pid. Я подозреваю, что новые пакеты или скомпилированная установка не создали /var/run/mysql/ или что-то стандартное в Debian для файла pid, который нужно записать, или сценарий init ищет файл mysqld.pid в другом месте. Если вы можете исправить несоответствие файла init / pid, вероятно, все должно работать.

Чтобы прокомментировать ваш вопрос, я напишу полный ответ:

Проблема в том, что сокет по умолчанию /tmp/mysql.sock с источником MySQL, и /var/run/mysqld/mysqld.sock с двоичными файлами Debian.

Решение состоит в том, чтобы исправить путь сокета в /etc/mysql/debian.cnf, предоставляя хорошее socket=, Или оставив его, но затем измените /etc/mysql/my.cnf,

Вот как я это узнал: в /etc/init.d/mysql когда появляется сообщение "fail", эта строка называется:

echo -e "$ps_alive processes alive and '$MYADMIN ping' resulted in\n$ping_output\n" | $ERR_LOGGER -p daemon.debug

Это указало мне на $MYADMIN ping, который mysqladmin --defaults-file=/etc/mysql/debian.cnf ping, Выполнение этой самой команды заканчивается на:

/ usr / bin / mysqladmin: не удалось подключиться к серверу на локальном хосте

ошибка: "Не удается подключиться к локальному серверу MySQL через сокет" /var/run/mysqld/mysqld.sock' (2)'

Убедитесь, что mysqld работает и что сокет: /var/run/mysqld/mysqld.sock существует!

Итак, я посмотрел на /etc/mysql/debian.cnf и обнаружил, что это была плохая розетка.

Использование "pkill mysql" также может привести к потере ваших данных, особенно если вызывается как "pkill -9":(

Я также рекомендовал бы использовать sh -x, чтобы увидеть, в чем может быть проблема со сценарием инициализации, и вы также можете заглянуть в журналы ошибок для MySQL (/var/log/mysql или /var/lib/mysql, в зависимости от конфигурации), чтобы увидеть, не застрял ли он в действительно долго выполняющемся запросе или что-то в этом роде и, таким образом, пока не желает завершать работу изящно.

Вы должны быть суперпользователем, чтобы начать останавливать MySQL (и большинство других сервисов) в Debian.

Не уверен, если вы уже или нет... если нет, вам нужно сделать один из

  • войдите как root
  • поместите sudo перед вашей командой /etc/init.d/mysql restart (она спросит ваш пароль, и вам нужно будет войти в группу sudoers)

Используйте следующую команду:

$ mysqladmin shutdown

это должно быть доступно в каталоге /usr/bin в вашем случае.

Другие вопросы по тегам