
从香港服务器网站的MySQL错误日志中排查数据库故障,需要系统性地分析日志内容并结合数据库状态检查。
---
### **一、定位MySQL错误日志**
#### 1. 确认日志路径
```bash
# 查看MySQL配置文件确定日志位置
grep 'log-error' /etc/mysql/my.cnf
# 或通过运行命令查找
mysql -uroot -p -e "SHOW VARIABLES LIKE 'log_error';"
```
常见路径:
- `/var/log/mysql/error.log`
- `/var/lib/mysql/hostname.err`
#### 2. 实时监控日志
```bash
tail -f /var/log/mysql/error.log | grep -E 'ERROR|Warning|Crash'
```
---
### **二、常见错误类型与解决方案**
#### **1. 启动失败类错误**
- **错误示例**:
```
[ERROR] Can't start server: Bind on TCP/IP port: Address already in use
```
- **解决方案**:
```bash
# 杀死占用3306端口的进程
sudo netstat -tulnp | grep 3306
sudo kill -9 <PID>
# 或修改MySQL端口
vim /etc/mysql/my.cnf # 添加 port=3307
```
#### **2. 表损坏错误**
- **错误示例**:
```
[ERROR] Table './mydb/mytable' is marked as crashed and should be repaired
```
- **修复命令**:
```bash
mysqlcheck -uroot -p --auto-repair --optimize --all-databases
# 或单表修复
mysql -uroot -p -e "REPAIR TABLE mydb.mytable;"
```
#### **3. 连接数耗尽**
- **错误示例**:
```
[ERROR] Too many connections (1040)
```
- **临时解决**:
```sql
SET GLOBAL max_connections = 500;
```
- **永久调整**:
```bash
echo "max_connections=500" >> /etc/mysql/my.cnf
systemctl restart mysql
```
#### **4. 磁盘空间不足**
- **错误示例**:
```
[ERROR] Error writing file '/tmp/XXXX' (Errcode: 28 - No space left on device)
```
- **排查命令**:
```bash
df -h # 查看磁盘空间
du -sh /var/lib/mysql/ # 检查数据库大小
```
---
### **三、高级诊断工具**
#### 1. **mysqldumpslow**(分析慢查询)
```bash
mysqldumpslow -s t /var/log/mysql/mysql-slow.log
```
#### 2. **pt-query-digest**(Percona工具)
```bash
pt-query-digest /var/log/mysql/mysql-slow.log
```
#### 3. **InnoDB状态检查**
```sql
SHOW ENGINE INNODB STATUS\G
```
---
### **四、日志分析技巧**
#### 1. 时间范围过滤
```bash
# 分析特定时间段的错误
sed -n '/2025-04-24T10:00:00/,/2025-04-24T11:00:00/p' /var/log/mysql/error.log
```
#### 2. 错误分类统计
```bash
grep -oP '\[ERROR\] \K.*' error.log | sort | uniq -c | sort -nr
```
#### 3. 关键错误码解读
| 错误码 | 含义 | 应对措施 |
|--------|-----------------------|------------------------------|
| 1062 | 主键/唯一键冲突 | 检查插入数据或忽略重复 |
| 1213 | 死锁 | 优化事务代码 |
| 2002 | 无法连接MySQL服务 | 检查mysqld是否运行 |
| 2013 | 查询期间连接丢失 | 增加`wait_timeout`参数 |
---
### **五、预防性维护**
1. **日志轮转配置**(防止日志过大)
```bash
vim /etc/logrotate.d/mysql-server
```
添加:
```
/var/log/mysql/error.log {
daily
rotate 7
missingok
compress
delaycompress
notifempty
}
```
2. **监控告警设置**
```bash
# 使用Prometheus+Alertmanager监控错误日志
grep -q 'ERROR' /var/log/mysql/error.log && \
curl -X POST https://alert.example.com -d '{"text":"MySQL error detected"}'
```
---
### **六、香港服务器特殊注意事项**
- **网络延迟影响**:检查是否因跨境网络问题导致连接超时
```sql
SHOW GLOBAL STATUS LIKE 'Aborted_connects';
```
- **合规要求**:确保日志不包含用户敏感数据(需过滤后再分析)
---
通过以上方法,可以快速定位香港服务器MySQL故障根源。对于复杂问题,建议同时检查`/var/log/syslog`和数据库监控工具(如Percona PMM)。
- Tags:
- 香港服务器,香港服务器网站