269 lines
5.6 KiB
Markdown
269 lines
5.6 KiB
Markdown
|
|
# MySQL启动问题修复方案
|
|||
|
|
|
|||
|
|
**修复时间:** 2025年1月28日
|
|||
|
|
**问题:** 宝塔面板启动MySQL一直转圈,MySQL服务无法启动
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 一、问题诊断
|
|||
|
|
|
|||
|
|
### 错误信息
|
|||
|
|
|
|||
|
|
从MySQL错误日志 `/www/server/data/VM-4-13-centos.err` 可以看到:
|
|||
|
|
|
|||
|
|
1. **权限错误:**
|
|||
|
|
```
|
|||
|
|
[ERROR] InnoDB: Operating system error number 13 in a file operation.
|
|||
|
|
[ERROR] InnoDB: The error means mysqld does not have the access rights to the directory.
|
|||
|
|
[ERROR] InnoDB: Cannot open '/www/server/data/ib_buffer_pool.incomplete' for writing: Permission denied
|
|||
|
|
[ERROR] Unable to delete pid file: Permission denied
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
2. **数据目录配置错误:**
|
|||
|
|
- 启动脚本期望:`/www/server/mysql/data`(不存在)
|
|||
|
|
- 实际数据目录:`/www/server/data/mysql`(存在)
|
|||
|
|
|
|||
|
|
### 根本原因
|
|||
|
|
|
|||
|
|
1. **权限问题:** MySQL用户(mysql)没有足够权限访问数据目录
|
|||
|
|
2. **配置问题:** 启动脚本配置的数据目录路径不正确
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 二、修复步骤
|
|||
|
|
|
|||
|
|
### 步骤1:修复数据目录权限
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# 修复数据目录的所有者和权限
|
|||
|
|
chown -R mysql:mysql /www/server/data/mysql/
|
|||
|
|
chmod 750 /www/server/data/mysql/
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 步骤2:创建符号链接(可选)
|
|||
|
|
|
|||
|
|
如果启动脚本必须使用 `/www/server/mysql/data`,可以创建符号链接:
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# 创建目录
|
|||
|
|
mkdir -p /www/server/mysql/data
|
|||
|
|
|
|||
|
|
# 创建符号链接(如果支持)
|
|||
|
|
ln -sf /www/server/data/mysql/* /www/server/mysql/data/
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
或者直接修改启动脚本配置。
|
|||
|
|
|
|||
|
|
### 步骤3:清理PID和锁文件
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# 删除旧的PID文件
|
|||
|
|
rm -f /www/server/data/mysql/*.pid
|
|||
|
|
|
|||
|
|
# 删除锁文件
|
|||
|
|
rm -f /var/lock/subsys/mysql
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 步骤4:使用正确的数据目录启动MySQL
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# 直接使用正确的数据目录启动
|
|||
|
|
/www/server/mysql/bin/mysqld_safe \
|
|||
|
|
--defaults-file=/etc/my.cnf \
|
|||
|
|
--datadir=/www/server/data/mysql \
|
|||
|
|
--user=mysql \
|
|||
|
|
--pid-file=/www/server/data/mysql/VM-4-13-centos.pid \
|
|||
|
|
2>&1 &
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 三、验证MySQL启动
|
|||
|
|
|
|||
|
|
### 1. 检查端口
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
netstat -tlnp | grep 3306
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
应该看到类似输出:
|
|||
|
|
```
|
|||
|
|
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN xxxx/mysqld
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 2. 检查进程
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
ps aux | grep mysqld | grep -v grep
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 3. 测试数据库连接
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# 使用MySQL客户端测试
|
|||
|
|
/www/server/mysql/bin/mysql -urootrui -p'X2)jB+k%YH.p' -h127.0.0.1 -e "SELECT 1;"
|
|||
|
|
|
|||
|
|
# 或使用PHP测试
|
|||
|
|
php -r "try { \$pdo = new PDO('mysql:host=127.0.0.1;dbname=ruilai', 'rootrui', 'X2)jB+k%YH.p'); echo '连接成功\n'; } catch (Exception \$e) { echo '连接失败: ' . \$e->getMessage() . '\n'; }"
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 4. 测试登录功能
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# 测试登录接口
|
|||
|
|
curl -X POST https://www.ruilaizipj.com/adminghd/Login/login \
|
|||
|
|
-d "username=13212345678&password=123456&loginsubmit=true" \
|
|||
|
|
-s -o /dev/null -w "%{http_code}"
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
应该返回 `200` 而不是 `500`。
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 四、如果仍然无法启动
|
|||
|
|
|
|||
|
|
### 检查错误日志
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# 查看最新的错误日志
|
|||
|
|
tail -50 /www/server/data/VM-4-13-centos.err
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 检查磁盘空间
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# 检查数据目录所在磁盘空间
|
|||
|
|
df -h /www/server/data/
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 检查SELinux(如果启用)
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# 检查SELinux状态
|
|||
|
|
getenforce
|
|||
|
|
|
|||
|
|
# 如果启用,可能需要临时禁用或配置SELinux策略
|
|||
|
|
setenforce 0 # 临时禁用(重启后恢复)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 检查MySQL配置文件
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# 查找MySQL配置文件
|
|||
|
|
find /www/server -name "my.cnf" -type f | grep -v "mysql-test"
|
|||
|
|
|
|||
|
|
# 检查配置文件中的数据目录设置
|
|||
|
|
cat /etc/my.cnf | grep datadir
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 五、永久修复方案
|
|||
|
|
|
|||
|
|
### 方案1:修改启动脚本(推荐)
|
|||
|
|
|
|||
|
|
编辑 `/etc/rc.d/init.d/mysqld`,修改数据目录配置:
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# 备份原文件
|
|||
|
|
cp /etc/rc.d/init.d/mysqld /etc/rc.d/init.d/mysqld.backup
|
|||
|
|
|
|||
|
|
# 编辑文件,将 datadir 改为正确的路径
|
|||
|
|
sed -i 's|datadir=/www/server/mysql/data|datadir=/www/server/data/mysql|g' /etc/rc.d/init.d/mysqld
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 方案2:修改MySQL配置文件
|
|||
|
|
|
|||
|
|
编辑 `/etc/my.cnf` 或宝塔面板的MySQL配置文件:
|
|||
|
|
|
|||
|
|
```ini
|
|||
|
|
[mysqld]
|
|||
|
|
datadir=/www/server/data/mysql
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 方案3:创建符号链接
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# 如果启动脚本必须使用 /www/server/mysql/data
|
|||
|
|
mkdir -p /www/server/mysql
|
|||
|
|
ln -sf /www/server/data/mysql /www/server/mysql/data
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 六、通过宝塔面板启动
|
|||
|
|
|
|||
|
|
修复权限和配置后,可以通过宝塔面板启动:
|
|||
|
|
|
|||
|
|
1. **登录宝塔面板**
|
|||
|
|
- 访问:`http://101.43.95.130:38193/e626af3f`
|
|||
|
|
- 用户名:`0dbelvc8`
|
|||
|
|
|
|||
|
|
2. **进入"软件商店"**
|
|||
|
|
- 找到"MySQL"
|
|||
|
|
- 点击"设置"
|
|||
|
|
|
|||
|
|
3. **启动MySQL**
|
|||
|
|
- 点击"启动"按钮
|
|||
|
|
- 等待启动完成(不再转圈)
|
|||
|
|
|
|||
|
|
4. **验证启动**
|
|||
|
|
- 查看状态显示"运行中"
|
|||
|
|
- 或点击"测试连接"
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 七、设置开机自启动
|
|||
|
|
|
|||
|
|
### 通过宝塔面板
|
|||
|
|
|
|||
|
|
1. 进入"软件商店"
|
|||
|
|
2. 找到"MySQL"
|
|||
|
|
3. 点击"设置"
|
|||
|
|
4. 开启"开机自启"
|
|||
|
|
|
|||
|
|
### 通过命令行
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# 如果使用systemd
|
|||
|
|
systemctl enable mysqld
|
|||
|
|
|
|||
|
|
# 或添加到启动脚本
|
|||
|
|
echo "/www/server/mysql/bin/mysqld_safe --defaults-file=/etc/my.cnf --datadir=/www/server/data/mysql --user=mysql &" >> /etc/rc.local
|
|||
|
|
chmod +x /etc/rc.local
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 八、总结
|
|||
|
|
|
|||
|
|
### 问题根源
|
|||
|
|
|
|||
|
|
1. **权限问题:** MySQL用户无法访问数据目录
|
|||
|
|
2. **配置问题:** 数据目录路径配置不正确
|
|||
|
|
|
|||
|
|
### 修复方法
|
|||
|
|
|
|||
|
|
1. ✅ 修复数据目录权限
|
|||
|
|
2. ✅ 清理PID和锁文件
|
|||
|
|
3. ✅ 使用正确的数据目录启动MySQL
|
|||
|
|
4. ⏳ 修改启动脚本或配置文件(永久修复)
|
|||
|
|
|
|||
|
|
### 当前状态
|
|||
|
|
|
|||
|
|
- ⏳ 权限已修复
|
|||
|
|
- ⏳ 配置问题待解决
|
|||
|
|
- ⏳ MySQL服务待启动
|
|||
|
|
|
|||
|
|
### 下一步操作
|
|||
|
|
|
|||
|
|
1. 执行修复命令
|
|||
|
|
2. 启动MySQL服务
|
|||
|
|
3. 验证登录功能
|
|||
|
|
4. 设置开机自启动
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
**修复时间:** 2025年1月28日
|
|||
|
|
**问题状态:** 已诊断,待修复
|