javascript - 错误 er_con_count_error 连接数过多表示 mysql
问题描述
我正在用 Angular 编程并用 express 创建一个 api 服务器,当我几个小时在 API 中编程和发出请求时,我遇到了一个小问题。会发生什么以最大数量的请求到达并给我一个错误。
操作很好,没有什么让我失望,只是过了一段时间我才得到那个错误,因此数据库断开连接,我的前端在角度工作。
过了一会儿,服务器向我抛出了这个错误
(node:10356) UnhandledPromiseRejectionWarning: Error: ER_CON_COUNT_ERROR: Too many connections
at Handshake.Sequence._packetToError (C:\xampp\htdocs\sinapsisuao\server\node_modules\mysql\lib\protocol\sequences\Sequence.js:47:14)
at Handshake.ErrorPacket (C:\xampp\htdocs\sinapsisuao\server\node_modules\mysql\lib\protocol\sequences\Handshake.js:123:18)
at Protocol._parsePacket (C:\xampp\htdocs\sinapsisuao\server\node_modules\mysql\lib\protocol\Protocol.js:291:23)
at Parser._parsePacket (C:\xampp\htdocs\sinapsisuao\server\node_modules\mysql\lib\protocol\Parser.js:433:10)
at Parser.write (C:\xampp\htdocs\sinapsisuao\server\node_modules\mysql\lib\protocol\Parser.js:43:10)
at Protocol.write (C:\xampp\htdocs\sinapsisuao\server\node_modules\mysql\lib\protocol\Protocol.js:38:16)
at Socket.<anonymous> (C:\xampp\htdocs\sinapsisuao\server\node_modules\mysql\lib\Connection.js:88:28)
at Socket.<anonymous> (C:\xampp\htdocs\sinapsisuao\server\node_modules\mysql\lib\Connection.js:526:10)
at Socket.emit (events.js:182:13)
at addChunk (_stream_readable.js:283:12)
at readableAddChunk (_stream_readable.js:264:11)
at Socket.Readable.push (_stream_readable.js:219:10)
at TCP.onStreamRead [as onread] (internal/stream_base_commons.js:94:17)
--------------------
at Protocol._enqueue (C:\xampp\htdocs\sinapsisuao\server\node_modules\mysql\lib\protocol\Protocol.js:144:48)
at Protocol.handshake (C:\xampp\htdocs\sinapsisuao\server\node_modules\mysql\lib\protocol\Protocol.js:51:23)
at PoolConnection.connect (C:\xampp\htdocs\sinapsisuao\server\node_modules\mysql\lib\Connection.js:116:18)
at Pool.getConnection (C:\xampp\htdocs\sinapsisuao\server\node_modules\mysql\lib\Pool.js:48:16)
at Pool.query (C:\xampp\htdocs\sinapsisuao\server\node_modules\mysql\lib\Pool.js:202:8)
at Promise (C:\xampp\htdocs\sinapsisuao\server\node_modules\promise-mysql\lib\helper.js:26:45)
at Promise._execute (C:\xampp\htdocs\sinapsisuao\server\node_modules\bluebird\js\release\debuggability.js:384:9)
at Promise._resolveFromExecutor (C:\xampp\htdocs\sinapsisuao\server\node_modules\bluebird\js\release\promise.js:518:18)
at new Promise (C:\xampp\htdocs\sinapsisuao\server\node_modules\bluebird\js\release\promise.js:103:10)
at Pool.promiseCallback (C:\xampp\htdocs\sinapsisuao\server\node_modules\promise-mysql\lib\helper.js:8:16)
at pool.query (C:\xampp\htdocs\sinapsisuao\server\node_modules\promise-mysql\lib\pool.js:57:32)
at C:\xampp\htdocs\sinapsisuao\server\build\controllers\facilitadorController.js:16:42
at Generator.next (<anonymous>)
at fulfilled (C:\xampp\htdocs\sinapsisuao\server\build\controllers\facilitadorController.js:5:58)
(node:10356) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 1)
(node:10356) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.
GET /api/facilitadores - - ms - -
OPTIONS /api/facilitadores 204 0.126 ms - 0
(node:10356) UnhandledPromiseRejectionWarning: Error: ER_CON_COUNT_ERROR: Too many connections
at Handshake.Sequence._packetToError (C:\xampp\htdocs\sinapsisuao\server\node_modules\mysql\lib\protocol\sequences\Sequence.js:47:14)
at Handshake.ErrorPacket (C:\xampp\htdocs\sinapsisuao\server\node_modules\mysql\lib\protocol\sequences\Handshake.js:123:18)
at Protocol._parsePacket (C:\xampp\htdocs\sinapsisuao\server\node_modules\mysql\lib\protocol\Protocol.js:291:23)
at Parser._parsePacket (C:\xampp\htdocs\sinapsisuao\server\node_modules\mysql\lib\protocol\Parser.js:433:10)
at Parser.write (C:\xampp\htdocs\sinapsisuao\server\node_modules\mysql\lib\protocol\Parser.js:43:10)
at Protocol.write (C:\xampp\htdocs\sinapsisuao\server\node_modules\mysql\lib\protocol\Protocol.js:38:16)
at Socket.<anonymous> (C:\xampp\htdocs\sinapsisuao\server\node_modules\mysql\lib\Connection.js:88:28)
at Socket.<anonymous> (C:\xampp\htdocs\sinapsisuao\server\node_modules\mysql\lib\Connection.js:526:10)
at Socket.emit (events.js:182:13)
at addChunk (_stream_readable.js:283:12)
at readableAddChunk (_stream_readable.js:264:11)
at Socket.Readable.push (_stream_readable.js:219:10)
at TCP.onStreamRead [as onread] (internal/stream_base_commons.js:94:17)
我的代码数据库是这样的:
import { createPool } from "promise-mysql";
import keys from "./keys";
export async function connect(){
const connection = createPool(keys.database);
return connection;
}
我的索引是:
import express, { Application } from "express";
import morgan from 'morgan';
import cors from 'cors';
import indexRoutes from './routes/indexRoutes';
import usersRoutes from './routes/users.Routes';
import emprendedorRoutes from './routes/emprendedor.Routes';
import facilitadorRoutes from "./routes/facilitador.Routes";
import consultoriaRoutes from "./routes/consultoria.Route";
import emprendimientoRoutes from "./routes/emprendimiento.Routes";
import calendarioRoutes from "./routes/calendar.Route";
import atencionRoutes from "./routes/atencion.Route";
class Server {
public app: Application;
constructor(){
this.app = express();
this.config();
this.routes();
}
//configuracion
config(): void{
this.app.set('port', process.env.PORT || 3000);
this.app.use(morgan("dev"));
this.app.use(cors());
this.app.use(express.json());
this.app.use(express.urlencoded({extended: false}));
}
//rutas
routes(): void {
this.app.use('/',indexRoutes);
this.app.use('/api/users',usersRoutes);
this.app.use('/api/emprendedores', emprendedorRoutes);
this.app.use('/api/facilitadores', facilitadorRoutes);
this.app.use('/api/consultorias', consultoriaRoutes );
this.app.use('/api/emprendimientos', emprendimientoRoutes );
this.app.use('/api/calendar', calendarioRoutes);
this.app.use('/api/atencion', atencionRoutes)
}
//inicia servidor
start(): void{
this.app.listen(this.app.get('port'), ()=>{
console.log('Server on port', this.app.get('port'));
console.log("Conectados a la BD");
});
}
}
const server = new Server();
server.start();
有人可以帮助我解决这个问题,只有在我编程一段时间后才会出现。
解决方案
max_connect_errors默认为 100。当您使用连接池时,这意味着一些零星错误可能会很快增加到 64,从而导致错误体验。
解决方案第 1 部分:删除连接池。简单的每个连接都可以。
解决方案第 2 部分:将 max_connect_errors 增加到其记录的最大值
解决方案第 3 部分:尝试找出发生的一些错误,看看它们是程序错误还是暂时的网络连接问题。
推荐阅读
- django - 如何将 id 存储在数据库中,但在 Django 的 modelchoicefield 中显示名称?
- reactjs - React、TypeScript Hero 和 TSLint 问题
- reactjs - 使用 useEffect 避免在多个 firebase 快照上重新渲染
- flutter - FlatButton 子项不在按钮内居中
- amazon-web-services - AWS Api 网关对 .NET Core 中 JSON 的响应
- python - Gunicorn:尝试启动烧瓶服务器时无法在“wsgi”中找到属性“app”
- android - Facebook 客户聊天插件未在 Android 手机 Chrome 移动浏览器上显示
- ios - Swift:如何自动将 Main.storyboard 用于纵向,将 Main_landscape.storyboard 用于横向?
- c++ - 为什么在不是“*this”的任何东西上使用基于范围的for循环时,我会得到“与运算符*不匹配”?
- html - 实现 - 下拉菜单不会显示