lower_case_table_names = 1 в Ubuntu 18.04 не позволяет запускать mysql

Я установил сервер сообщества mysql 8.013 на ubuntu 18.04, и у меня возникла следующая проблема. Я хочу установить lower_case_table_names = 1, чтобы имена таблиц в моей базе данных не учитывали регистр. Я отредактировал /etc/mysql/mysql.conf.d/mysqld.cnf и добавил следующую строку в [mysqld]

lower_case_table_names=1

mysqld.cnf теперь выглядит следующим образом

[mysqld]
pid-file        = /var/run/mysqld/mysqld.pid
socket          = /var/run/mysqld/mysqld.sock
datadir         = /var/lib/mysql
log-error       = /var/log/mysql/error.log
lower_case_table_names=1

Я остановил сервер mysql, используя

sudo service mysql stop

Затем я попытался запустить его снова, используя

sudo service mysql start

но я получаю следующую ошибку

Job for mysql.service failed because the control process exited with error code.
See "systemctl status mysql.service" and "journalctl -xe" for details.

Я пытался

systemctl status mysql.service

и я получил следующую информацию

christoph@christoph-Latitude-E6530:/etc/init.d$ systemctl status mysql.service
● mysql.service - MySQL Community Server
   Loaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset: enabled)
   Active: failed (Result: exit-code) since Thu 2018-11-01 16:38:14 EET; 24s ago
     Docs: man:mysqld(8)
           http://dev.mysql.com/doc/refman/en/using-systemd.html
  Process: 6681 ExecStart=/usr/sbin/mysqld (code=exited, status=1/FAILURE)
  Process: 6642 ExecStartPre=/usr/share/mysql-8.0/mysql-systemd-start pre (code=exited, status=0/SUCCESS)
 Main PID: 6681 (code=exited, status=1/FAILURE)
   Status: "SERVER_BOOTING"
    Error: 2 (No such file or directory)

Νοε 01 16:38:12 christoph-Latitude-E6530 systemd[1]: Starting MySQL Community Server...
Νοε 01 16:38:14 christoph-Latitude-E6530 systemd[1]: mysql.service: Main process exited, code=exited, status=1/FAILURE
Νοε 01 16:38:14 christoph-Latitude-E6530 systemd[1]: mysql.service: Failed with result 'exit-code'.
Νοε 01 16:38:14 christoph-Latitude-E6530 systemd[1]: Failed to start MySQL Community Server.

используя journalctl -xe, я получил следующую информацию

-- The result is RESULT.
Νοε 01 17:32:00 christoph-Latitude-E6530 sudo[2526]: pam_unix(sudo:session): session closed for user root
Νοε 01 17:32:04 christoph-Latitude-E6530 wpa_supplicant[743]: wlp3s0: WPA: Group rekeying completed with 4c:5e:0c:7a:95:cf [GTK=CCMP]
Νοε 01 17:32:08 christoph-Latitude-E6530 gnome-shell[1565]: Some code accessed the property 'discreteGpuAvailable' on the module 'appDisplay'. That property w
Νοε 01 17:32:08 christoph-Latitude-E6530 gnome-shell[1565]: Some code accessed the property 'WindowPreviewMenuItem' on the module 'windowPreview'. That proper
lines 1349-1371/1371 (END)
Νοε 01 17:31:58 christoph-Latitude-E6530 systemd[1]: Starting MySQL Community Server...
-- Subject: Unit mysql.service has begun start-up
-- Defined-By: systemd
-- Support: http://www.ubuntu.com/support
-- 
-- Unit mysql.service has begun starting up.
Νοε 01 17:31:58 christoph-Latitude-E6530 audit[2593]: AVC apparmor="STATUS" operation="profile_replace" info="same as current profile, skipping" profile="unconfined" name="/usr/sbin/mysqld" pid=2593 comm=
Νοε 01 17:31:58 christoph-Latitude-E6530 kernel: kauditd_printk_skb: 28 callbacks suppressed
Νοε 01 17:31:58 christoph-Latitude-E6530 kernel: audit: type=1400 audit(1541086318.959:39): apparmor="STATUS" operation="profile_replace" info="same as current profile, skipping" profile="unconfined" name
Νοε 01 17:32:00 christoph-Latitude-E6530 systemd[1]: mysql.service: Main process exited, code=exited, status=1/FAILURE
Νοε 01 17:32:00 christoph-Latitude-E6530 systemd[1]: mysql.service: Failed with result 'exit-code'.
Νοε 01 17:32:00 christoph-Latitude-E6530 systemd[1]: Failed to start MySQL Community Server.
-- Subject: Unit mysql.service has failed
-- Defined-By: systemd
-- Support: http://www.ubuntu.com/support
-- 
-- Unit mysql.service has failed.

