我一直在使用 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.
我们的生产服务器也是如此,其中 db 与 app 位于不同的服务器上:
"production": {
"username": "root",
"password": "password",
"database": "db",
"host": "172.xx.xx.11",
"dialect": "mysql"
}
所以最近我们升级了我们的生产服务器,使用 mariadb 拥有 3 个 db 服务器,由负载均衡器(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",
"password": "password",
"database": "db",
"host": "172.xx.xx.10",
"dialect": "mysql"
}
应用服务器和数据库服务器之间没有直接打开防火墙,只有应用服务器到负载均衡器。
用sequelize测试app server和负载均衡器的连接似乎没有问题,如果用户名和密码正确可以通过,如果用户名错误,或者密码错误会给出
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, 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' 数据库。
如果您以前有任何类似的经验,请提供帮助,如果您需要更多信息,请告诉我。谢谢。