【发布时间】:2020-01-15 20:35:48
【问题描述】:
如何检查 MySQL 数据库是否已准备好接受来自 Node MySQL 连接池的某些查询?
我有一个由容器组成的 Docker 环境:
- 容器 1:网络服务器
- 容器 2:api
- 容器 3:数据库
数据库容器运行 MySQL 数据库。 api 容器连接到该数据库。所有三个容器同时启动。 Web 服务器容器在 0.5 秒后启动。 api 容器在 2 秒后启动。数据库服务器在 20 秒后启动。
目前,api 会在数据库启动并运行之前尝试访问数据库的表。这会导致 connection denied 之类的错误。以下代码段总是以消息“查询数据库时出错!”结尾。当 MySQL 数据库尚未启动时:
const sql: string = 'SELECT * FROM sometable;';
MySQL.createPool({
connectionLimit: 10,
acquireTimeout: 30000,
waitForConnections: true,
database: 'mydatabase',
host: 'localhost',
multipleStatements: true,
password: 'mypassword',
user: 'root',
}).query(sql, (err, result) => {
if (result) {
console.log('Successfully queried database.');
} else {
console.log('Error querying database!');
}
});
正在使用的版本:
OS: Ubuntu 19.10
Node: v13.6.0
MySQL (Node API): "@types/mysql": "2.15.8" and "mysql": "2.17.1"
MySQL (Docker Database): mysql:5.7.28
TypeScript: 3.7.4
我想通过 api 检查(并等待)数据库准备情况,可能使用我用于查询的连接池。这可能吗?
【问题讨论】:
标签: mysql node.js connection-pooling