No se puede configurar ni iniciar MySQL


11

En una nueva instalación de Kubuntu 14.04, corrí sudo aptitude install mysql-server-core-5.6. La instalación no pudo completarse debido a las dependencias de algunos paquetes de KDE mysql-server-core-5.5, que habrían sido reemplazados. Ahora, cuando ejecuto sudo aptitude install mysql-server-5.5, aparece este error después de especificar una contraseña:

Configuring mysql-server-5.5
Unable to set password for the MySQL "root" user
An error occurred while setting the password for the MySQL administrative user. This may have happened
because the account already has a password, or because of a communication problem with the MySQL server.
You should check the account's password after the package installation.
Please read the /usr/share/doc/mysql-server-5.5/README.Debian file for more information.

De hecho, he leído /usr/share/doc/mysql-server-5.5/README.Debianpero no había nada relevante para mi situación. El registro de MySQL ayuda a:

$ tail /var/log/mysql/error.log 
140818 10:17:16 InnoDB: Completed initialization of buffer pool
140818 10:17:16 InnoDB: highest supported file format is Barracuda.
140818 10:17:16  InnoDB: Waiting for the background threads to start
140818 10:17:17 InnoDB: 5.5.38 started; log sequence number 1595675
140818 10:17:17 [ERROR] /usr/sbin/mysqld: unknown option '--explicit_defaults_for_timestamp'
140818 10:17:17 [ERROR] Aborting

140818 10:17:17  InnoDB: Starting shutdown...
140818 10:17:18  InnoDB: Shutdown completed; log sequence number 1595675
140818 10:17:18 [Note]

Sin embargo, no puedo encontrar en qué script --explicit_defaults_for_timestampestá configurada la opción. Traté de comenzar mysqlsin serviceevitar la --explicit_defaults_for_timestampopción, pero todavía no se inicia:

$ ps aux | grep mysql
dotanco+ 25458  0.0  0.0  11748   928 pts/4    S+   10:30   0:00 grep --color=auto mysql

$ sudo mysqld_safe --skip-grant-tables &
[1] 25470
140818 10:30:54 mysqld_safe Can't log to error log and syslog at the same time.  Remove all --log-error configuration options for --syslog to take effect.
140818 10:30:54 mysqld_safe Logging to '/var/log/mysql/error.log'.
140818 10:30:54 mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql
140818 10:30:57 mysqld_safe mysqld from pid file /var/run/mysqld/mysqld.pid ended

[1]+  Done                    sudo mysqld_safe --skip-grant-tables

$ ps aux | grep mysql
dotanco+ 25810  0.0  0.0  11748   932 pts/4    S+   10:31   0:00 grep --color=auto mysql

El error me dice que lo haga Remove all --log-error configuration options. Por lo tanto, edité /etc/mysql/my.cnfy comenté la siguiente línea:

log-error  = /var/log/mysql/error.log

Ahora no recibo ningún error pero aún no puedo iniciar sesión:

$ sudo mysqld_safe --skip-grant-tables &
[1] 26558
140818 10:34:37 mysqld_safe Logging to syslog.
140818 10:34:38 mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql
140818 10:34:40 mysqld_safe mysqld from pid file /var/run/mysqld/mysqld.pid ended

[1]+  Done                    sudo mysqld_safe --skip-grant-tables

$ mysql -uroot
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)

¿Cuál podría ser el problema? ¿Cómo debo proceder?

EDITAR

Ahora he comentado la explicit-defaults-for-timestamplínea my.cnf. Aquí está el archivo completo, menos los comentarios del encabezado:

$ cat /etc/mysql/my.cnf 

[client]
port            = 3306
socket          = /var/run/mysqld/mysqld.sock

[mysqld_safe]
pid-file        = /var/run/mysqld/mysqld.pid
socket          = /var/run/mysqld/mysqld.sock
nice            = 0

[mysqld]
user            = mysql
pid-file        = /var/run/mysqld/mysqld.pid
socket          = /var/run/mysqld/mysqld.sock
port            = 3306
basedir         = /usr
datadir         = /var/lib/mysql
tmpdir          = /tmp
lc-messages-dir = /usr/share/mysql
#explicit_defaults_for_timestamp

bind-address    = 127.0.0.1

#log-error      = /var/log/mysql/error.log

sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

symbolic-links=0

!includedir /etc/mysql/conf.d/

Esto es lo que sucede cuando intento ejecutar MySQL:

