MariaDB не может запуститься после обновления: [Предупреждение] Невозможно создать тестовый файл /home/mysql/beta.lower-test

Я только что обновил MariaDB с помощью apt-get dist-upgrade. Теперь он больше не будет использовать service mysql start.

Однако я могу запустить его как root или выполнить: sudo -u mysql mysqld_safe, после чего MariaDB запустится нормально. Папка /home/mysql принадлежит пользователю и группе mysql.

Я обнаружил ошибку, которая возникает в этой функции: //github.com/MariaDB/сервер/blob/7ff44b1a832b005264994cbdfc52f93f69b92cdc/sql/mysqld.cc#L9865

Я не могу понять, что делать дальше. Любые указатели?


person Bento    schedule 22.07.2016    source источник
comment
Просто верните вашу систему баз данных к предыдущей версии... или создайте резервную копию ваших баз данных (mysqldump), удалите все следы MariaDB, а затем установите последнюю версию с нуля :)   -  person Hackerman    schedule 22.07.2016
comment
Да очень не хочется этого делать. Должен быть более простой способ.   -  person Bento    schedule 23.07.2016
comment
@BentodeGier, ты решил проблему? у меня такая ошибка только после обновления   -  person RedGiant    schedule 27.07.2016


Ответы (7)


Чтобы запустить MariaDB SQL из /home, в файле /usr/lib/systemd/system/mariadb.service или /lib/systemd/system/mariadb.service просто измените:

ProtectHome=true

to :

ProtectHome=false
person Thomas    schedule 09.01.2017
comment
в Ubuntu 17.04 файл, похоже, переместился сюда /lib/systemd/system/ - person wuppi; 18.04.2017
comment
это, кажется, сбрасывается несколько раз. любая идея, чтобы предотвратить это? - person wuppi; 06.08.2017
comment
Для Debian 9 файл находится в /etc/systemd/system/multi-user.target.wants/mariadb.service. А потом перед запуском службы надо запустить systemctl daemon-reload - person user1077915; 29.10.2017
comment
Это, видимо, больше не работает. Mariadb только что обновился сегодня утром и полностью игнорирует ProtectHome=false. - person Jestep; 07.02.2018

Ответ Томаса правильный, но обновляется каждые несколько месяцев. Итак, вот постоянное решение:

Используйте systemctl edit mariadb, чтобы создать файл, перезаписывающий настройки службы mariadb по умолчанию. (В Debian он находится в /etc/systemd/system/mariadb.service.d/override.conf)

Установите тот же параметр, который Томас изменил в файле:

[Service]
ProtectHome=false

Используйте systemctl daemon-reload для перезагрузки конфигурации systemctl.

person zuim    schedule 18.11.2019
comment
Этот ответ работает в Ubuntu 18.04 и является подходом, рекомендованным Mariadb. См. mariadb.com/kb/en/library/ systemd/ О других вещах, которые могут вызвать проблемы (например, у меня также отсутствовал флаг выполнения в родительском каталоге), см. mariadb.com/kb/en/library/what-to-do-if-mariadb- не запускается/ - person Giles B; 18.11.2019
comment
Работает как шарм! - person xangr; 21.01.2020

В Debian 9 вам нужно изменить ProtectHome на false как в /lib/systemd/system/mariadb.service , так и в /lib/systemd/system/[email protected], а затем запустить sudo systemctl daemon-reload.

Возможно, также запустите sudo grep -Ri "protecthome" /lib/systemd/system, чтобы найти другие экземпляры ProtectHome в файлах, связанных с mysql, если это все еще не работает.

person Neo    schedule 10.01.2019
comment
Работал и для openuse перекати-поле, /usr/lib/systemd/... а также mariadb.service и mysql.service имеют символические ссылки, [email protected] и [email protected] аналогично. - person MaKR; 16.03.2020

Обходным путем для этого является монтирование каталога дома как /var/lib/mysql:

mount --bind /home/mysql/var/lib/mysql /var/lib/mysql
person Peter Grond    schedule 09.08.2016
comment
Спасибо. Я использовал решение выше, но оно навсегда удаляется обновлениями. Таким образом, я надеюсь, что это долгосрочный обходной путь: я поместил это в fstab /home/share/mysqldb /var/lib/mysql none bind 0 0 - person wuppi; 31.10.2017

Та же ситуация после обновления Debian 8 (Jessie) и 9 (Stretch). После «apt-get upgrade» команда

  • запуск службы mysql

сервер не запускается и пишет ошибку:

[Предупреждение] Невозможно создать тестовый файл /home/johndoe/UserDatabases/mypcname.lower-test

решение состоит в том, чтобы изменить в файле /lib/systemd/system/mariadb.service значение:

ProtectHome=true

to

ProtectHome=false

как описано выше.

person karel    schedule 28.08.2017

@RedGiant да, я решил это. Забыл написать сюда.

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

Я могу запустить MySQL из любого места, кроме /home. Что я сделал, так это размонтировал /home (мой SSD RAID был смонтирован в /home) и перемонтировал мой диск как /ssd. Поменял пути в конфиге и сразу заработало.

Я не запускал SELinux или Apparmor.

person Bento    schedule 28.07.2016
comment
Да, вы можете использовать /home. это просто плохая идея и требует дополнительной настройки (centos/fedora) - person quazardous; 12.11.2017

Я столкнулся с той же проблемой, что и в вопросе. В моем случае я хотел переместить каталог данных MariaDB в папку /home/mysql, но после изменения файла my.cnf служба MariaDB не запускалась.

Я внес следующие изменения в файл /lib/systemd/system/mariadb.service.

ProtectHome=true to ProtectHome=false

Он попросил меня перезагрузить демон при повторном запуске службы Mariadb. Однако я без проблем перезагрузил сервер и запустил службу MariaDB.

person Hiren Parghi    schedule 19.10.2020