The error logs reveal two distinct phases of failure:
Phase 1: File permission issues
2016-11-02 16:55:12 140082509282496 [Warning] Can't create test file /var/lib/mysql/pranav-laptop.lower-test
Phase 2: Missing system tables
2016-11-02 21:03:24 140412958252224 [ERROR] Can't open and lock privilege tables: Table 'mysql.servers' doesn't exist
First, let's address the filesystem permissions. MariaDB requires proper ownership of its data directory:
sudo chown -R mysql:mysql /var/lib/mysql
sudo chmod 700 /var/lib/mysql
sudo restorecon -R /var/lib/mysql # For SELinux systems
The correct modern method for initializing MariaDB system tables is:
sudo mariadb-install-db --user=mysql --basedir=/usr --datadir=/var/lib/mysql
sudo systemctl start mariadb
If you encounter the my_print_defaults error, specify the correct paths:
sudo mariadb-install-db --user=mysql \
--basedir=/usr \
--datadir=/var/lib/mysql \
--auth-root-authentication-method=normal
After installation, verify your my.cnf contains these critical sections:
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
[client]
socket=/var/lib/mysql/mysql.sock
For cases where tables are corrupted, try the recovery mode:
sudo mysqld_safe --skip-grant-tables --skip-networking &
mysql_upgrade -u root
sudo systemctl restart mariadb
After successful startup, verify the installation:
mysql -u root -e "SELECT version(); SHOW DATABASES;"
sudo systemctl enable --now mariadb
# Check service status with verbose output
sudo systemctl status mariadb.service -l
# View detailed logs
sudo journalctl -u mariadb.service --no-pager -n 50
The initial error shows permission problems with creating test files:
2016-11-02 16:55:12 140082509282496 [Warning] Can't create test file /var/lib/mysql/pranav-laptop.lower-test
Follow these steps to fix permissions:
# Stop any running MySQL processes
sudo killall -9 mysqld mysqld_safe
# Change ownership of MySQL directories
sudo chown -R mysql:mysql /var/lib/mysql
sudo chmod -R 755 /var/lib/mysql
# Fix apparmor/selinux if needed
sudo setenforce 0
sudo aa-complain /usr/sbin/mysqld
The subsequent error indicates missing MySQL system tables:
2016-11-02 21:03:24 140412958252224 [ERROR] Can't open and lock privilege tables: Table 'mysql.servers' doesn't exist
Here's how to properly initialize them:
# Backup existing data first
sudo cp -a /var/lib/mysql /var/lib/mysql.bak
# Initialize system tables with correct path
sudo mariadb-install-db --user=mysql --basedir=/usr --datadir=/var/lib/mysql
# Alternative for older versions
sudo mysql_install_db --user=mysql --basedir=/usr --datadir=/var/lib/mysql
Check your my.cnf configuration:
# Verify config file locations
sudo mysql --verbose --help | grep -A1 "Default options"
# Sample minimal working configuration
[mysqld]
datadir=/var/lib/mysql
socket=/run/mysqld/mysqld.sock
log-error=/var/log/mysql/error.log
pid-file=/run/mysqld/mysqld.pid
[client]
socket=/run/mysqld/mysqld.sock
After fixing all issues, follow this sequence:
# Clean up any existing pid files
sudo rm -f /var/lib/mysql/*.pid /run/mysqld/mysqld.pid
# Start MariaDB in safe mode for testing
sudo mysqld_safe --skip-grant-tables &
# Once verified, start normally
sudo systemctl start mariadb
sudo systemctl enable mariadb
# Secure installation
sudo mysql_secure_installation
For persistent problems, try these diagnostic commands:
# Check for missing dependencies
ldd /usr/sbin/mysqld
# Run in debug mode
sudo mysqld --debug --console
# Verify database consistency
sudo mysqlcheck --all-databases --check-upgrade --auto-repair