Не могу создать файл /var/lib/mysql/user.lower-test

11

База данных MySQL была без проблем в течение нескольких месяцев. Сегодня, когда я проверял наличие обновляемых пакетов с помощью Synaptic Package Manager, он обнаружил различные компоненты MySQL (-common, -client, -server и т. Д.). Поэтому я решил обновить (забыл отметить установленную версию, но думаю, что это 5.6.21) до 5.6.25-1-ubuntu2.0. После этого, когда я отправил запрос к базе данных, я получил сообщение: -

Error occured: Can't connect to MySQL server on '127.0.0.1' (111)

Затем я обнаружил, что сервер не работает. В лог-файле я обнаружил, что сообщение: -

Can't create file /var/lib/mysql/user.lower-test

Я потратил около часа на поиск в сети, и, хотя о проблеме уже сообщалось ранее, я не видел ее в контексте проблемы после обновления, поэтому не уверен в своем следующем шаге.

MichaelJohn
источник

Ответы:

6

Эта проблема, по-видимому, приводит к проблемам с правами доступа или изменяет каталог данных mysql в другое место, чем / var / lib / mysql.

Попробуй запустить с sudo

Похоже, что / var / lib / mysql принадлежит пользователю mysql, и для группы также установлено значение mysql.

$ sudo chown -R mysql /var/lib/mysql
$ sudo chgrp -R mysql /var/lib/mysql
$ sudo chmod 755 /var/lib/mysql

Вы проверили, что каталог / var / lib / mysql действительно существует и соответствует вашему каталогу данных? Если это не так, то вы, вероятно, должны указать другой параметр datadir в разделе mysqld.

[mysqld]
datadir=/var/lib/mysql

Затем вы можете выбрать между настройкой apparmor, чтобы разрешить MySQL читать \ выполнять \ изменять новый каталог данных и подкаталоги или, на свой страх и риск, вы можете удалить apparmor. Вам может потребоваться быть пользователем root для выполнения следующих действий:

/etc/init.d/apparmor stop
/etc/init.d/apparmor teardown
update-rc.d -f apparmor remove
apt-get purge apparmor
reboot
Хитеш Мундра
источник
Я прошел через все это, но безрезультатно. Имея резервные копии, я решил переустановить, и все работает, если у меня возникла проблема. Но это проблема Linux или MySQL ...
MichaelJohn
@MichaelJohn не может ничего сказать. это может быть AppArmor или MySQL пакет коррупции
Hitesh Mundra
В Ubuntu Xenial: apparmorавтоматически устанавливается и включается при установке mysql-server-5.6. Даже если вы ранее отключили его. Вы не можете удалить apparmorпакет, потому что это зависимость mysql-server-5.6. Вы можете решить ошибку «Не удается создать файл /var/lib/mysql/user.lower-test», выполнивservice apparmor stop; service apparmor teardown; update-rc.d -f apparmor remove
Jeroen Vermeulen - MageHost
5

Я столкнулся с этой проблемой при попытке запустить несколько экземпляров MySQL, но вместо удаления apparmor я обновил файл usr.sbin.mysqld:

vim /etc/apparmor.d/usr.sbin.mysqld

Например, так выглядит мой файл, и как только я добавил папки, для которых нужны разрешения на запись, все заработало как надо.

/usr/sbin/mysqld {

  capability dac_override,
  capability sys_resource,
  capability setgid,
  capability setuid,

  network tcp,

  /etc/hosts.allow r,
  /etc/hosts.deny r,

  /etc/mysql/*.pem r,
  /etc/mysql/conf.d/ r,
  /etc/mysql/conf.d/* r,
  /etc/mysql/*.cnf r,
  /usr/lib/mysql/plugin/ r,
  /usr/lib/mysql/plugin/*.so* mr,
  /usr/sbin/mysqld mr,
  /usr/share/mysql/** r,
  /var/log/mysql.log rw,
  /var/log/mysql.err rw,
  /var/lib/mysql/ r,
  /var/lib/mysql/** rwk,
  /var/lib/mysql1/ r,
  /var/lib/mysql1/** rwk,
  /var/log/mysql/ r,
  /var/log/mysql/* rw,
  /var/run/mysqld/mysqld.pid rw,
  /var/run/mysqld/mysqld.sock w,
  /var/run/mysqld/mysqld1.pid rw,
  /var/run/mysqld/mysqld1.sock w,
  /run/mysqld/mysqld.pid rw,
  /run/mysqld/mysqld.sock w,

  /sys/devices/system/cpu/ r,

}
Джубаир
источник
1
Это сработало и для меня. Мне пришлось перезапустить сервер, чтобы заставить это работать - просто остановка и перезапуск AppArmour не работали.
MikeHoss
3

Эта проблема произошла со мной, когда я попытался переместить / var / lib / mysql на другой диск и заменить исходный каталог символической ссылкой.

Apparmor запретит доступ в этой конфигурации, см.

почему это не считается ошибкой разработчиков Apparmor. Обходной путь должен использовать крепление связывания. Видеть

для объяснения.

Так

mount --bind /newmysqldatadir /var/lib/mysql
service mysql start

исправил проблему для меня.

Вольфганг Фаль
источник
1

У меня была аналогичная проблема. Я переустановил Ubuntu Server на своем компьютере, сделал полную резервную копию / etc / на жестком диске, после переустановки я сделал копию всех важных файлов из / drive / etc / в мои системы / etc.

При этом я создал bak для файла usr.sbin.mysqld с именем usr.sbin.mysqld.bak и сохранил его в том же каталоге /etc/apparmor.d/.

После дальнейшего поиска я нашел это сообщение в блоге: https://blogs.oracle.com/jsmyth/apparmor-and-mysql

Установил apparmor-utils и попытался отправить жалобу в / usr / sbin / mysqld, и он сказал, что у меня определены 2 конфигурации apparmor (оба моих файла).

Я знаю, что это может быть не та проблема, с которой вы сталкиваетесь, но просто для ясности, не будьте настолько глупы, как я, создавая резервную копию файла в том же каталоге каталога apparmor sbin.

Раду Галан
источник
0

Также проверьте, не заполнен ли ваш раздел, как было в моем случае.

По неизвестной причине перемещение данных в другой раздел также не сработало.

Поэтому для быстрого исправления, вместо того, чтобы возиться с llvm или gparted, я уменьшил свой /swapfileразмер.

Дайси
источник