宝塔安装的 MySQL 无法连接的情况及解决方案

宝塔安装的 MySQL 无法连接的情况及解决方案

宝塔面板是一款流行的服务器管理工具,其中集成的 MySQL 数据库有时会出现连接问题。本文详细介绍两种最常见的 MySQL 连接错误:"1130 - Host is not allowed to connect" 和 "1045 - Access denied",以及它们的解决方案。

一、错误 1130:Host 'xxx.xxx.xxx.xxx' is not allowed to connect to this MySQL server

错误原因

此错误表示您的 IP 地址没有被授权访问宝塔服务器上的 MySQL。主要原因包括:

  1. 宝塔面板默认只允许本地连接 MySQL
  2. MySQL 用户权限配置限制了连接来源
  3. 宝塔安全设置或防火墙阻止了 MySQL 端口访问

解决方案

方案1:手动配置 MySQL 用户远程访问权限
  1. 在宝塔面板中进入 终端 工具,或通过 SSH 连接到服务器
  2. 使用 root 用户登录 MySQL:
bash 复制代码
mysql -uroot -p
# 输入宝塔面板显示的 MySQL root 密码
  1. 执行以下 SQL 命令:
sql 复制代码
-- 创建允许从任意主机连接的root用户
CREATE USER 'root'@'%' IDENTIFIED BY '密码';

-- 授予权限
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%';

-- 刷新权限
FLUSH PRIVILEGES;

也可以通过宝塔面板可视化配置添加允许任何人访问的 root 用户,找到高级设置

找到 MySQL 用户管理

创建用户,指定访问权限,如果希望任何人连接就选 --> 所有人

