Неможливо створити файл /var/lib/mysql/user.lower-test


12

База даних MySQL протягом кількох місяців була без проблем. Сьогодні, коли я перевірив наявність оновлених пакунків за допомогою диспетчера пакунків Synaptic, у мене з’явилися різні компоненти MySQL (-сполучення, -кліент, -сервер тощо). Тому я вирішив оновити (я забув відзначити встановлену версію, але думаю, що це було 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

Я витратив годину або близько на пошуки в режимі он-лайн, і хоча про проблему повідомлялося раніше, я не бачив її в контексті випуску "після оновлення", настільки не впевнений у своєму наступному кроці.

Відповіді:


6

Ця проблема, здається, дозволяє вирішити проблеми з дозволом або змінити каталогі даних mysql на інше місце / тоді / var / lib / mysql.

Спробуйте побігти з судо

Схоже, / 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. Можливо, вам доведеться виконувати наступні дії:

/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 нічого не може сказати. це може бути пришвидшення або корупція пакету 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

6

Я зіткнувся з цією проблемою, намагаючись запустити кілька екземплярів 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 / в мої системи / тощо.

Роблячи це, я створив бак для файлу usr.sbin.mysqld під назвою usr.sbin.mysqld.bak і зберігав його в тому ж /etc/apparmor.d/ каталозі.

Після подальшого пошуку я знайшов цю публікацію в блозі: https://blogs.oracle.com/jsmyth/apparmor-and-mysql

Встановив apparmor-утиліти і спробував поскаржитися на / usr / sbin / mysqld, і він сказав, що у мене визначено 2 конфігурації apparmor (обидва мої файли).

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


0

Також перевірте, чи ваш розділ не заповнений, що було моїм випадком.

З незрозумілої причини переміщення даних на інший розділ також не вийшло.

Тож для швидкого виправлення замість того, щоб возитися з llvm чи gparted, я зменшив /swapfileрозмір.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.