【问题标题】:Laravel host is not allowed to connect to this mysql server (Centos 7)Laravel 主机不允许连接到这个 mysql 服务器(Centos 7)
【发布时间】:2020-01-31 04:17:10
【问题描述】:

我在 centos 7 上安装了全新安装的 mysql-community-server 5.7。 我可以远程成功连接到mysql服务器,也可以在本地使用mysql命令。 但是在尝试连接 laravel(最新版​​本 5.8.*)时,我收到错误 Host 'SERVER_IP_ADDRESS' is not allowed to connect to this MySQL server.

(在herehere 中有很多关于此的帖子,但事实并非如此,问题似乎并没有消失。)

所以这让我觉得这可能不是 mysql 问题。

这是来自/etc/my.cnf的mysql conf:

datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
symbolic-links=0
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

我正在运行 PHP-FPM 和 nginx 作为反向代理,一切正常,直到 laravel 尝试连接到数据库。

我还尝试将 DB_HOST127.0.0.1 更改为 localhost 、 server_ip_address、domain_name ……甚至在 .env 文件中。 将DB_USERNAMEDB_PASSWORD 更改为随机的,看看我是否得到了不同的错误,卡在同一个错误。

MySQL 用户表:

+---------------+-----------+
| user          | host      |
+---------------+-----------+
| deka          | %         |
| root          | %         |
| deka          | localhost |
| mysql.session | localhost |
| mysql.sys     | localhost |
| root          | localhost |
+---------------+-----------+

(按照其他帖子的指示删除了主机名“%”或“_”的每个用户记录,并重新创建了对数据库具有完全权限的用户。即使没有带通配符的用户,它也不起作用。)

root 用户授权:

+---------------------------------------------------------------------+
| Grants for root@localhost                                           |
+---------------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION |
| GRANT PROXY ON ''@'' TO 'root'@'localhost' WITH GRANT OPTION        |
+---------------------------------------------------------------------+

deka 用户授权:

+----------------------------------------------------------------------+
| Grants for deka@%                                                    |
+----------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'deka'@'%'                                     |
| GRANT ALL PRIVILEGES ON `dekatech`.* TO 'deka'@'%' WITH GRANT OPTION |
+----------------------------------------------------------------------+

我也:

  1. 确保 laravel 没有缓存任何配置。
  2. 每次更改都刷新权限。

似乎没有一个用户在工作。

除了最后两行之外,mysql 日志文件看起来也很标准。

2019-10-02T20:54:53.246940Z 0 [Warning] CA certificate ca.pem is self signed.
2019-10-02T20:54:53.249171Z 0 [Note] Server hostname (bind-address): '*'; port: 3306
2019-10-02T20:54:53.249220Z 0 [Note] IPv6 is available.
2019-10-02T20:54:53.249235Z 0 [Note]   - '::' resolves to '::';
2019-10-02T20:54:53.249263Z 0 [Note] Server socket created on IP: '::'.
2019-10-02T20:54:53.289907Z 0 [Note] Event Scheduler: Loaded 0 events
2019-10-02T20:54:53.290223Z 0 [Note] /usr/sbin/mysqld: ready for connections.
Version: '5.7.27-log'  socket: '/var/lib/mysql/mysql.sock'  port: 3306  MySQL Community Server (GPL)
2019-10-02T20:56:09.047393Z 2 [Warning] IP address 'SERVER_IP_ADDRESS' could not be resolved: Name or service not known
2019-10-02T20:56:19.052216Z 2 [Note] Got timeout reading communication packets

【问题讨论】:

  • 您检查过 MySQL 服务器日志是否有任何进一步的错误消息?
  • laravel 应用和数据库在同一台主机上吗?您可以使用 vanilla php 数据库连接连接到数据库吗?
  • 是的,它们在同一台服务器上,我可以使用 php 脚本 (hostinger.com/tutorials/how-to-connect-php-to-mysql) 成功地远程和本地连接到数据库,这绝对是 laravel 的问题。

标签: php mysql laravel laravel-5 centos7


【解决方案1】:

我的.env 文件中有重复的“DB_HOST”,这是导致问题的原因。

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_HOST=mysql => Faulty line (which was previously used on a docker dev environment (laradock))
DB_PORT=3306
DB_DATABASE=XXXX
DB_USERNAME=XXXX
DB_PASSWORD=XXX

如果有一个来自 laravel 的警告就好了,所有这些麻烦,因为一个被覆盖的变量。

【讨论】:

  • 好吧,它给了你一个错误。 Laravel 中数据库问题的第一个调试步骤通常是启动 php artisan tinker 并输出 config('database') 的值,以确保一切都等于您认为它们相等的值。
猜你喜欢
  • 2012-11-12
  • 2017-10-09
  • 2012-06-07
  • 2014-09-20
相关资源
最近更新 更多