$ sudo echo 1 >> /var/log/mysql/error.log

$ tail /var/log/mysql/error.log 
140818 10:31:49  InnoDB: Waiting for the background threads to start
140818 10:31:50 InnoDB: 5.5.38 started; log sequence number 1595675
140818 10:31:50 [ERROR] /usr/sbin/mysqld: unknown option '--explicit_defaults_for_timestamp'
140818 10:31:50 [ERROR] Aborting

140818 10:31:50  InnoDB: Starting shutdown...
140818 10:31:51  InnoDB: Shutdown completed; log sequence number 1595675
140818 10:31:51 [Note] 
140818 10:31:51 mysqld_safe mysqld from pid file /var/run/mysqld/mysqld.pid ended
1

$ sudo service mysql start
start: Job failed to start

$ tail /var/log/mysql/error.log 
140818 10:31:49  InnoDB: Waiting for the background threads to start
140818 10:31:50 InnoDB: 5.5.38 started; log sequence number 1595675
140818 10:31:50 [ERROR] /usr/sbin/mysqld: unknown option '--explicit_defaults_for_timestamp'
140818 10:31:50 [ERROR] Aborting

140818 10:31:50  InnoDB: Starting shutdown...
140818 10:31:51  InnoDB: Shutdown completed; log sequence number 1595675
140818 10:31:51 [Note] 
140818 10:31:51 mysqld_safe mysqld from pid file /var/run/mysqld/mysqld.pid ended
1

$ grep explicit_defaults_for_timestamp /etc/mysql/my.cnf /etc/init.d/mysql /etc/default/mysql
/etc/mysql/my.cnf:#explicit_defaults_for_timestamp
grep: /etc/default/mysql: No such file or directory

Como se puede ver, no se escribe nada nuevo en los registros, y la explicit_defaults_for_timestampopción no está establecida en ningún lado.

Pude reinstalar mysql-server-core-5.5pero eso no resolvió el problema:

$ sudo aptitude reinstall mysql-server-core-5.5
The following packages will be REINSTALLED:
  mysql-server-core-5.5 
0 packages upgraded, 0 newly installed, 1 reinstalled, 0 to remove and 0 not upgraded.
Need to get 3,213 kB of archives. After unpacking 0 B will be used.
Get: 1 http://il.archive.ubuntu.com/ubuntu/ trusty-updates/main mysql-server-core-5.5 amd64 5.5.38-0ubuntu0.14.04.1 [3,213 kB]
Fetched 3,213 kB in 1s (3,163 kB/s)                
(Reading database ... 217167 files and directories currently installed.)
Preparing to unpack .../mysql-server-core-5.5_5.5.38-0ubuntu0.14.04.1_amd64.deb ...
Unpacking mysql-server-core-5.5 (5.5.38-0ubuntu0.14.04.1) over (5.5.38-0ubuntu0.14.04.1) ...
Replaced by files in installed package mysql-common (5.6.20-1ubuntu14.04) ...
Processing triggers for man-db (2.6.7.1-1) ...
Setting up mysql-server-core-5.5 (5.5.38-0ubuntu0.14.04.1) ...

$ sudo service mysql status
mysql stop/waiting

$ sudo service mysql start
start: Job failed to start

$ tail /var/log/mysql/error.log 
140818 10:31:49  InnoDB: Waiting for the background threads to start
140818 10:31:50 InnoDB: 5.5.38 started; log sequence number 1595675
140818 10:31:50 [ERROR] /usr/sbin/mysqld: unknown option '--explicit_defaults_for_timestamp'
140818 10:31:50 [ERROR] Aborting

140818 10:31:50  InnoDB: Starting shutdown...
140818 10:31:51  InnoDB: Shutdown completed; log sequence number 1595675
140818 10:31:51 [Note] 
140818 10:31:51 mysqld_safe mysqld from pid file /var/run/mysqld/mysqld.pid ended
1

Eso 1en la última línea del registro se agregó anteriormente con echo, e indica que no se agregó nada nuevo al registro.


cuando ejecuta netstat -tlpn, ¿ve el puerto 3306 para MySQL?
— Craig Efrein

@CraigEfrein: No, el puerto 3306 no se está escuchando. Incluso reinicio el sistema para ver si MySQL comenzaría en el arranque, pero no fue así.
— dotancohen

Y el --explicit_defaults_for_timestamp, posibles lugares para buscar, si aún no lo ha hecho. /etc/mysql/my.cnf, /etc/init.d/mysql y / etc / default / mysql
— Craig Efrein

