Impossibile configurare né avviare MySQL


11

Ho eseguito una nuova installazione di Kubuntu 14.04 sudo aptitude install mysql-server-core-5.6. Impossibile completare l'installazione a causa delle dipendenze di alcuni pacchetti di KDE mysql-server-core-5.5, che sarebbero stati sostituiti. Ora quando corro sudo aptitude install mysql-server-5.5ottengo questo errore dopo aver specificato una password:

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.

In effetti ho letto /usr/share/doc/mysql-server-5.5/README.Debianma non c'era nulla di rilevante per la mia situazione. Il registro MySQL aiuta:

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

Tuttavia, non riesco a trovare in quale script --explicit_defaults_for_timestampè impostata l' opzione. Ho provato a iniziare mysqlsenza serviceper evitare l' --explicit_defaults_for_timestampopzione ma ancora non si avvia:

$ 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

L'errore mi dice di Remove all --log-error configuration options. Ho quindi modificato /etc/mysql/my.cnfe commentato la seguente riga:

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

Ora non ricevo errori ma non riesco ancora ad accedere:

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

Quale potrebbe essere il problema? Come devo procedere?

MODIFICARE

Ora ho commentato la explicit-defaults-for-timestampriga in my.cnf. Ecco l'intero file, meno i commenti dell'intestazione:

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

Questo è ciò che accade quando provo a eseguire 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

Come si può vedere, nei log non viene scritto nulla di nuovo e l' explicit_defaults_for_timestampopzione non è impostata da nessuna parte.

Sono stato in grado di reinstallare mysql-server-core-5.5ma questo non ha risolto il 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

Quello 1sull'ultima riga del registro è stato aggiunto in precedenza con echoe indica che non è stato aggiunto nulla di nuovo al registro.


quando esegui netstat -tlpn, vedi la porta 3306 per MySQL?
— Craig Efrein,

@CraigEfrein: No, la porta 3306 non viene ascoltata. Ho anche riavviato il sistema per vedere se MySQL si sarebbe avviato all'avvio, ma non è stato così.
— dotancohen,

E il --explicit_defaults_for_timestamp, possibili posti da cercare, se non l'hai già fatto. /etc/mysql/my.cnf, /etc/init.d/mysql e / etc / default / mysql
— Craig Efrein,

Grazie. La stringa è timestampstata trovata solo in etc/mysql/my.cnfe l'ho commentata. Tuttavia, ho ancora la stessa menzione nel registro.
— dotancohen,

C'è un my.cnf nella tua home directory?
— Vérace,

Risposte:


4

Hai installato mysql-server-core-5.6, che parzialmente fallito o parzialmente installato.

L' -explicit_defaults_for_timestampè solo per MySQL 5.6. È probabile che l'installazione parziale di abbia mysql-server-core-5.6aggiunto questa opzione. Ho intenzione di suggerire ora di rimuovere qualsiasi traccia mysql-server-core-5.6e reinizializzare la directory dei dati.

  1. uccidere tutti i processi mysqld in esecuzione:

    ps aux | grep mysql
    kill pid
  2. Disinstallare i mysql-server-core-5.6pacchetti:

    apt-get remove mysql-server-core-5.6

    Un elenco di file è qui

  3. Reinizializza la directory del database:

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

    B. mysql_install_db /var/lib/mysql

  4. Commenta l' !includedir /etc/mysql/conf.d/opzione inmy.cnf


Uccidi qualsiasi processo MySQL esistente e quindi avvia MySQL usando l' skip-grant-tablesopzione.

A. Ottieni il percorso esatto del demone mysqld:

which mysqld_safe

B. Esegui MySQL senza tabelle di concessione:

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

C.Assicurati che mysql stia ascoltando:

netstat -tlpn 

dovresti vedere la porta 3306.

D. In tal caso, accedi a MySQL:

mysql -u root -h 127.0.0.1

E. Imposta nuova password:

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

Grazie Craig. Sono stato in grado di reinstallare mysql-server-core-5.5ma questo non ha risolto il problema. Lo aggiungerò alla domanda.
— dotancohen,

@dotancohen, ho aggiornato la mia risposta
— Craig Efrein,

Grazie. Ho rimosso completamente ogni traccia di 5.6, ho scritto sia /var/lib/mysqle /var/log/mysql. Il mysql_install_dbcomando non resolveipè riuscito perché non è stato trovato. Ho quindi installato mysql-server-5.5(che a quanto pare non è installato insieme mysql-server-core-5.5) per ottenere resolveip. Durante l'installazione di mysql-server-5.5ho ricevuto di Unable to set password for the MySQL "root" usernuovo l' errore, tornando al punto di partenza!
— dotancohen,

@dotancohen risposta aggiornata. Questo dipende dal fatto che MySQL stia effettivamente ascoltando.
— Craig Efrein,

Grazie. In realtà, mysqld_safemuore subito: 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

Ho questa linea in my.cnf

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

Penso che i parametri my.cnf dovrebbero usare trattini e non trattini bassi.


Grazie. Hai ragione, avevo anche quella linea, anche se mi mancava. Ora mysql non si avvia ma non viene scritto nulla nei registri. Aggiornerò la domanda.
— dotancohen,

So che su Xubuntu (non sopporto il desktop Unity!) Ho avuto il diavolo di una volta con problemi come questo. Ora costruisco dalla fonte - se sei interessato, scriverò come lo faccio esattamente . Quello che faccio è adattato da qui dopo molte prove ed errori. È un po 'più lavoro di sudo apt-get install xxx, ma almeno so dove sono i miei file e cosa devo fare se le cose iniziano a andare male!
— Vérace,

Grazie, se non riesco a superare questo, proverò le istruzioni a cui ti colleghi.
— dotancohen,

Bene, questo è per le persone che vogliono compilare ed eseguire mysql tramite eclipse - l'ho adattato per qualcuno che vuole semplicemente eseguire mysql normalmente. Perché stai usando 5.5?
— Vérace,

In realtà, preferirei 5.6 e non uso eclissi.
— dotancohen,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.