方案2:修改宝塔 MySQL 配置文件
  1. 在宝塔面板中打开 文件 管理
  2. 导航到 MySQL 配置文件(通常在 /etc/my.cnf/www/server/mysql/etc/my.cnf
  3. 找到并注释掉或修改以下行:
    注释掉这行:
bash 复制代码
bind-address = 127.0.0.1

或者改为:

bash 复制代码
bind-address = 0.0.0.0
  1. 在宝塔面板中重启 MySQL 服务
方案3:检查并调整宝塔防火墙设置
  1. 在宝塔面板中进入 安全 选项
  2. 检查防火墙是否放行了 MySQL 端口(默认 3306)
  3. 如果未放行,点击 放行端口 并添加 3306

二、错误 1045:Access denied for user 'root'@'localhost' (using password: YES)

错误原因

此错误表示用户名和密码验证失败。在宝塔环境中常见原因包括:

  1. 使用了错误的 MySQL 密码(注意宝塔可能会定期自动更改 MySQL root 密码)
  2. 宝塔修改了 MySQL 的认证方式但客户端不兼容
  3. 数据库用户权限配置问题

解决方案

方案1:在宝塔面板中查看/重置正确的 MySQL 密码
  1. 登录宝塔面板
  2. 进入 数据库 选项
  3. 查看 root 密码或点击 修改密码 设置新密码
  4. 使用新密码重新连接
方案2:修改 MySQL 认证方式

宝塔安装的 MySQL 8.0+ 使用新的认证方式,可能与某些客户端不兼容:

  1. 登录宝塔面板的终端或SSH连接到服务器
  2. 登录 MySQL:
bash 复制代码
mysql -uroot -p
# 输入宝塔面板显示的 MySQL root 密码
  1. 修改认证方式:
sql 复制代码
-- 修改认证插件为兼容模式
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '密码';
FLUSH PRIVILEGES;
方案3:通过宝塔面板重置 MySQL

如果无法登录 MySQL,可以通过宝塔面板重置:

  1. 在宝塔面板中,进入 数据库 选项
  2. 点击 MySQL管理器 -> 修复 按钮
  3. 如果仍有问题,可以选择 重置MySQL root密码
方案4:手动重置 MySQL 密码(适用于无法通过宝塔解决的情况)
  1. SSH连接到服务器并执行:
bash 复制代码
# 停止MySQL服务
/etc/init.d/mysqld stop

# 安全模式启动MySQL
mysqld_safe --skip-grant-tables &

# 无密码登录
mysql -u root

# 执行以下SQL命令
USE mysql;
# MySQL 5.7
UPDATE user SET authentication_string=PASSWORD('密码') WHERE User='root';
# MySQL 8.0+
ALTER USER 'root'@'localhost' IDENTIFIED BY '密码';
FLUSH PRIVILEGES;
exit;

# 重启MySQL服务
/etc/init.d/mysqld restart

三、同时解决宝塔 MySQL 远程连接问题的综合方案

步骤1:确认 MySQL 服务状态与密码

  1. 登录宝塔面板
  2. 进入 数据库 选项,确认 MySQL 状态为"正常",并记录 root 密码

步骤2:放行 MySQL 端口

  1. 在宝塔面板 安全 选项中检查防火墙
  2. 确保 MySQL 端口 3306 已放行
  3. 如果使用了云服务器,还需在云服务提供商的控制面板中放行相应端口

步骤3:创建数据库专用用户(推荐)

应用程序最好使用专门的数据库用户而非 root:

  1. 在宝塔面板 数据库 中添加新的 MySQL 数据库
  2. 创建与之关联的数据库用户
  3. 勾选"所有人"选项允许远程访问

步骤4:解决认证问题

如果仍然遇到认证问题,登录 MySQL 执行:

sql 复制代码
-- 对于root用户
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '密码';
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '密码';

FLUSH PRIVILEGES;

四、宝塔 MySQL 连接的安全最佳实践

  1. 避免使用 root 用户远程连接:为应用创建权限受限的专用数据库用户
  2. 限制访问 IP:远程访问设置中指定特定 IP 而非使用 % 通配符
  3. 使用强密码:设置包含大小写字母、数字和特殊字符的强密码
  4. 定期更换密码:通过宝塔面板定期更新数据库密码
  5. 启用 SSL 连接:配置 MySQL 使用 SSL/TLS 加密连接
  6. 监控异常登录:定期检查 MySQL 日志中的连接记录
  7. 最小权限原则:只授予用户必要的数据库和表权限

五、常见问题排查流程

如果以上方法仍无法解决连接问题,请按照以下步骤进行排查:

  1. 检查 MySQL 状态

    bash 复制代码
    /etc/init.d/mysqld status
  2. 检查 MySQL 配置

    bash 复制代码
    cat /www/server/mysql/etc/my.cnf
  3. 检查 MySQL 进程与端口

    bash 复制代码
    ps aux | grep mysql
    netstat -tunlp | grep 3306
  4. 检查 MySQL 日志

    bash 复制代码
    tail -100 /www/server/mysql/log/error.log
  5. 使用 telnet 测试端口连通性

    bash 复制代码
    telnet 服务器IP 3306
  6. 检查宝塔日志

    bash 复制代码
    cat /www/server/panel/logs/error.log
相关推荐
Fleshy数模1 小时前
CentOS7 安装配置 MySQL5.7 完整教程(本地虚拟机学习版)
linux·mysql·centos
az44yao2 小时前
mysql 创建事件 每天17点执行一个存储过程
mysql
秦老师Q3 小时前
php入门教程(超详细,一篇就够了!!!)
开发语言·mysql·php·db
橘子134 小时前
MySQL用户管理(十三)
数据库·mysql
Dxy12393102164 小时前
MySQL如何加唯一索引
android·数据库·mysql
我真的是大笨蛋4 小时前
深度解析InnoDB如何保障Buffer与磁盘数据一致性
java·数据库·sql·mysql·性能优化
怣504 小时前
MySQL数据检索入门:从零开始学SELECT查询
数据库·mysql
人道领域5 小时前
javaWeb从入门到进阶(SpringBoot事务管理及AOP)
java·数据库·mysql
千寻技术帮6 小时前
10404_基于Web的校园网络安全防御系统
网络·mysql·安全·web安全·springboot
spencer_tseng7 小时前
MySQL table backup
mysql