Error: read ECONNRESET
at TCP.onStreamRead (node:internal/stream_base_commons:211:20)
Emitted 'error' event on Connection instance at:
at Connection._handleProtocolError (C:\push_demo\demo\node_modules\mysql\lib\Connection.js:423:8)
at Protocol.emit (node:events:394:28)
at Protocol._delegateError (C:\push_demo\demo\node_modules\mysql\lib\protocol\Protocol.js:398:10)
at Protocol.handleNetworkError (C:\push_demo\demo\node_modules\mysql\lib\protocol\Protocol.js:371:10)
at Connection._handleNetworkError (C:\push_demo\demo\node_modules\mysql\lib\Connection.js:418:18)
at Socket.emit (node:events:394:28)
at emitErrorNT (node:internal/streams/destroy:157:8)
at emitErrorCloseNT (node:internal/streams/destroy:122:3)
at processTicksAndRejections (node:internal/process/task_queues:83:21) {
errno: -4077,
code: 'ECONNRESET',
syscall: 'read',
fatal: true
}
node js로 db연결을 하던 도중 에러가 나타났다.
이유는 2개의 db를 이중으로 연결했기 때문이었다.
이 오류를 해결하기 위해 내가 사용한 방법은 poolcluster 방식이다.
이 방식을 사용하면 2개 이상의 데이터베이스를 효율적으로 관리할 수 있다.
var mysql = require('mysql');
var pool = mysql.createPoolCluster();
var config =
{
host: 'localhost',
user: 'user1',
password: 'user1',
database: 'db1',
port: 3306,
connectTimeout: 60000,
connectionLimit: 10,
multipleStatements: true,
};
var config2 =
{
host: 'localhost2',
user: 'admin1',
password: 'admin1',
database: 'db2',
port: 3306,
connectTimeout: 60000,
connectionLimit: 10,
multipleStatements: true,
};
pool.add('master',config);
pool.add('slave',config2);
pool.getConnection('master', function(err, conn1){
var sql1 = `select * from table1`;
conn1.query(sql1, function(err, results, fields){
for (i = 0; i < results.length; i++) {
console.log(results[i]);
var sql2 = `insert into message (id, msg)`
sql2 += `values( "${results[i].id}", "${results[i].msg}")`;
pool.getConnection('slave',function(err,conn2){
conn2.query(sql2);
});
}
});
});
첫번째.
터미널 창을 켜서 cluster를 설치해준다.
나는 visual code 터미널 창을 켜서 설지했다.
두번째.
mysql을 사용하기 위해 require해준 뒤
createPoolCluster();을 이용해 클러스터를 생성해준다.
그리고 사용할 n개의 db설정을 만들어준다.
나는 2개의 db를 설정했지만 그보다 많은 db설정도 가능하다.
세번째
add를 이용해서 db설정을 추가해준다.
첫번째 파라미터가 option의 id가 된다.
getConnection으로 연결하기를 원하는 db를 명시해준뒤 query를 이용해서 원하는 데이터를 가져오거나 insert할 수 있다.
위 코드는 1번째 db에서 select한 데이터를 2번째 db에 insert하는 상황을 대비하여 짠 코드 예시이다.
'Computer Engineering > Node.js' 카테고리의 다른 글
[nodejs] 알리고 api로 카톡 메세지 전송하기 -2 (0) | 2022.05.19 |
---|---|
[nodejs] 알리고 api로 문자 메세지 전송하기 -1 (0) | 2022.05.18 |
[nodejs] Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client (0) | 2022.05.13 |
[node js] env 환경변수 설정하기 (0) | 2022.04.14 |
[node js] econnrefused 127.0.0.1:3306 sql connect err 해결 (0) | 2022.04.14 |