ไม่สามารถกำหนดค่าหรือเริ่มต้น MySQL


11

ฉันติดตั้ง Kubuntu 14.04 ใหม่เอี่ยมsudo aptitude install mysql-server-core-5.6แล้ว การติดตั้งไม่สมบูรณ์เนื่องจากการขึ้นต่อกันของแพ็คเกจ KDE บางตัวmysql-server-core-5.5ซึ่งจะถูกแทนที่ ตอนนี้เมื่อฉันเรียกใช้sudo aptitude install mysql-server-5.5ฉันได้รับข้อผิดพลาดนี้หลังจากระบุรหัสผ่าน:

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.

อันที่จริงฉันอ่านแล้ว/usr/share/doc/mysql-server-5.5/README.Debianแต่ไม่มีอะไรเกี่ยวข้องกับสถานการณ์ของฉัน บันทึก MySQL ช่วย:

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

อย่างไรก็ตามฉันไม่พบสคริปต์ที่--explicit_defaults_for_timestampตั้งค่าตัวเลือก ฉันพยายามเริ่มmysqlโดยไม่serviceหลีกเลี่ยง--explicit_defaults_for_timestampตัวเลือก แต่ก็ยังไม่เริ่ม:

$ 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

Remove all --log-error configuration optionsข้อผิดพลาดที่บอกให้ผม ฉันจึงแก้ไข/etc/mysql/my.cnfและแสดงความคิดเห็นในบรรทัดต่อไปนี้:

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

ตอนนี้ฉันไม่มีข้อผิดพลาด แต่ยังไม่สามารถเข้าสู่ระบบได้:

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

อาจมีปัญหาอะไร? ฉันควรดำเนินการอย่างไร

แก้ไข

ผมได้แสดงความคิดเห็นในขณะนี้ออกมาในแนวexplicit-defaults-for-timestamp my.cnfนี่คือไฟล์ทั้งหมด, ลบความเห็นส่วนหัว:

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

นี่คือสิ่งที่เกิดขึ้นเมื่อฉันพยายามเรียกใช้ 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

จะเห็นได้ว่าไม่มีอะไรใหม่เขียนลงในบันทึกและexplicit_defaults_for_timestampตัวเลือกไม่ได้ถูกตั้งค่าไว้ที่ใด

ฉันสามารถติดตั้งใหม่mysql-server-core-5.5แต่ไม่สามารถแก้ไขปัญหาได้:

$ 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

ที่1บนบรรทัดสุดท้ายของบันทึกถูกเพิ่มไว้ก่อนหน้าด้วยechoและบ่งชี้ว่าไม่มีอะไรใหม่ถูกเพิ่มเข้าสู่บันทึก


เมื่อคุณรัน netstat -tlpn คุณเห็นพอร์ต 3306 สำหรับ MySQL หรือไม่
Craig Efrein

@CraigEfrein: ไม่พอร์ต 3306 ไม่ถูกฟัง ฉันยังรีสตาร์ทระบบเพื่อดูว่า MySQL จะเริ่มบูทหรือไม่
dotancohen

และ --explicit_defaults_for_timestamp สถานที่ที่เป็นไปได้หากคุณยังไม่ได้ /etc/mysql/my.cnf, /etc/init.d/mysql และ / etc / default / mysql
Craig Efrein

ขอขอบคุณ. พบสตริงtimestampเท่านั้นetc/mysql/my.cnfและฉันก็ออกมา แต่ฉันยังคงได้รับการกล่าวถึงในบันทึก
dotancohen

มี my.cnf ในโฮมไดเร็กตอรี่ของคุณหรือไม่?
Vérace

คำตอบ:


4

คุณติดตั้งmysql-server-core-5.6ซึ่งล้มเหลวบางส่วนหรือติดตั้งบางส่วน

-explicit_defaults_for_timestampเป็นเพียงสำหรับ MySQL 5.6 มันอาจเป็นไปได้ว่าการติดตั้งบางส่วนของmysql-server-core-5.6เพิ่มตัวเลือกนี้ ฉันจะแนะนำทันทีที่คุณลบการติดตามmysql-server-core-5.6และกำหนดค่าเริ่มต้นไดเรกทอรีข้อมูลใหม่

  1. ฆ่ากระบวนการ mysqld ที่รันอยู่:

    ps aux | grep mysql
    kill pid
  2. ถอนการติดตั้งmysql-server-core-5.6แพ็คเกจ:

    apt-get remove mysql-server-core-5.6

    รายการไฟล์อยู่ที่นี่

  3. กำหนดค่าเริ่มต้นให้กับไดเร็กทอรีฐานข้อมูลอีกครั้ง:

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

    บี mysql_install_db /var/lib/mysql

  4. ใส่ความคิดเห็น!includedir /etc/mysql/conf.d/ตัวเลือกในmy.cnf


