When MySQL refuses to start without any log entries and throws cryptic Upstart errors, it can be particularly frustrating. Here's what you're likely seeing:
$ sudo service mysql start
start: Job failed to start
Before diving deep, perform these quick checks:
# Check disk space (you mentioned this is okay)
df -h
# Verify MySQL configuration
sudo mysqld --verbose --help | grep -A 1 "Default options"
The key error in your case appears to be:
start: Rejected send message, 1 matched rules
This suggests a permission/initialization issue between systemd and Upstart. Modern Ubuntu systems often have this conflict.
Try bypassing the service wrapper:
# Direct mysqld start attempt
sudo /usr/sbin/mysqld --skip-grant-tables --skip-networking &
When logs are empty, force verbose logging:
sudo mysqld --verbose --log-error=/var/log/mysql/error.log
Even if you've checked permissions, these are often the culprit:
# Critical permission checks
sudo chown -R mysql:mysql /var/lib/mysql
sudo chmod -R 755 /var/lib/mysql
MySQL might be failing due to config issues:
# Test configuration without starting
sudo mysqld --defaults-file=/etc/mysql/my.cnf --validate-config
If all else fails, try these nuclear options:
# Complete purge (will remove all databases)
sudo apt-get purge mysql-server mysql-client mysql-common
sudo rm -rf /etc/mysql /var/lib/mysql
sudo apt-get install mysql-server
For Ubuntu 16.04+ systems with systemd:
# Bypass Upstart entirely
sudo systemctl start mysql
journalctl -xe # Check system logs
When sudo service mysql start
returns that dreaded "Job failed to start" message with empty logs, even experienced DBAs can feel lost. Here's how I systematically debugged this issue:
# Check if MySQL is actually running
ps aux | grep mysqld
# Verify disk space (though OP confirmed 1GB available)
df -h
# Check for alternative log locations
grep -r "ERROR" /var/log/
While permissions might seem correct on the surface, these commands often reveal hidden issues:
# Check apparmor status
sudo aa-status
# Verify mysql user permissions
sudo -u mysql stat /var/lib/mysql
# Check systemd journal (often contains clues journalctl won't show)
sudo journalctl -xe -u mysql.service
The error suggests a conflict between init.d and Upstart systems. Try these alternatives:
# Bypass the service wrapper
sudo /usr/sbin/mysqld --console
# Force systemd to show output
sudo systemctl start mysql.service --no-pager
# Check for corrupt tables (run as mysql user)
sudo -u mysql mysqlcheck --all-databases --check
When standard methods fail, these nuclear options often work:
# Create a new error log file manually
sudo touch /var/log/mysql/error.log
sudo chown mysql:mysql /var/log/mysql/error.log
# Reset Upstart configuration
sudo initctl reload-configuration
# Reinitialize data directory (WARNING: backup first)
sudo mysql_install_db --user=mysql
Implement these in your monitoring:
#!/bin/bash
# Basic MySQL health check script
if ! systemctl is-active --quiet mysql; then
echo "$(date) - MySQL not running" >> /var/log/mysql_watchdog.log
systemctl restart mysql
fi