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.

dotancohen
fuente
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
Craig Efrein
fuente
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.

Vérace
fuente
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