Ubuntu 上 MySQL 启动失败 的原因很多,下面按最常见 → 较少见的顺序给你排查思路,并附上常用的排错命令。你可以一步步对照。
90% 的问题都能在这里找到原因。
sudo journalctl -xe
sudo systemctl status mysql
或直接看 MySQL 日志:
cat /var/log/mysql/error.log
常见提示:
Can't start server: Bind on TCP/IP port: Address already in useInnoDB: Unable to lock ./ibdata1Permission deniedData directory is not accessiblesudo netstat -tulnp | grep 3306
如果已有进程占用:
sudo kill -9 PID
或改端口:
# /etc/mysql/mysql.conf.d/mysqld.cnf
port = 3307
sudo chown -R mysql:mysql /var/lib/mysql
sudo chmod 750 /var/lib/mysql
然后重启:
sudo systemctl restart mysql
错误日志中常见:
InnoDB: Database page corruption
尝试:
sudo systemctl stop mysql
sudo mv /var/lib/mysql /var/lib/mysql.bak
sudo mysql_install_db --user=mysql
sudo systemctl start mysql
⚠️ 会清空数据,生产环境慎用
sudo mysqld --verbose --help | grep my.cnf
检查:
sudo nano /etc/mysql/my.cnf
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
常见错误:
[mysqld]df -h
如果 /var 满了:
sudo apt clean
sudo rm -rf /var/log/mysql/*
Ubuntu 上常见:
mysql-server 和 mariadb-server检查:
dpkg -l | grep -E 'mysql|mariadb'
解决:
sudo apt remove --purge mariadb*
sudo apt autoremove
sudo systemctl status apparmor
临时测试:
sudo systemctl stop apparmor
sudo systemctl restart mysql
你可以直接复制执行:
sudo systemctl status mysql
cat /var/log/mysql/error.log
df -h
ls -ld /var/lib/mysql
请把下面信息发我(贴一部分即可):
lsb_release -a
mysql --version
tail -n 50 /var/log/mysql/error.log
我可以精确到「哪一行配置错了」或「要不要重建数据目录」。