首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Sequelize-cli在执行迁移时返回“未知数据库”

Sequelize-cli在执行迁移时返回“未知数据库”
EN

Stack Overflow用户
提问于 2020-10-29 08:51:41
回答 2查看 549关注 0票数 0

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

代码语言:javascript
复制
"development": {
    "username": "root",
    "password": "password",
    "database": "db",
    "host": "127.0.0.1",
    "dialect": "mysql"
  }

使用sequelize-cli可以很好地工作:

代码语言:javascript
复制
npx sequelize db:migrate

结果:

代码语言:javascript
复制
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.

我们的生产服务器也是如此,它的db与app在不同的服务器上:

代码语言:javascript
复制
"production": {
    "username": "root",
    "password": "password",
    "database": "db",
    "host": "172.xx.xx.11",
    "dialect": "mysql"
  }

所以最近我们升级了我们的生产服务器,有3个使用mariadb的数据库服务器,由负载均衡器(maxscale)、galera集群或其他东西管理,使用与以前相同的设置,所以现在是这样的:

代码语言:javascript
复制
server a: 172.xx.xx.11, 
server b: 172.xx.xx.12, 
server c: 172.xx.xx.13, 
load balancer: 172.xx.xx.10

我们的新配置如下:

代码语言:javascript
复制
"production": {
    "username": "root",
    "password": "password",
    "database": "db",
    "host": "172.xx.xx.10",
    "dialect": "mysql"
  }

app server和db server之间没有直接开放的防火墙,只有app server到负载均衡器。

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

代码语言:javascript
复制
ERROR: Access denied for user 'root'@'172.xx.xx.10' (using password: YES)

这里没有问题。我只是想说这其中有联系。

那么使用以下命令也没有问题:

代码语言:javascript
复制
npx sequelize db:drop

代码语言:javascript
复制
npx sequelize db:create

结果是

代码语言:javascript
复制
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.

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

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

代码语言:javascript
复制
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‘数据库,它甚至是由sequelize基于配置创建的,但不知何故sequelize cant似乎识别或识别了'db’数据库。

如果你以前有过这样的经历,请帮助我,如果你需要更多的信息,请让我知道。谢谢。

EN

回答 2

Stack Overflow用户

发布于 2020-10-29 15:41:40

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

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

如果你无法解释为什么会这样,或者你认为MaxScale做错了什么,请在MaxScale项目下打开一个关于MariaDB Jira的bug报告。

票数 0
EN

Stack Overflow用户

发布于 2020-10-30 09:45:55

结果是maxscale用户没有足够的权限。将SHOW DATABASES权限授予maxscale用户解决了我的问题。

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

Related issue on MariaDB Jira

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64583382

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档