Tidak dapat mengkonfigurasi atau memulai MySQL

11

Pada instalasi Kubuntu 14.04 yang baru, saya berlari sudo aptitude install mysql-server-core-5.6. Instalasi tidak dapat diselesaikan karena dependensi dari beberapa paket KDE aktif mysql-server-core-5.5, yang akan diganti. Sekarang ketika saya menjalankan sudo aptitude install mysql-server-5.5saya mendapatkan kesalahan ini setelah menentukan kata sandi:

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.

Sebenarnya saya sudah membaca /usr/share/doc/mysql-server-5.5/README.Debiantetapi tidak ada yang relevan dengan situasi saya. Log MySQL membantu:

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

Namun saya tidak dapat menemukan di mana skrip --explicit_defaults_for_timestampopsi diset. Saya mencoba memulai mysqltanpa servicemenghindari --explicit_defaults_for_timestampopsi tetapi tetap tidak mau mulai:

$ 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

Kesalahan memberitahu saya untuk Remove all --log-error configuration options. Karena itu saya mengedit /etc/mysql/my.cnfdan berkomentar sebagai berikut:

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

Sekarang saya tidak mendapatkan kesalahan tetapi masih tidak bisa masuk:

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

Apa masalahnya? bagaimana saya harus melanjutkan?

EDIT

Saya sekarang telah berkomentar di explicit-defaults-for-timestampbaris my.cnf. Inilah seluruh file, minus komentar tajuk:

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

Inilah yang terjadi ketika saya mencoba menjalankan 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

Seperti dapat dilihat, tidak ada yang baru yang ditulis pada log, dan explicit_defaults_for_timestampopsi tidak disetel di mana pun.

Saya dapat menginstal ulang mysql-server-core-5.5tetapi itu tidak menyelesaikan masalah:

$ 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

Bahwa 1pada baris terakhir dari log ditambahkan sebelumnya dengan echo, dan menunjukkan bahwa tidak ada yang baru ditambahkan ke log.

dotancohen
sumber
ketika Anda menjalankan netstat -tlpn, apakah Anda melihat port 3306 untuk MySQL?
Craig Efrein
@CraigEfrein: Tidak, port 3306 tidak didengarkan. Saya bahkan me-restart sistem untuk melihat apakah MySQL akan mulai saat boot, tetapi tidak.
dotancohen
Dan --explicit_defaults_for_timestamp, kemungkinan tempat untuk dilihat, jika Anda belum melakukannya. /etc/mysql/my.cnf, /etc/init.d/mysql dan / etc / default / mysql
Craig Efrein
Terima kasih. Tali timestamphanya ditemukan di etc/mysql/my.cnfdan saya sudah membuatnya keluar. Namun, saya masih mendapatkan penyebutan yang sama di log.
dotancohen
Apakah ada my.cnf di direktori home Anda?
Vérace

Jawaban:

4

Anda menginstal mysql-server-core-5.6, yang gagal sebagian atau diinstal sebagian.

The -explicit_defaults_for_timestamphanya untuk MySQL 5.6. Kemungkinan instalasi parsial mysql-server-core-5.6menambahkan opsi ini. Saya akan menyarankan sekarang bahwa Anda menghapus jejak mysql-server-core-5.6dan menginisialisasi ulang direktori data.

  1. bunuh proses mysqld yang sedang berjalan:

    ps aux | grep mysql
    kill pid
  2. Copot mysql-server-core-5.6paket - paket:

    apt-get remove mysql-server-core-5.6

    Daftar file ada di sini

  3. Inisialisasi ulang direktori basis data:

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

    B. mysql_install_db /var/lib/mysql

  4. Berikan komentar pada !includedir /etc/mysql/conf.d/opsi dimy.cnf


Bunuh semua Proses MySQL yang ada dan kemudian mulai MySQL menggunakan skip-grant-tablesopsi.

A. Dapatkan jalur yang tepat dari daemon mysqld:

which mysqld_safe

B. Jalankan MySQL tanpa tabel hibah:

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

C. Pastikan mysql mendengarkan:

netstat -tlpn 

Anda akan melihat port 3306.

D. Jika demikian, masuk ke MySQL:

mysql -u root -h 127.0.0.1

E. Tetapkan kata sandi baru:

mysql> use mysql;
mysql> update user set password=PASSWORD("NEW-ROOT-PASSWORD") where User='root';
mysql> flush privileges;
mysql> quit
Craig Efrein
sumber
Craig terima kasih. Saya dapat menginstal ulang mysql-server-core-5.5tetapi itu tidak menyelesaikan masalah. Saya akan menambahkan itu ke pertanyaan.
dotancohen
@dotancohen, perbarui jawaban saya
Craig Efrein
Terima kasih. Saya benar-benar menghapus jejak 5.6, rm'ed keduanya /var/lib/mysqldan /var/log/mysql. The mysql_install_dbperintah gagal karena resolveiptidak ditemukan. Saya kemudian menginstal mysql-server-5.5(yang tampaknya tidak diinstal bersama dengan mysql-server-core-5.5) untuk mendapatkan resolveip. Selama instalasi mysql-server-5.5saya mendapatkan Unable to set password for the MySQL "root" userkesalahan lagi, kembali ke awal!
dotancohen
@dotancohen memperbarui jawaban. Ini tergantung pada apakah MySQL benar-benar mendengarkan atau tidak.
Craig Efrein
Terima kasih. Bahkan, mysqld_safemeninggal segera: 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

Saya memiliki baris ini di my.cnf

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

Saya pikir parameter my.cnf harus menggunakan tanda hubung dan bukan garis bawah.

Vérace
sumber
Terima kasih. Anda benar, saya juga memiliki kalimat itu meskipun saya melewatkannya. Sekarang, mysql tidak akan mulai tetapi tidak ada yang ditulis ke log. Saya akan memperbarui pertanyaan.
dotancohen
Saya tahu bahwa di Xubuntu (tidak tahan desktop Unity!) Saya punya waktu dengan masalah seperti ini. Sekarang saya membangun dari sumber - jika Anda tertarik, saya akan menulis bagaimana saya melakukannya dengan tepat . Apa yang saya lakukan diadaptasi dari sini setelah banyak coba-coba. Ini sedikit lebih berfungsi daripada sudo apt-get install xxx, tapi setidaknya saya tahu di mana file saya dan apa yang harus dilakukan jika ada yang salah!
Vérace
Terima kasih, jika saya tidak bisa melewati ini maka saya akan mencoba instruksi yang Anda tautkan.
dotancohen
Ya, itu untuk orang-orang yang ingin mengkompilasi dan menjalankan mysql melalui gerhana - Saya telah mengadaptasinya untuk seseorang yang hanya ingin menjalankan mysql secara normal. Mengapa Anda menggunakan 5.5?
Vérace
Sebenarnya, saya lebih suka 5.6 dan saya tidak menggunakan gerhana.
dotancohen