Я также пытался запустить сервер, используя

sudo service mysql start --initialize lower_case_table_names=1

как описано здесь, lower_case_table_names Настройки в MySQL 8.0.12, но я все равно получаю ту же ошибку, и mysql вообще не запускается

Если я запустил следующее

sudo vi /var/log/mysql/error.log

Я получаю следующую причину ошибки

Different lower_case_table_names settings for server ('1') and data dictionary ('0').
Data Dictionary initialization failed.

Есть идеи, почему это происходит и как это исправить?


person Christoph Adamakis    schedule 01.11.2018    source источник
comment
Можете ли вы поставить пробелы по обе стороны от = в файле конфигурации, где вы объявляете lower_case_table_names   -  person Madhur Bhaiya    schedule 01.11.2018
comment
Нет, это не сработало. Если я использую lower_case_table_names = 2, он запускается, но с lower_case_table_names = 1 он никогда не запускается   -  person Christoph Adamakis    schedule 02.11.2018
comment
Возможно, чтение этой ссылки на документ может помочь: dev.mysql. com / doc / refman / 8.0 / en / В принципе, использование этой переменной как 1 не рекомендуется для чувствительных к регистру ОС.   -  person Madhur Bhaiya    schedule 02.11.2018
comment
Не рекомендуется устанавливать значение 1 для всех ОС.   -  person Christoph Adamakis    schedule 02.11.2018
comment
Это может быть ошибка в Mysql версии 8.0 bugs.mysql.com/bug.php?id = 90695   -  person Christoph Adamakis    schedule 05.11.2018
comment
Хм. Ребята из MySQL закрыли это как фичу .. facepalm   -  person Madhur Bhaiya    schedule 05.11.2018
comment
Согласно этому bugs.mysql.com/bug.php?id=90695 , ребята из Mysql предлагают запустить сервер, как этот sudo service mysql start --initialize lower_case_table_names = 1, но снова не удается !!!!!!!!!!!!!!!!!!!!   -  person Christoph Adamakis    schedule 05.11.2018
comment
Отвечает ли это на ваш вопрос? Параметры lower_case_table_names в MySQL 8.0.12   -  person Igor Mikushkin    schedule 23.01.2020


Ответы (5)


Чтобы это работало в MySQL 8.0 и Linux, выполните следующие действия.

  1. Сделайте резервную копию схемы mysql перед выполнением следующих шагов с использованием

    mysqldump -h localhost -u root -p mysql ›/home/username/dumps/mysqldump.sql

а затем остановите mysql, используя

sudo service mysql stop
  1. переместить или удалить каталог / var / lib / mysql. Это удалит все базы данных !!!!

    mv /var/lib/mysql /tmp/mysql
    
  2. Создайте новый каталог / var / lib / mysql и сделайте пользователя mysql владельцем

    mkdir /var/lib/mysql
    chown -R mysql:mysql /var/lib/mysql
    chmod 750 /var/lib/mysql
    
  3. отредактируйте /etc/mysql/mysql.conf.d/mysqld.cnf и добавьте следующую строку после

    [mysqld]
    
    lower_case_table_names=1
    
  4. Инициализируйте mysql, используя следующие

    mysqld --defaults-file=/etc/mysql/my.cnf --initialize lower_case_table_names=1 --user=mysql --console
    

Измените defaults-file на фактическое расположение вашего файла defaults. дополнительную информацию об инициализации mysql можно найти здесь: https://dev.mysql.com/doc/refman/8.0/en/data-directory-initialization-mysqld.html

  1. (Необязательно) Повторить

    chown -R mysql:mysql /var/lib/mysql
    chmod 750 /var/lib/mysql
    

