Linux系统作为数据库服务的主流部署环境,承载了大量MySQL、PostgreSQL等数据库实例的运行。实际使用中,各类数据库问题会直接影响业务系统的稳定性,掌握常见问题的排查和解决方法十分必要。

一、数据库服务无法启动
这是Linux环境下最高频的数据库问题之一,常见诱因包括端口被占用、数据目录权限错误、配置文件语法错误等。
1.1 排查步骤
- 检查数据库默认端口是否被其他进程占用,MySQL默认端口为3306,PostgreSQL默认端口为5432
- 查看数据库数据目录的所有者和权限,确保运行数据库的用户拥有读写权限
- 检查配置文件是否存在语法错误,可通过数据库自带的配置校验命令验证
1.2 解决方法示例(MySQL)
如果是端口被占用,先找到占用端口的进程并停止:
# 查看3306端口占用情况 netstat -tlnp | grep 3306 # 停止占用进程,假设进程PID为1234 kill -9 1234 # 重新启动MySQL服务 systemctl start mysqld
如果是数据目录权限问题,修改目录所有者为mysql用户:
# 假设MySQL数据目录为/var/lib/mysql chown -R mysql:mysql /var/lib/mysql chmod -R 755 /var/lib/mysql systemctl start mysqld
二、数据库连接超时或拒绝连接
这类问题通常表现为客户端连接数据库时返回连接超时、拒绝访问等错误,常见原因包括防火墙拦截、用户权限配置错误、最大连接数耗尽等。
2.1 排查思路
- 检查Linux系统防火墙是否开放了数据库对应端口
- 验证数据库用户是否允许从客户端IP地址登录
- 查看数据库当前连接数是否达到最大连接数限制
2.2 解决方法示例(PostgreSQL)
如果是防火墙未开放端口,添加端口放行规则:
# 开放5432端口 firewall-cmd --add-port=5432/tcp --permanent # 重载防火墙规则 firewall-cmd --reload
如果是用户权限不足,登录PostgreSQL后修改用户权限:
-- 允许test用户从192.168.0.0/24网段登录,密码为test123 ALTER USER test WITH PASSWORD 'test123'; GRANT ALL PRIVILEGES ON DATABASE testdb TO test; -- 修改pg_hba.conf配置,添加网段访问规则后重启服务
三、数据库查询性能低下
随着数据量增长,查询响应变慢是常见问题,主要原因是缺失索引、查询语句不合理、数据库参数配置不当等。
3.1 优化方向
- 为查询频繁的字段添加合适的索引,避免全表扫描
- 优化复杂查询语句,减少不必要的联表查询和子查询
- 调整数据库缓存、连接池等相关参数,适配服务器硬件配置
3.2 示例:MySQL添加索引
假设有一张用户表user_info,经常根据phone字段查询数据,可添加普通索引:
-- 为phone字段添加普通索引 CREATE INDEX idx_user_phone ON user_info(phone); -- 查看索引是否创建成功 SHOW INDEX FROM user_info;
四、数据库数据写入失败
写入失败通常伴随磁盘空间不足、表空间满、事务冲突等错误提示,需要针对性处理。
4.1 常见场景解决
如果是磁盘空间不足,先清理无用文件,再扩容磁盘:
# 查看磁盘使用情况 df -h # 清理/var/log目录下的过期日志文件 rm -rf /var/log/mysql/old_logs/* # 重启数据库服务 systemctl restart mysqld
如果是表空间满,可扩展表空间或者清理历史数据:
-- 清理30天前的历史订单数据 DELETE FROM order_info WHERE create_time < DATE_SUB(NOW(), INTERVAL 30 DAY); -- 优化表释放空间 OPTIMIZE TABLE order_info;
五、日常维护建议
- 定期备份数据库数据,可使用
mysqldump、pg_dump等工具设置定时备份任务 - 监控数据库服务的CPU、内存、磁盘使用率,设置阈值告警
- 定期更新数据库版本,修复已知的安全漏洞和性能问题
- 避免在生产环境直接执行高风险操作,操作前先做好数据备份
LinuxMySQLPostgreSQL数据库故障排查数据库优化修改时间:2026-07-17 13:21:27