MySQL kann weder konfiguriert noch gestartet werden

11

Bei einer brandneuen Kubuntu 14.04-Installation lief ich sudo aptitude install mysql-server-core-5.6. Die Installation konnte aufgrund der Abhängigkeiten einiger KDE-Pakete von nicht abgeschlossen werden mysql-server-core-5.5, die ersetzt worden wären. Wenn ich jetzt starte, sudo aptitude install mysql-server-5.5erhalte ich diesen Fehler, nachdem ich ein Passwort angegeben habe:

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.

Ich habe zwar gelesen, /usr/share/doc/mysql-server-5.5/README.Debianaber es gab nichts Relevantes für meine Situation. Das MySQL-Protokoll hilft:

$ 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]

Ich kann jedoch nicht finden, in welchem ​​Skript die --explicit_defaults_for_timestampOption eingestellt ist. Ich habe versucht, mysqlohne zu starten service, um die --explicit_defaults_for_timestampOption zu vermeiden, aber es wird immer noch nicht gestartet:

$ 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

Der Fehler sagt mir zu Remove all --log-error configuration options. Ich habe daher /etc/mysql/my.cnfdie folgende Zeile bearbeitet und auskommentiert:

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

Jetzt bekomme ich keine Fehlermeldung, kann mich aber trotzdem nicht anmelden:

$ 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)

Was könnte das Problem sein? Wie soll ich vorgehen?

BEARBEITEN

Ich habe jetzt die explicit-defaults-for-timestampZeile in auskommentiert my.cnf. Hier ist die gesamte Datei abzüglich der Header-Kommentare:

$ 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/

Folgendes passiert, wenn ich versuche, MySQL auszuführen:

$ 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

Wie zu sehen ist, wird nichts Neues in die Protokolle geschrieben, und die explicit_defaults_for_timestampOption ist nirgendwo festgelegt.

Ich konnte neu installieren, mysql-server-core-5.5aber das hat das Problem nicht behoben:

$ 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

Das 1in der letzten Zeile des Protokolls wurde früher mit hinzugefügt echound zeigt an, dass dem Protokoll nichts Neues hinzugefügt wurde.

dotancohen
quelle
Wenn Sie netstat -tlpn ausführen, sehen Sie den Port 3306 für MySQL?
Craig Efrein
@CraigEfrein: Nein, Port 3306 wird nicht abgehört. Ich habe sogar das System neu gestartet, um zu sehen, ob MySQL beim Booten starten würde, aber das war nicht der Fall.
Dotancohen
Und der --explicit_defaults_for_timestamp, mögliche Orte, an denen Sie suchen müssen, falls Sie dies noch nicht getan haben. /etc/mysql/my.cnf, /etc/init.d/mysql und / etc / default / mysql
Craig Efrein
Vielen Dank. Die Zeichenfolge timestampwurde nur in gefunden etc/mysql/my.cnfund ich habe sie herauskommentiert. Trotzdem bekomme ich immer noch die gleiche Erwähnung im Protokoll.
Dotancohen
Gibt es eine my.cnf in Ihrem Home-Verzeichnis?
Vérace

Antworten:

4

Sie haben installiert mysql-server-core-5.6 , was teilweise fehlgeschlagen oder teilweise installiert ist.

Das -explicit_defaults_for_timestampist nur für MySQL 5.6. Es ist wahrscheinlich, dass die teilweise Installation mysql-server-core-5.6diese Option hinzugefügt hat. Ich werde jetzt vorschlagen, dass Sie alle Spuren des mysql-server-core-5.6Datenverzeichnisses entfernen und neu initialisieren.

  1. Beenden Sie alle laufenden mysqld-Prozesse:

    ps aux | grep mysql
    kill pid
  2. Deinstallieren Sie die mysql-server-core-5.6Pakete:

    apt-get remove mysql-server-core-5.6

    Eine Liste der Dateien finden Sie hier

  3. Initialisieren Sie das Datenbankverzeichnis neu:

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

    B. B. mysql_install_db /var/lib/mysql

  4. Kommentieren Sie die !includedir /etc/mysql/conf.d/Option in ausmy.cnf


Beenden Sie alle vorhandenen MySQL-Prozesse und starten Sie MySQL mit dem skip-grant-tables Option.

A. Ermitteln Sie den genauen Pfad des mysqld-Daemons:

which mysqld_safe

B. Führen Sie MySQL ohne Grant-Tabellen aus:

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

C. Stellen Sie sicher, dass MySQL zuhört:

netstat -tlpn 

Sie sollten Port 3306 sehen.

D. Wenn ja, melden Sie sich bei MySQL an:

mysql -u root -h 127.0.0.1

E. Legen Sie ein neues Passwort fest:

mysql> use mysql;
mysql> update user set password=PASSWORD("NEW-ROOT-PASSWORD") where User='root';
mysql> flush privileges;
mysql> quit
Craig Efrein
quelle
Vielen Dank, Craig. Ich konnte neu installieren mysql-server-core-5.5, aber das Problem wurde dadurch nicht behoben. Ich werde das der Frage hinzufügen.
Dotancohen
@dotancohen, aktualisiert meine Antwort
Craig Efrein
Vielen Dank. Ich habe jede Spur von 5.6 vollständig entfernt, sowohl /var/lib/mysqlals auch /var/log/mysql. Der mysql_install_dbBefehl ist fehlgeschlagen, weil er resolveipnicht gefunden wurde. Ich habe dann installiert mysql-server-5.5(was anscheinend nicht zusammen mit installiert ist mysql-server-core-5.5) zu bekommen resolveip. Während der Installation von habe mysql-server-5.5ich den Unable to set password for the MySQL "root" userFehler erneut erhalten, zurück zum ersten Platz!
Dotancohen
@dotancohen aktualisierte Antwort. Dies hängt davon ab, ob MySQL tatsächlich zuhört oder nicht.
Craig Efrein
Vielen Dank. In der Tat, mysqld_safestirbt sofort: 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

Ich habe diese Zeile in my.cnf

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

Ich denke, dass die Parameter my.cnf Bindestriche und keine Unterstriche verwenden sollten.

Vérace
quelle
Vielen Dank. Sie haben Recht, ich hatte diese Zeile auch, obwohl ich sie verpasst habe. Jetzt startet MySQL nicht, aber es wird nichts in die Protokolle geschrieben. Ich werde die Frage aktualisieren.
Dotancohen
Ich weiß, dass ich auf Xubuntu (ich kann Unity Desktop nicht ausstehen!) Den Teufel einer Zeit mit solchen Problemen hatte. Ich baue jetzt aus dem Quellcode - wenn Sie interessiert sind, schreibe ich auf, wie ich es genau mache . Was ich mache, wird von hier nach viel Versuch und Irrtum angepasst . Es ist ein bisschen mehr Arbeit als sudo apt-get install xxx, aber zumindest weiß ich, wo sich meine Dateien befinden und was zu tun ist, wenn etwas schief geht!
Vérace
Vielen Dank, wenn ich das nicht durchstehen kann, werde ich die Anweisungen ausprobieren, auf die Sie verlinken.
Dotancohen
Nun, das ist für Leute, die MySQL über Eclipse kompilieren und ausführen möchten - ich habe es für jemanden angepasst, der MySQL nur normal ausführen möchte. Warum verwenden Sie 5.5?
Vérace
Eigentlich würde ich 5.6 bevorzugen und ich benutze keine Eclipse.
Dotancohen