Mariadb Sequelize cli返回“返回”;“未知数据库”;进行迁移时

Mariadb Sequelize cli返回“返回”;“未知数据库”;进行迁移时,mariadb,sequelize.js,database-migration,galera,maxscale,Mariadb,Sequelize.js,Database Migration,Galera,Maxscale,我一直在使用sequelize迁移,没有任何问题, 例如,在我们的开发服务器中: "development": { "username": "root", "password": "password", "database": "db", "host": "127.0.0.1",

我一直在使用sequelize迁移,没有任何问题, 例如,在我们的开发服务器中:

"development": {
    "username": "root",
    "password": "password",
    "database": "db",
    "host": "127.0.0.1",
    "dialect": "mysql"
  }
使用sequelize cli可以正常工作:

npx sequelize db:migrate
结果:

Sequelize CLI [Node: 12.16.1, CLI: 6.2.0, ORM: 6.3.5]

Loaded configuration file "config\config.json".
Using environment "development".
No migrations were executed, database schema was already up to date.
我们的生产服务器也是如此,它的数据库与应用程序位于不同的服务器上:

"production": {
    "username": "root",
    "password": "password",
    "database": "db",
    "host": "172.xx.xx.11",
    "dialect": "mysql"
  }
因此,最近我们升级了我们的生产服务器,使用mariadb,由负载平衡器(maxscale)、galera群集或其他东西管理,使用与以前相同的设置,使其具有3个db服务器,因此现在类似于:

server a: 172.xx.xx.11, 
server b: 172.xx.xx.12, 
server c: 172.xx.xx.13, 
load balancer: 172.xx.xx.10
我们的新配置如下所示:

"production": {
    "username": "root",
    "password": "password",
    "database": "db",
    "host": "172.xx.xx.10",
    "dialect": "mysql"
  }
app server和db server之间没有直接打开的防火墙,只有app server连接到负载平衡器

使用sequelize测试app server和负载平衡器之间的连接似乎没有问题, 如果用户名和密码正确,则可以通过, 如果用户名错误,或密码错误将给出

ERROR: Access denied for user 'root'@'172.xx.xx.10' (using password: YES)
没有问题。只是说有联系

那么,使用以下工具也没有问题:

npx sequelize db:drop

导致

Sequelize CLI [Node: 12.16.1, CLI: 6.2.0, ORM: 6.3.5]

Loaded configuration file "config\config.json".
Using environment "production".
Database db created.
在所有数据库服务器中验证数据库是否已删除和创建

但当我尝试进行迁移时,会发生以下情况:

Sequelize CLI [Node: 12.16.1, CLI: 6.2.0, ORM: 6.3.5]

Loaded configuration file "config\config.json".
Using environment "production".

ERROR: Unknown database 'db'
我已经验证了我们所有的db服务器都有那个“db”数据库,它甚至是由sequelize根据配置创建的,但不知为什么sequelize似乎无法识别或识别那个“db”数据库

请帮助,如果你有任何类似的经验之前,并让我知道如果你需要更多的信息。
谢谢。

您可以通过在
[MaxScale]
部分下添加
log\u info=true
来启用MaxScale中的详细日志级别。这应该有助于解释发生了什么以及为什么失败

Sequelize可能会假定它使用的是同一个数据库服务器。例如,执行插入并立即读取插入的值将始终在单个服务器上工作,但在分布式设置中,这些值可能尚未复制到所有节点


如果您找不到解释它为什么会这样,或者您认为MaxScale做错了什么,请在MaxScale项目下打开MariaDB Jira的错误报告。

结果是MaxScale用户没有足够的权限。向maxscale用户授予
SHOW DATABASES
权限修复了我的问题

更多信息:


谢谢你的建议!我将尝试检查maxscale上的日志并打开一个bug报告。我修复了@markusjm的问题。在MariaDB Jira上发现相关问题。原来有一个“maxscale用户”,需要授予特定的权限。
Sequelize CLI [Node: 12.16.1, CLI: 6.2.0, ORM: 6.3.5]

Loaded configuration file "config\config.json".
Using environment "production".

ERROR: Unknown database 'db'