Không thể cấu hình cũng như không khởi động MySQL


11

Trên một bản cài đặt Kubfox 14.04 hoàn toàn mới, tôi đã chạy sudo aptitude install mysql-server-core-5.6. Việc cài đặt không thể hoàn tất do phụ thuộc vào một số gói KDE mysql-server-core-5.5, đã được thay thế. Bây giờ khi tôi chạy, sudo aptitude install mysql-server-5.5tôi gặp lỗi này sau khi chỉ định mật khẩu:

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.

Thực tế tôi đã đọc /usr/share/doc/mysql-server-5.5/README.Debiannhưng không có gì liên quan đến tình huống của tôi. Nhật ký MySQL giúp:

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

Tuy nhiên tôi không thể tìm thấy tập lệnh nào --explicit_defaults_for_timestampđược đặt. Tôi đã cố bắt đầu mysqlmà không servicetránh --explicit_defaults_for_timestamptùy chọn nhưng nó vẫn không bắt đầu:

$ 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ỗi cho tôi biết Remove all --log-error configuration options. Do đó tôi đã chỉnh sửa /etc/mysql/my.cnfvà nhận xét dòng sau:

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

Bây giờ tôi không nhận được lỗi nhưng vẫn không thể đăng nhập:

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

Điều gì có thể là vấn đề? Tôi nên tiến hành như thế nào?

BIÊN TẬP

Bây giờ tôi đã nhận xét ra explicit-defaults-for-timestampdòng trong my.cnf. Đây là toàn bộ tập tin, trừ bình luận tiêu đề:

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

Đây là những gì xảy ra khi tôi cố chạy 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

Có thể thấy, không có gì mới được ghi vào nhật ký và explicit_defaults_for_timestamptùy chọn không được đặt ở bất cứ đâu.

Tôi đã có thể cài đặt lại mysql-server-core-5.5nhưng điều đó không giải quyết được vấn đề:

$ 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

Điều đó 1trên dòng cuối cùng của nhật ký đã được thêm vào trước đó echovà cho biết rằng không có gì mới được thêm vào nhật ký.


Khi bạn chạy netstat -tlpn, bạn có thấy cổng 3306 cho MySQL không?
Craig Efrein

@CraigEfrein: Không, cổng 3306 không được lắng nghe. Tôi thậm chí khởi động lại hệ thống để xem liệu MySQL có khởi động được không, nhưng không được.
dotancohen

Và --explicit_defaults_for_timestamp, những nơi có thể tìm, nếu bạn chưa có. /etc/mysql/my.cnf, /etc/init.d/mysql và / etc / default / mysql
Craig Efrein

Cảm ơn bạn. Chuỗi chỉ timestampđược tìm thấy trong etc/mysql/my.cnfvà tôi đã phát hiện ra nó. Tuy nhiên, tôi vẫn nhận được cùng một đề cập đến nó trong nhật ký.
dotancohen

Có một my.cnf trong thư mục nhà của bạn?
Vérace

Câu trả lời:


4

Bạn đã cài đặt mysql-server-core-5.6, một phần bị lỗi hoặc cài đặt một phần.

Cái -explicit_defaults_for_timestampnày chỉ dành cho MySQL 5.6. Có khả năng cài đặt một phần của mysql-server-core-5.6tùy chọn này. Bây giờ tôi sẽ đề nghị bạn xóa mọi dấu vết mysql-server-core-5.6và sắp xếp lại thư mục dữ liệu.

  1. giết mọi tiến trình mysqld đang chạy:

    ps aux | grep mysql
    kill pid
  2. Gỡ cài đặt các mysql-server-core-5.6gói:

    apt-get remove mysql-server-core-5.6

    Một danh sách các tập tin ở đây

  3. Reinitialize thư mục cơ sở dữ liệu:

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

    B. mysql_install_db /var/lib/mysql

  4. Nhận xét các !includedir /etc/mysql/conf.d/tùy chọn trongmy.cnf


Giết mọi tiến trình MySQL hiện có và sau đó khởi động MySQL bằng skip-grant-tablestùy chọn.

A. Nhận đường dẫn chính xác của trình nền mysqld:

which mysqld_safe

B. Chạy MySQL mà không cần bảng cấp:

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

C. Hãy chắc chắn rằng mysql đang lắng nghe:

netstat -tlpn 

bạn sẽ thấy cổng 3306.

D. Nếu vậy, hãy đăng nhập vào MySQL:

mysql -u root -h 127.0.0.1

E. Đặt mật khẩu mới:

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

Cảm ơn bạn Craig. Tôi đã có thể cài đặt lại mysql-server-core-5.5nhưng điều đó không giải quyết được vấn đề. Tôi sẽ thêm nó vào câu hỏi.
dotancohen

@dotancohen, đã cập nhật câu trả lời của tôi
Craig Efrein

Cảm ơn bạn. Tôi đã loại bỏ hoàn toàn bất kỳ dấu vết 5,6, rm'ed cả /var/lib/mysql/var/log/mysql. Các mysql_install_dblệnh thất bại vì resolveipkhông được tìm thấy. Sau đó tôi đã cài đặt mysql-server-5.5(mà dường như không được cài đặt cùng với mysql-server-core-5.5) để có được resolveip. Trong quá trình cài đặt, mysql-server-5.5tôi đã nhận đượcUnable to set password for the MySQL "root" user gặp lỗi, quay lại ô vuông!
dotancohen

@dotancohen cập nhật câu trả lời. Điều này phụ thuộc vào việc MySQL có thực sự lắng nghe hay không.
Craig Efrein

Cảm ơn. Trong thực tế, mysqld_safechết ngay lập tức: 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

Tôi có dòng này trong my.cnf

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

Tôi nghĩ rằng các tham số my.cnf nên sử dụng dấu gạch nối và không gạch dưới.


Cảm ơn bạn. Bạn nói đúng, tôi cũng có dòng đó mặc dù tôi đã bỏ lỡ nó. Bây giờ, mysql sẽ không bắt đầu nhưng không có gì được ghi vào nhật ký. Tôi sẽ cập nhật câu hỏi.
dotancohen

Tôi biết rằng trên Xubfox (không thể đứng trên máy tính để bàn Unity!) Tôi đã gặp phải vấn đề như thế này. Bây giờ tôi xây dựng từ nguồn - nếu bạn quan tâm, tôi sẽ viết ra cách tôi làm chính xác . Những gì tôi làm được điều chỉnh từ đây sau nhiều thử nghiệm và sai sót. Nó hoạt động nhiều hơn một chút so với sudo apt-get install xxx, nhưng ít nhất tôi biết các tệp của mình ở đâu và phải làm gì nếu mọi thứ bắt đầu sai!
Vérace

Cảm ơn bạn, nếu tôi không thể vượt qua điều này thì tôi sẽ thử các hướng dẫn mà bạn liên kết đến.
dotancohen

Chà, đó là cho những người muốn biên dịch và chạy mysql thông qua nhật thực - Tôi đã điều chỉnh nó cho một người chỉ muốn chạy mysql bình thường. Tại sao bạn sử dụng 5.5?
Vérace

Trên thực tế, tôi thích 5.6 và tôi không sử dụng nhật thực.
dotancohen
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.