Nie można skonfigurować ani uruchomić MySQL

11

Uruchomiłem zupełnie nową instalację Kubuntu 14.04 sudo aptitude install mysql-server-core-5.6. Instalacja nie mogła zostać zakończona z powodu zależności niektórych pakietów KDE mysql-server-core-5.5, które zostałyby zastąpione. Teraz po uruchomieniu pojawia sudo aptitude install mysql-server-5.5się ten błąd po podaniu hasł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.

W rzeczywistości czytałem, /usr/share/doc/mysql-server-5.5/README.Debianale nie było nic istotnego dla mojej sytuacji. Dziennik MySQL pomaga:

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

Nie mogę jednak znaleźć, w którym skrypcie --explicit_defaults_for_timestampustawiono tę opcję. Próbowałem rozpocząć mysqlbez, serviceaby uniknąć tej --explicit_defaults_for_timestampopcji, ale nadal nie można jej uruchomić:

$ 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

Błąd każe mi to zrobić Remove all --log-error configuration options. Dlatego zredagowałem /etc/mysql/my.cnfi skomentowałem następujący wiersz:

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

Teraz nie otrzymuję błędu, ale nadal nie mogę się zalogować:

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

Co może być problemem? jak powinienem postąpić?

EDYTOWAĆ

Teraz skomentowałem explicit-defaults-for-timestamplinię my.cnf. Oto cały plik bez komentarzy w nagłówku:

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

Oto co się dzieje, gdy próbuję uruchomić 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

Jak widać, nic nowego nie jest zapisywane w logach, a explicit_defaults_for_timestampopcja nigdzie nie jest ustawiona.

Mogłem ponownie zainstalować, mysql-server-core-5.5ale to nie rozwiązało problemu:

$ 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

To 1w ostatnim wierszu dziennika zostało dodane wcześniej echo, i oznacza, że ​​do dziennika nie dodano nic nowego.

dotancohen
źródło
Czy po uruchomieniu netstat -tlpn widzisz port 3306 dla MySQL?
Craig Efrein
@CraigEfrein: Nie, port 3306 nie jest nasłuchiwany. Nawet ponownie uruchamiam system, aby sprawdzić, czy MySQL uruchomi się przy starcie systemu, ale tak się nie stało.
dotancohen,
I --explicit_defaults_for_timestamp, możliwe miejsca do zobaczenia, jeśli jeszcze tego nie zrobiłeś. /etc/mysql/my.cnf, /etc/init.d/mysql i / etc / default / mysql
Craig Efrein
Dziękuję Ci. Sznurek timestampzostał znaleziony tylko w etc/mysql/my.cnfśrodku i wyłożyłem go. Jednak wciąż dostaję tę samą wzmiankę o tym w dzienniku.
dotancohen
Czy w twoim katalogu domowym znajduje się plik my.cnf?
Vérace

Odpowiedzi:

4

Zainstalowałeś mysql-server-core-5.6, który częściowo zawiódł lub częściowo zainstalował.

Dotyczy -explicit_defaults_for_timestamptylko MySQL 5.6. Jest prawdopodobne, że częściowa instalacja mysql-server-core-5.6dodała tę opcję. Zamierzam teraz zasugerować, aby usunąć wszelkie ślady mysql-server-core-5.6i ponownie zainicjować katalog danych.

  1. zabij wszystkie działające procesy mysqld:

    ps aux | grep mysql
    kill pid
  2. Odinstaluj mysql-server-core-5.6pakiety:

    apt-get remove mysql-server-core-5.6

    Lista plików jest tutaj

  3. Ponownie zainicjuj katalog bazy danych:

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

    B. mysql_install_db /var/lib/mysql

  4. Skomentuj !includedir /etc/mysql/conf.d/opcję wmy.cnf


Zabij istniejący proces MySQL, a następnie uruchom MySQL przy użyciu skip-grant-tablesopcji.

A. Uzyskaj dokładną ścieżkę demona mysqld:

which mysqld_safe

B. Uruchom MySQL bez tabel grantu:

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

C. Upewnij się, że mysql nasłuchuje:

netstat -tlpn 

powinieneś zobaczyć port 3306.

D. Jeśli tak, zaloguj się do MySQL:

mysql -u root -h 127.0.0.1

E. Ustaw nowe hasło:

mysql> use mysql;
mysql> update user set password=PASSWORD("NEW-ROOT-PASSWORD") where User='root';
mysql> flush privileges;
mysql> quit
Craig Efrein
źródło
Dziękuję Craig. Udało mi się ponownie zainstalować, mysql-server-core-5.5ale to nie rozwiązało problemu. Dodam to do pytania.
dotancohen
@dotancohen, zaktualizowałem moją odpowiedź
Craig Efrein
Dziękuję Ci. Całkowicie usunąłem wszelkie ślady 5.6, naprawiłem zarówno /var/lib/mysqli /var/log/mysql. mysql_install_dbPolecenie nie powiodło się, ponieważ resolveipnie został znaleziony. Następnie zainstalowałem mysql-server-5.5(który najwyraźniej nie jest zainstalowany wraz z mysql-server-core-5.5), aby uzyskać resolveip. Podczas instalacji ponownie mysql-server-5.5dostałem Unable to set password for the MySQL "root" userbłąd, wracając do pierwszego!
dotancohen
@dotancohen zaktualizowana odpowiedź. Zależy to od tego, czy MySQL faktycznie nasłuchuje.
Craig Efrein
Dzięki. W rzeczywistości, mysqld_safeumiera od razu: 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

Mam tę linię w my.cnf

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

Myślę, że parametry my.cnf powinny używać łączników, a nie podkreślników.

Vérace
źródło
Dziękuję Ci. Masz rację, ja też miałem tę linię, choć jej nie zauważyłem. Teraz mysql nie chce się uruchomić, ale nic nie jest zapisywane w logach. Zaktualizuję pytanie.
dotancohen,
Wiem, że na Xubuntu (nie mogę znieść pulpitu Unity!) Miałem diabelski czas z takimi problemami. Teraz buduję ze źródła - jeśli jesteś zainteresowany, napiszę, jak to dokładnie zrobić . To, co robię, jest dostosowywane stąd po wielu próbach i błędach. To trochę więcej pracy niż sudo apt-get install xxx, ale przynajmniej wiem, gdzie są moje pliki i co zrobić, jeśli coś pójdzie nie tak!
Vérace
Dziękuję, jeśli nie będę w stanie tego zrobić, wypróbuję instrukcje, do których prowadzi link.
dotancohen
Cóż, to jest dla ludzi, którzy chcą skompilować i uruchomić mysql poprzez zaćmienie - dostosowałem go dla kogoś, kto po prostu chce normalnie uruchomić mysql. Dlaczego używasz 5.5?
Vérace
Właściwie wolałbym 5.6 i nie używam zaćmienia.
dotancohen