Неможливо налаштувати або запустити 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)

Що може бути проблемою? Як слід діяти?

EDIT

Зараз я прокоментував 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?
Крейг Ефрейн

@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 Process, а потім запустіть MySQL за допомогою skip-grant-tablesпараметра.

А. Отримайте точний шлях демона mysqld:

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

@dotancohen, оновив мою відповідь
Craig Efrein

Дякую. Я повністю видалив будь-який слід 5,6, rm'ed і те, /var/lib/mysqlі /var/log/mysql. mysql_install_dbКоманда зазнала невдачі , тому що resolveipбула знайдена. Потім я встановив mysql-server-5.5(який, мабуть, не встановлений разом mysql-server-core-5.5), щоб отримати resolveip. Під час встановлення mysql-server-5.5я Unable to set password for the MySQL "root" userзнову отримав помилку, повернувшись до прямої!
dotancohen

@dotancohen оновлена ​​відповідь. Це залежить від того, чи насправді слухає MySQL.
Крейг Ефрейн

Спасибі. Насправді, 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/mysql, 140818 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 і не користуюся затемненням.
dotancohen
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.