louislivi / SMProxy

Swoole MySQL Proxy 一个基于 MySQL 协议,Swoole 开发的MySQL数据库连接池。 A MySQL database connection pool based on MySQL protocol and Swoole.
https://smproxy.louislivi.com
MIT License
1.78k stars 257 forks source link

数据库别名 和 databaseName 不一致会导致连接不上 #72

Closed mogody closed 4 years ago

mogody commented 4 years ago

Describe Your Environment (描述你的环境)

How to Reproduce the Problem? (如何重现问题)

  1. databases 的数据库别名配置和 databaseName 不一样
    "databases": {
      "foo_db_proxy": {
        "databaseName": "foo_db",
        "serverInfo": "serverInfo1",
    ...
      }
    }

    应用中连接配置:

    DB_CONNECTION=mysql
    DB_HOST=127.0.0.1
    DB_PORT=3366
    DB_DATABASE=foo_db_proxy
    DB_USERNAME=smproxy_user
    DB_PASSWORD=smproxy_password

Expected Behavior (预期行为)

应用正确连接并且可以操作数据库

Actual Behavior (实际行为)

SQLSTATE[42000]: Syntax error or access violation: 1049 42000Unknown database 'foo_db_proxy'

More Information (更多信息)

既然叫做数据库别名,那么原则上就允许和 databaseName 不一致,但是实际配置不一致会导致无法连接

mogody commented 4 years ago

这样的设计感觉不合理,databaseName 本质上应该是给 SMProxy 连接 Mysql 时使用的,也就是说这个是属于 SMProxy 的内部配置,不应该暴露给上层应用。 假如键名databaseName 都配置的情况,而且又不一样,那么 键名 这个配置在这里就失去了意义

louislivi commented 4 years ago

你说的是对的,我说错了。 这种写法是正确的,配置修改后是否有重启服务。

mogody commented 4 years ago

有,测试过无数遍,必须配置一样才可以的

louislivi commented 4 years ago

好的,我后续跟进下这个问题,这个databaseName配置主要是用于多个不同的数据库连接,出现相同的数据库名称的情况,一般无需配置此参数。

louislivi commented 4 years ago

@wh469012917 这个问题的原因是由于Laravel重复选择数据库导致的 ,需要注释Illuminate/Database/Connectors/ConnectionFactory.php:26-28行代码可解决 image