29 votos

No se puede iniciar/detener el servicio mysql

Tomando el control de un servidor web Debian Etch con MySQL en funcionamiento.

Normalmente inicio, paro y reinicio msyql usando:

/etc/init.d/mysql restart

Por alguna razón en esta configuración obtengo lo siguiente:

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

Parada del servidor de base de datos MySQL: ¡fallo de mysqld!

El proceso de mysql está funcionando bien:

:~# 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

Estoy seguro de que hay alguna manera muy fácil de hacerlo, pero también quiero entender lo que está pasando. ¿Por qué no me funciona la forma típica?

EDITAR ACTUALIZACIÓN como una actualización:

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

El cierre de mysqladmin funciona, pero todavía tengo curiosidad por saber por qué los comandos /etc/init.d/mysql no funcionan.

0 votos

Para mí el problema era que la instalación hecha a mano buscaba /tmp/mysql.sock en lugar de /var/run/mysqld/mysqld.sock . Así que el script de los mantenedores de Debian estaba emitiendo un error, silenciosamente. Sólo hay que arreglar socket= en el /etc/mysql/debian.cnf

26voto

freiheit Puntos 9670
mysqladmin shutdown

debería funcionar para apagar el servidor.

Veo dos posibilidades probables:

  1. MySQL tiene un problema y se niega a cerrarse por alguna razón.
  2. El anterior administrador hizo algo extraño. O bien modificó el init.d script o no se molestó en usar los paquetes de Debian para instalar MySQL.

¿Qué hace dpkg --list mysql\* ¿dice?

¿Qué dice /var/log/mysql.err? ¿O los otros registros de mysql?

EDITAR:

Así que mysqladmin shutdown ¿funcionó?

Según eso, el paquete mysql-server está instalado (mysql-server-5.0; el paquete mysql-server es probablemente sólo un stub). ¿Así que es posible que se haya instalado por encima? Ejecutando debsums mysql-server-5.0 podría decirle más. dpkg --listfiles mysql-server-5.0 también podría ayudar...

¿Qué hay realmente en /etc/init.d/mysql? No he comprobado esa versión específica del paquete, pero debería intentar usar mysqladmin shutdown ... Tal vez tengas suerte y sólo hayan roto eso...

0 votos

Gracias, he añadido algo más de información al post.

0 votos

Sospecho que no utilizaron los paquetes de Debian para instalar mysql

0 votos

Alguien usó un paquete de Debian una vez, por lo menos. Puede que hayan compilado a partir del código fuente y hayan sobrescrito los archivos reales, o lo hayan roto de alguna otra manera...

22voto

Jamieson Becker Puntos 386

Por qué ocurre esto

Este es un problema común si se hace una importación de mysql y se sobrescribe la propia base de datos mysql, como cuando se puede restaurar desde una copia de seguridad mysqldump -A.

Esto es algo bueno: probablemente quiera hacer una copia de seguridad de todos sus usuarios de mysql, permisos, etc -- pero puede causar estragos con cosas como el usuario debian-sys-maint utilizado para cerrar limpiamente mysql.

Aunque esta nueva base de datos posiblemente cambiará tanto la contraseña de root como la de debian-sys-maint, por supuesto no cambiará automáticamente la contraseña esperada de debian-sys-maint en /etc/mysql/debian.cnf. De hecho, a menos que también haya hecho una copia de seguridad de ese archivo, ¡probablemente ya no sepa cuál es esa contraseña!

Restablecer la contraseña de root de mysql (opcional)

Lo primero es lo primero. Si la contraseña de root de mysql era diferente entre los servidores antiguos y los nuevos, puedes usar mysqladmin para arreglarlo:

mysql -p -u root password 'newpassword'

Sin embargo, cuando apt-get instaló mysql-server, probablemente le pidió la nueva contraseña de root de mysql y probablemente usó la misma que estaba usando antes.

Arreglar la contraseña debian sys maint.

Así que ahora busque la contraseña debian sys maint que debian creó para usted cuando lo instaló en el nuevo servidor. (Necesita sudo porque este debe ser un archivo altamente protegido).

sudo cat /etc/mysql/debian.cnf

Ahora, inicie sesión en mysql utilizando la contraseña de root que estableció anteriormente:

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

Restablece la contraseña para el usuario debian-sys-maint y no te olvides de eliminar los privilegios:

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

Pruebe para asegurarse de que funciona:

sudo /etc/init.d/mysql restart

Consejo rápido

Si alguna vez necesita restablecer la contraseña de root para el servidor sin tener que derribar el servidor, esta cuenta de usuario tiene tiene la autoridad para hacerlo -- sólo tiene que catar el archivo debian.cnf e iniciar sesión con ese usuario. N.B. Proteja esta cuenta de usuario igual que la de root.

2 votos

Gracias, Jamieson, esto me ha ahorrado potencialmente horas de trabajo.

1 votos

¡Impresionante, y totalmente bienvenido! He tenido que recurrir a ese archivo más veces de las que me gustaría admitir ;)

1 votos

Una respuesta brillante. Importar un volcado de la base de datos (y con él, la contraseña de root) fue exactamente la razón en mi caso. La única diferencia es que mi archivo debian.cnf utilizaba el usuario "root" de mysql en lugar de "debian-sys-maint". Simplemente puse la contraseña de root en debian.cnf y ahora puedo controlar mysql mediante "service mysql <command>".

6voto

Thomas Kammeyer Puntos 2743

2 pistas más:

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

Esto le mostrará los comandos ejecutados por el init script.

instala los debsums de los paquetes, y puedes probar qué paquetes fueron modificados (verify también está disponible para RPM, pero IMHO funciona mejor).

1 votos

Tuve el mismo problema que OP y ejecutar este comando sugirió "Access denied for user 'debian-sys-maint'@'localhost'" lo cual era absolutamente correcto: mi base de datos mysql aún no había asignado cualquier permisos, por lo que mysql stop no tenía los permisos en la propia base de datos para cerrarse. Un manual mysqladmin shutdown funcionó perfectamente.

2voto

kashani Puntos 3273

Asumiendo que el paquete es algo extraño el problema podría ser el archivo pid. Sospecho que los nuevos paquetes o la instalación compilada no crearon /var/run/mysql/ o lo que sea estándar en Debian para que se escriba el archivo pid o el init script está buscando el archivo mysqld.pid en otro lugar. Si puede arreglar el desajuste entre el fichero init y el pid, las cosas deberían funcionar.

0 votos

El init script no utiliza el archivo pid para detener el servidor.

2voto

ExCaliburTR Puntos 1

El mysql shutdown script utiliza el usuario debian-sys-maint para ejecutar 'mysqladmin shutdown', leyendo la contraseña del usuario desde /etc/mysql/debian.cnf. Debe comprobar que este fichero existe, y que puede ejecutar mysqladmin shutdown como este usuario.

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by: