MySQL not starting on Ubuntu 18.04

MySQL did not start on Ubuntu 18.04 server. This is fresh server, i removed all MySQL packages, removed configuration files.

apt remove --purge mysql-client-5.7 mysql-client-core-5.7 mysql-common mysql-server-5.7 mysql-server-core-5.7

Reinstalled MySQL.

apt install mysql-server-5.7

Still MySQL fail to start with some error related to

Advertisement

2018-10-29T21:07:49.311174Z 0 [ERROR] Could not open file '/var/log/mysql/error.log' for error logging: Permission denied

Full error here

https://gist.github.com/serverok/f82d8c891a58db3351c331005498f435

Initially i was thinking the problem is with Ubuntu 18.04 mysql package. So i set up another fresh Ubuntu 18.04 server, installed MySQL 5.7 and it worked prefectly fine.

Now i checked the permission for the folders. For this i enabled shell access for MySQL user.

chsh --shell /bin/bash mysql

Now i change to this user with command

su - mysql

I chaged to /var/log/mysql folder, it worked fine, i can write to the file /var/log/mysql/error.log. Tested with

echo "hello" >> /var/log/mysql/error.log
tail /var/log/mysql/error.log

It is not a permission problem. I checked the /var/log foler, found this is not an actual folder, a symlink to another folder.

This is caused by AppArmor. I disabled AppArmour with

systemctl stop apparmor

Start MySQL with

systemctl start mysql

I get some error related to data directory, i checked folder /var/lib/mysql and found it was empty. I created MySQL data folder with command

mysqld --initialize --explicit_defaults_for_timestamp

On restarting MySQL again, MySQL worked fine. But i can’t login as user root. When you initialize MySQL data folder, MYSQL generate and store temporary password in /var/log/mysql/error.log, to find the password, i run

grep -i "pass" /var/log/mysql/error.log

You need to change this temporary password as it is set as expired by default. This can be done with command

mysql_secure_installation

Set a new secure password when it ask.

Fixing AppArmor

We need to tell AppArmour to allow MySQL to use /mnt/log/mysql folder for logging. To do this, edit file.

vi /etc/apparmor.d/local/usr.sbin.mysqld

Added following to it.

  /mnt/log/mysql/** rw,

Now restart AppArmor.

systemctl restart apparmor

Now MySQL will work properly.

Add a comment

Leave a Reply

Your email address will not be published. Required fields are marked *

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Advertisement