MySQL数据在正常启动情况下无法连接navicat或者连接后打不开库的问题解决

引言

MySQL 是一个流行的关系数据库管理系统,通常使用 3306 端口进行通信。但是,出于安全考虑,默认情况下,服务器的防火墙可能阻止外部访问此端口。本文将指导你在红帽系统上开放 3306 端口,以便远程访问 MySQL。

连接报错

环境准备

确保你拥有修改防火墙规则的权限。

确保你的 MySQL 服务已经安装并运行。

步骤一:检查当前防火墙状态

首先,检查 firewalld 服务是否正在运行:

sudo systemctl status firewalld

如果服务未运行,启动并设置为开机自启:

sudo systemctl start firewalld sudo systemctl enable firewalld

步骤二:添加端口到防火墙规则

使用 firewall-cmd 命令添加 3306 端口到防火墙规则中。这将允许 TCP 流量通过 3306 端口,并设置为永久生效:

sudo firewall-cmd --zone=public --add-port=3306/tcp --permanent

步骤三:重新加载防火墙规则

应用更改,无需重启服务器:

sudo firewall-cmd --reload

步骤四:验证端口开放

确认端口已经添加到防火墙规则并开放:

sudo firewall-cmd --zone=public --query-port=3306/tcp

如果返回结果为 yes,则表示端口已经成功开放。

开放端口可能增加安全风险。以下是一些安全最佳实践:

限制访问:只允许特定的 IP 地址或网络访问 3306 端口。

使用 SSH 隧道:通过 SSH 创建一个安全隧道来访问 MySQL。

定期更新:保持系统和 MySQL 更新到最新版本。

连接后打不开库的问题解决

出现 "1044 - Access denied for user 'root'@'%' to database 'performance_schema'" 错误通常意味着MySQL数据库中的root用户没有足够的权限访问performance_schema数据库。

  1. 确认当前用户: 首先,你需要确认你当前登录的用户是否具有足够的权限来执行 GRANT 命令。你可以通过以下命令查看当前用户:

    SELECT CURRENT_USER();

  2. 授予全局权限: 使用以下命令给 root 用户授予所有数据库的全局权限:

    GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;

  3. 刷新权限: 执行以下命令以使权限更改立即生效:

    FLUSH PRIVILEGES;

  4. 重新检查权限: 执行 SELECT User, Host FROM mysql.user WHERE User='root'; 来确认权限已经更新。

    mysql> SELECT User, Host FROM mysql.user WHERE User='root';
    +------+-----------+
    | User | Host      |
    +------+-----------+
    | root | %         |
    +------+-----------+
    1 rows in set (0.00 sec)

    当权限变成%即可从任何主机进行访问该数据库

出现两个root用户时,也会出现此问题,导致冲突无法打开数据库,删除localhost的那个用户即可

mysql> SELECT User, Host FROM mysql.user WHERE User='root';
+------+-----------+
| User | Host      |
+------+-----------+
| root | %         |
| root | localhost |
+------+-----------+
2 rows in set (0.00 sec)
  1. 删除多余的 root 用户条目: 删除 root@localhost 的条目,只保留 root@% 的条目。使用以下 SQL 命令:

    DELETE FROM mysql.user WHERE User='root' AND Host='localhost';

  2. 刷新权限: 删除条目后,刷新权限以使更改立即生效:

    FLUSH PRIVILEGES;

  3. 重启 MySQL 服务: 在进行更改后,可能需要重启 MySQL 服务以确保所有更改生效:

    sudo systemctl restart mysql

  • 6
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值