ฆ่ากระบวนการ MySQL ที่มีอยู่แล้วเริ่ม MySQL โดยใช้skip-grant-tablesตัวเลือก

A. รับพา ธ ที่แน่นอนของ mysqld daemon:

which mysqld_safe

B. เรียกใช้ MySQL โดยไม่มีตารางให้สิทธิ์:

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

C. ตรวจสอบให้แน่ใจว่า mysql กำลังฟัง:

netstat -tlpn 

คุณควรเห็นพอร์ต 3306

D. ถ้าใช่ให้ล็อกอินเข้าสู่ MySQL:

mysql -u root -h 127.0.0.1

E. ตั้งรหัสผ่านใหม่:

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

ขอบคุณเครก ฉันสามารถติดตั้งใหม่mysql-server-core-5.5แต่ไม่สามารถแก้ไขปัญหาได้ ฉันจะเพิ่มเข้าไปในคำถาม
dotancohen

@dancancohen อัปเดตคำตอบของฉัน
Craig Efrein

ขอขอบคุณ. ฉันสมบูรณ์ลบออกร่องรอยของ 5.6 ใด ๆ rm'ed ทั้งสองและ/var/lib/mysql คำสั่งล้มเหลวเนื่องจากไม่พบ ฉันแล้วติดตั้ง(ซึ่งเห็นได้ชัดว่าไม่ได้ติดตั้งพร้อมด้วย) ที่จะได้รับ ในระหว่างการติดตั้งฉันพบข้อผิดพลาดอีกครั้งให้กลับไปที่ช่องสี่เหลี่ยมหนึ่งช่อง! /var/log/mysqlmysql_install_dbresolveipmysql-server-5.5mysql-server-core-5.5resolveipmysql-server-5.5Unable to set password for the MySQL "root" user
dotancohen

@dotancohen คำตอบที่อัปเดตแล้ว ขึ้นอยู่กับว่า MySQL กำลังฟังอยู่หรือไม่
Craig Efrein

ขอบคุณ ในความเป็นจริงจะตายในทันทีmysqld_safe , , 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/mysql140818 16:52:54 mysqld_safe mysqld from pid file /var/run/mysqld/mysqld.pid ended
dotancohen

1

ฉันมีบรรทัดนี้ใน my.cnf

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

ฉันคิดว่าพารามิเตอร์ my.cnf ควรใช้เครื่องหมายขีดกลางและไม่ใช่เครื่องหมายขีดล่าง


ขอขอบคุณ. คุณพูดถูกฉันมีบรรทัดนั้นด้วยแม้ว่าฉันจะพลาดก็ตาม ตอนนี้ mysql จะไม่เริ่มทำงาน แต่ไม่มีการเขียนลงในบันทึก ฉันจะอัปเดตคำถาม
dotancohen

ฉันรู้ว่าใน Xubuntu (ไม่สามารถยืนบนเดสก์ท็อป Unity ได้!) ฉันมีปีศาจครั้งหนึ่งที่มีปัญหาเช่นนี้ ตอนนี้ผมสร้างจากแหล่ง - ถ้าคุณสนใจผมจะเขียนออกวิธีที่ผมทำมันตรง สิ่งที่ฉันทำถูกดัดแปลงจากที่นี่หลังจากลองผิดลองถูกมาก มันทำงานได้ดีกว่า sudo apt-get install xxx แต่อย่างน้อยฉันก็รู้ว่าไฟล์ของฉันอยู่ที่ไหนและจะทำอย่างไรถ้าสิ่งต่าง ๆ เริ่มผิดพลาด!
Vérace

ขอบคุณหากฉันไม่สามารถทำสิ่งนี้ได้ฉันจะลองทำตามคำแนะนำที่คุณเชื่อมโยงไป
dotancohen

สำหรับผู้ที่ต้องการคอมไพล์และรัน mysql ผ่าน eclipse - ฉันได้ปรับมันสำหรับคนที่ต้องการรัน mysql ตามปกติ ทำไมคุณใช้ 5.5?
Vérace

ที่จริงแล้วฉันต้องการ 5.6 และฉันไม่ได้ใช้ eclipse
dotancohen
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.