Mariadb Sequelize cli返回“返回”;“未知数据库”;进行迁移时
我一直在使用sequelize迁移,没有任何问题, 例如,在我们的开发服务器中: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",
"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'