если владелец файлов в / var / lib / mysql не mysql

  1. Запустите mysql, используя

    sudo service mysql start
    
  2. Если все работает правильно, откройте mysql, используя

    mysql -u root -p
    

и запустив этот запрос

SHOW VARIABLES where Variable_name like 'lower%';

ты получишь

'lower_case_table_names', '1'
  1. Восстановите схему mysql, используя дамп, созданный на шаге 0.

  2. Выполните mysql_upgrade, чтобы создать схему sys

person Christoph Adamakis    schedule 06.11.2018
comment
Я получаю эту ошибку, когда пытаюсь инициализировать mysqld: слишком много аргументов (первая дополнительная - 'lower_case_table_names = 1') (версия сервера: 8.0.17-0ubuntu2) - person dvlcube; 19.11.2019
comment
Догадаться. Пришлось инициализировать так: mysqld --defaults-file=/etc/mysql/my.cnf --initialize --user=mysql --lower_case_table_names=1 --console. Теперь это работает! - person dvlcube; 19.11.2019

Это сработало для меня при новой установке Ubuntu Server 20.04 с MySQL 8.0.20 (нет существующих баз данных, о которых нужно заботиться - поэтому, если у вас есть важные данные, вы должны сделать резервную копию / экспортировать их в другое место, прежде чем делать это):

Итак ... Я все сделал с повышенными правами:

sudo su

Установите MySQL (если он еще не установлен):

apt-get install mysql-server

Сделайте резервную копию файла конфигурации, удалите его, удалите все базы данных и данные, связанные с MySQL:

cp /etc/mysql/mysql.conf.d/mysqld.cnf /etc/mysql/mysql.conf.d/mysqld.cnf.backup
service mysql stop
apt-get --purge autoremove mysql-server
rm -R /var/lib/mysql

Восстановите сохраненный файл конфигурации, отредактируйте файл (добавьте строку сразу под строкой [mysqld]):

cp /etc/mysql/mysql.conf.d/mysqld.cnf.backup /etc/mysql/mysql.conf.d/mysqld.cnf
vim /etc/mysql/mysql.conf.d/mysqld.cnf

...
lower_case_table_names=1
...

Переустановите MySQL (сохраняя файл конфигурации), настройте дополнительные параметры:

apt-get install mysql-server
service mysql start
mysql_secure_installation
mysql

SHOW VARIABLES LIKE 'lower_case_%';
exit
person Florin Tintea    schedule 28.07.2020
comment
Отличный материал, большое спасибо - person Andrew; 06.01.2021
comment
Большое вам спасибо, это сработало для меня после того, как я потратил день на эту проблему. - person yibe; 10.01.2021
comment
Это действительно работает! - person tanaydin; 22.04.2021

Вам необходимо повторно установить каталог данных MySQL. Согласно https://dev.mysql.com/doc/refman/8.0/en/identifier-case-sensitivity.html lower_case_table_names можно настроить только при инициализации сервера.

Вы можете сделать это с помощью этого скрипта https://github.com/igrmk/ubuntu-reinit-mysql.

Обратите внимание, что ваши данные будут УНИЧТОЖЕНЫ! Так что перед запуском создайте резервную копию.

person Igor Mikushkin    schedule 21.11.2019

У меня тоже была такая же проблема.

Я отредактировал файл /etc/mysql/conf.d/mysql.cnf. (НЕ файл /etc/mysql/mysql.conf.d/mysqld.cnf.)

Я вставляю строку lower_case_table_names = 1 чуть ниже строки [mysqld]. (Не было никаких строк ниже строки [mysqld] ниже.

Затем я перезапустил mysql, используя sudo service mysql restart

Это решило мою проблему.

person Buddhika Ariyaratne    schedule 20.04.2020

Пожалуйста, перейдите в указанное ниже место и добавьте следующий код

расположение - cd /etc/mysql/mysql.conf.d/

затем sudo vim mysqld.cnf

затем добавьте ниже под [mysqld]

lower_case_table_names=1
person Rajitha Bhanuka    schedule 28.10.2020
comment
это не работает в Linux. - person tanaydin; 22.04.2021