首先确认MySQL服务是否处于运行状态,使用以下命令查看服务状态:
sudo systemctl status mysqld
若服务未启动,尝试启动服务:
sudo systemctl start mysqld
若启动失败,需结合错误日志进一步分析(见步骤2)。
错误日志是排查MySQL故障的核心依据,通常位于/var/log/mysqld.log或/var/log/mysql/error.log。使用以下命令实时查看最新日志:
sudo tail -f /var/log/mysqld.log
日志中会记录启动失败、权限问题、查询错误等关键信息,需重点关注错误代码(如ERROR 1045表示权限问题、ERROR 13表示磁盘空间不足)。
MySQL的主配置文件通常为/etc/my.cnf或/etc/mysql/my.cnf,需检查以下关键配置项是否正确:
datadir:数据目录路径(如/var/lib/mysql),需确保路径存在且可访问;socket:套接字文件路径(如/var/lib/mysql/mysql.sock),需与客户端配置一致;port:监听端口(默认3306),需未被其他进程占用。mysqld --validate-config命令验证配置文件合法性。MySQL默认使用3306端口,若该端口被其他进程占用,会导致服务无法启动或连接失败。使用以下命令检查端口占用情况:
sudo netstat -tulnp | grep 3306
若端口被占用,可通过以下方式解决:
sudo kill -9 <PID>);port参数,更换为其他未被占用的端口(如3307)。MySQL数据目录(通常为/var/lib/mysql)的所有权和权限必须正确,否则会导致服务无法启动。使用以下命令修复权限:
sudo chown -R mysql:mysql /var/lib/mysql
sudo chmod -R 755 /var/lib/mysql
若数据目录损坏,可使用mysqlcheck工具修复(见步骤8)。
若无法连接到MySQL服务器,需检查以下方面:
ping <服务器IP>命令确认客户端与服务器之间的网络连接正常;sudo firewall-cmd --list-ports命令检查防火墙是否放行3306端口,若未放行,添加规则:sudo firewall-cmd --add-port=3306/tcp --permanent
sudo firewall-cmd --reload
bind-address参数,若设置为127.0.0.1,则仅允许本地连接;若需允许远程连接,需修改为0.0.0.0或服务器实际IP。MySQL性能下降常与系统资源瓶颈相关,需通过以下命令检查资源使用情况:
top或htop命令,若mysqld进程占用过高,需优化查询或升级CPU;free -h命令,若内存不足,需增加内存或调整MySQL缓冲区配置(如innodb_buffer_pool_size,通常设置为物理内存的50%-70%);iostat -x 1命令,若磁盘等待时间(await)过高,需更换SSD或优化查询减少I/O压力。若数据文件损坏,可使用mysqlcheck工具进行检查和修复:
sudo mysqlcheck --all-databases --auto-repair --optimize -u root -p
该命令会自动检查所有数据库中的表,并尝试修复损坏的表。若修复失败,需从备份中恢复数据。
若忘记root用户密码,可通过以下步骤重置:
sudo systemctl stop mysqld;sudo mysqld_safe --skip-grant-tables &;mysql -u root;FLUSH PRIVILEGES;
ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_password';
exit;sudo systemctl start mysqld。慢查询是导致MySQL性能下降的常见原因,需通过以下步骤分析和优化:
[mysqld]
slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow-query.log
long_query_time = 2 # 记录执行时间超过2秒的查询
pt-query-digest工具分析日志,找出执行时间最长的查询:sudo pt-query-digest /var/log/mysql/slow-query.log
EXPLAIN命令分析查询执行计划,添加合适的索引(如ALTER TABLE table_name ADD INDEX index_name (column_name)),避免全表扫描。