Gracias. La cadena timestampse encontró solo dentro etc/mysql/my.cnfy la he comentado. Sin embargo, todavía recibo la misma mención en el registro.
— dotancohen

¿Hay un my.cnf en su directorio de inicio?
— Vérace

Respuestas:


4

Lo instaló mysql-server-core-5.6, lo que falló parcialmente o se instaló parcialmente.

El -explicit_defaults_for_timestampes solo para MySQL 5.6. Es probable que la instalación parcial de mysql-server-core-5.6agregue esta opción. Voy a sugerir ahora que elimine cualquier rastro mysql-server-core-5.6y reinicialice el directorio de datos.

  1. matar cualquier proceso mysqld en ejecución:

    ps aux | grep mysql
    kill pid
  2. Desinstalar los mysql-server-core-5.6paquetes:

    apt-get remove mysql-server-core-5.6

    Una lista de archivos está aquí.

  3. Reinicialice el directorio de la base de datos:

    A. rm -Rf /var/lib/mysql/*

    SI. mysql_install_db /var/lib/mysql

  4. Comente la !includedir /etc/mysql/conf.d/opción enmy.cnf


Elimine cualquier proceso MySQL existente y luego inicie MySQL usando la skip-grant-tablesopción.

A. Obtenga la ruta exacta del demonio mysqld:

which mysqld_safe

B. Ejecute MySQL sin tablas de concesión:

/mysqld_safe_directory/mysqld_safe --skip-grant-tables &
ex /bin/mysqld_safe

C. Asegúrese de que mysql esté escuchando:

netstat -tlpn 

deberías ver el puerto 3306.

D. Si es así, inicie sesión en MySQL:

mysql -u root -h 127.0.0.1

E. Establecer nueva contraseña:

mysql> use mysql;
mysql> update user set password=PASSWORD("NEW-ROOT-PASSWORD") where User='root';
mysql> flush privileges;
mysql> quit

Gracias Craig Pude reinstalar mysql-server-core-5.5pero eso no resolvió el problema. Agregaré eso a la pregunta.
— dotancohen

@dotancohen, actualicé mi respuesta
— Craig Efrein

Gracias. Eliminé completamente cualquier rastro de 5.6, resolví ambos /var/lib/mysqly /var/log/mysql. El mysql_install_dbcomando falló porque resolveipno se encontró. Luego instalé mysql-server-5.5(que aparentemente no está instalado junto con mysql-server-core-5.5) para obtener resolveip. Durante la instalación de mysql-server-5.5¡Obtuve el Unable to set password for the MySQL "root" usererror nuevamente, de vuelta al punto de partida!
— dotancohen

@dotancohen respuesta actualizada. Esto depende de si MySQL realmente está escuchando o no.
— Craig Efrein

Gracias. De hecho, mysqld_safemuere de inmediato: 40818 16:52:52 mysqld_safe Logging to '/var/lib/mysql/bruno.err'., 140818 16:52:52 mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql, 140818 16:52:54 mysqld_safe mysqld from pid file /var/run/mysqld/mysqld.pid ended.
— dotancohen

1

Tengo esta línea en my.cnf

[pol@localhost mysql-5.6.19-linux-x86_64]$ grep expli my.cnf
explicit-defaults-for-timestamp = TRUE

Creo que los parámetros my.cnf deberían usar guiones y no guiones bajos.


Gracias. Tienes razón, también tuve esa línea aunque la perdí. Ahora, mysql no se iniciará pero no se escribe nada en los registros. Actualizaré la pregunta.
— dotancohen

Sé que en Xubuntu (¡no soporto el escritorio de Unity!) Tuve el mal momento con problemas como este. Ahora construyo desde la fuente; si te interesa, escribiré cómo lo hago exactamente . Lo que hago está adaptado desde aquí después de mucho ensayo y error. Es un poco más trabajo que sudo apt-get install xxx, pero al menos sé dónde están mis archivos y qué hacer si las cosas comienzan a salir mal.
— Vérace

Gracias, si no puedo superar esto, intentaré las instrucciones a las que se vincula.
— dotancohen

Bueno, eso es para las personas que desean compilar y ejecutar mysql a través de eclipse; lo he adaptado para alguien que solo quiere ejecutar mysql normalmente. ¿Por qué estás usando 5.5?
— Vérace

En realidad, preferiría 5.6 y no uso eclipse.
— dotancohen
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.