I’ve just updated MariaDB using apt-get dist-upgrade. Now it won’t start using service mysql start anymore.
I can however, run it as root or do: sudo -u mysql mysqld_safe then MariaDB starts up fine. The folder /home/mysql is owned by the mysql user and group.
I’ve found the error to be thrown in this function:
https://github.com/MariaDB/server/blob/7ff44b1a832b005264994cbdfc52f93f69b92cdc/sql/mysqld.cc#L9865
I can’t figure out what to do next. Any pointers?
Answers:
Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.
Method 1
To run MariaDB SQL from /home, in the file /usr/lib/systemd/system/mariadb.service
or /lib/systemd/system/mariadb.service
, just change :
ProtectHome=true
to :
ProtectHome=false
Method 2
The answer by Thomas is correct, but get’s reset by updates every few months. So here is a permanent solution:
Use systemctl edit mariadb
to create a file overwritting the default settings of the mariadb service. (In debian it’s located in /etc/systemd/system/mariadb.service.d/override.conf
)
Set the same setting Thomas changed in the file:
[Service] ProtectHome=false
Use systemctl daemon-reload
to reload the systemctl config.
Method 3
On debian 9 you need to change ProtectHome to false in both /lib/systemd/system/mariadb.service
and /lib/systemd/system/[email protected]
then run sudo systemctl daemon-reload.
Maybe also run sudo grep -Ri "protecthome" /lib/systemd/system
to find other instances of ProtectHome in mysql-related files if this still isn’t working
Method 4
The workaround for this is mounting the directory in home as /var/lib/mysql:
mount --bind /home/mysql/var/lib/mysql /var/lib/mysql
Method 5
Same situation after update on Debian 8 (Jessie) and 9 (Stretch). After “apt-get upgrade” the command
- service mysql start
the server fails to start and logs error:
[Warning] Can’t create test file /home/johndoe/UserDatabases/mypcname.lower-test
the solution is to change in file /lib/systemd/system/mariadb.service the value:
ProtectHome=true
to
ProtectHome=false
as described above.
Method 6
@RedGiant yes I solved it. Forgot to post here.
Apparently after the .1 release you cannot run SQL from /home anymore. There’s probably a way around this but haven’t found it.
I can run MySQL from any location except /home. What I did was unmount /home (I had my SSD RAID mounted to /home) and re-mount my disk as /ssd. Changed my paths in the config and it worked right away.
I did not run SELinux or Apparmor.
Method 7
I have faced the same issue as mentioned in the question. In my case, I wanted to move the MariaDB Data Directory to the /home/mysql folder but after changing the my.cnf file, MariaDB service was failing to start.
I have made the following changes in the file /lib/systemd/system/mariadb.service
ProtectHome=true to ProtectHome=false
It asked me to reload the daemon while starting the Mariadb service again. However, i have rebooted the server and started the MariaDB service without any issue.
All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0