it-swarm-ru.tech

Не могу запустить / остановить службу 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.

28
Derek Organ
mysqladmin shutdown

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

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

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

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

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

EDIT:

Так 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 ... Может быть, тебе повезло, и они только сломали это ...

25
freiheit

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

Это распространенная проблема, если вы выполняете импорт 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 и войдите в систему с этим пользователем. Нотабене Защитите эту учетную запись пользователя как root.

22
Jamieson Becker

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

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

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

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

6
elcuco
pkill mysql

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

5
Jonathan

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

2
kashani

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

2
theotherreceive

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

Проблема в том, что сокетом по умолчанию является /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 и ​​выяснил, что это плохая розетка.

1
Yvan

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

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

1
nixgeek

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

pkill -9 mysqld

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

Вы могли бы лучше спросить кого-то на http://www.serverfault.com

1
John Kurlak

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

$ mysqladmin shutdown

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

0
Masood Syed

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

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

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