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

问题描述

我一直在使用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","host": "172.xx.xx.11","dialect": "MysqL"
  }

因此,最近我们已使用mariadb将生产服务器升级为具有3个数据库服务器,该服务器由负载均衡器(maxscale),galera集群或其他工具管理,并使用与以前相同的设置,因此现在类似于:

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","host": "172.xx.xx.10","dialect": "MysqL"
  }

在应用程序服务器和数据库服务器之间没有直接打开防火墙,只有应用程序服务器连接到负载均衡器。

使用sequelize测试应用服务器与负载均衡器之间的连接似乎没有问题, 如果用户名密码正确,则可以通过, 如果输入错误用户名或密码将会错误

ERROR: Access denied for user 'root'@'172.xx.xx.10' (using password: YES)

没有问题。只是说有联系。

然后使用以下命令也没有问题

npx sequelize db:drop

npx sequelize db:create

导致

Sequelize CLI [Node: 12.16.1,ORM: 6.3.5]

Loaded configuration file "config\config.json".
Using environment "production".
Database db created.

在我们所有的数据库服务器中验证数据库确实已删除并创建。

但是当我尝试进行迁移时,会发生这种情况:

Sequelize CLI [Node: 12.16.1,ORM: 6.3.5]

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

ERROR: UnkNown database 'db'

我已经证实我们所有的数据库服务器都具有该“ db”数据库,它甚至是通过基于配置的sequelize创建的,但是以某种方式,sequelize似乎无法识别或识别该“ db”数据库

如果您之前有过类似的经验,请提供帮助,如果需要更多信息,请告诉我。 谢谢。

解决方法

您可以通过在log_info=true部分下添加[maxscale]来启用MaxScale中的详细日志级别。这应该有助于解释正在发生的事情以及失败的原因。

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

如果找不到有关其为何如此运行的解释,或者您认为MaxScale做错了什么,请在MaxScale项目下打开MariaDB Jira的错误报告。

,

结果证明maxscale用户没有足够的特权。向maxscale用户授予SHOW DATABASES特权可以解决我的问题。

更多信息: https://mariadb.com/kb/en/mariadb-maxscale-14/maxscale-configuration-usage-scenarios/#service

Related issue on MariaDB Jira

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...