关于MySQL连接时报PROTOCOL_CONNECTION_LOST的处理

文章介绍了当MySQL的wait_timeout设置过短时可能导致连接丢失的问题,提供了解决方案:报错时检查code是否为PROTOCOL_CONNECTION_LOST并重连,以及设置wait_timeout和interactive_timeout的具体步骤。
部署运行你感兴趣的模型镜像
原因:默认或者设置的wait_timeout 时长过短导致
解决方案:
1、报错重连:判断报错code===’PROTOCOL_CONNECTION_LOST‘时重连
this.connection.on('error', err => {
    if (err.code === 'PROTOCOL_CONNECTION_LOST') {
        log.error('mysql error ===> PROTOCOL_CONNECTION_LOST')
        this.init()
    }
})
2、设置MySQL的interactive_timeout或wait_timeout
设置wait_timeout :
mysql> set global wait_timeout=864000;
Query OK, 0 rows affected (0.00 sec)
若无效,继续设置interactive_timeout:
mysql> set global interactive_timeout=864000;
Query OK, 0 rows affected (0.00 sec)
查看信息:
mysql> SHOW GLOBAL VARIABLES LIKE '%timeout%';
+-----------------------------+----------+
| Variable_name               | Value    |
+-----------------------------+----------+
| connect_timeout             | 10       |
| delayed_insert_timeout      | 300      |
| have_statement_timeout      | YES      |
| innodb_flush_log_at_timeout | 1        |
| innodb_lock_wait_timeout    | 120      |
| innodb_rollback_on_timeout  | OFF      |
| interactive_timeout         | 864000   |
| lock_wait_timeout           | 31536000 |
| net_read_timeout            | 30       |
| net_write_timeout           | 60       |
| rpl_stop_slave_timeout      | 31536000 |
| slave_net_timeout           | 60       |
| wait_timeout                | 864000   |
+-----------------------------+----------+
13 rows in set (0.00 sec)

您可能感兴趣的与本文相关的镜像

Stable-Diffusion-3.5

Stable-Diffusion-3.5

图片生成
Stable-Diffusion

Stable Diffusion 3.5 (SD 3.5) 是由 Stability AI 推出的新一代文本到图像生成模型,相比 3.0 版本,它提升了图像质量、运行速度和硬件效率

<think>我们正在回答用户关于Node.js连接MySQL的方法问题。根据引用内容,我们已经有了几种不同的示例代码,但需要整理成更系统、易于理解的步骤。 注意:用户的问题已经明确是“我想查找node连接mysql的方法”,所以我们需要提供详细的步骤和示例。 我们将按照以下步骤组织回答: 1. 安装MySQL驱动 2. 创建数据库连接(包括三种方式:直接连接连接池、使用Express框架) 3. 执行SQL查询 4. 关闭连接 同时,我们注意到引用中提到了三种连接方式(引用[5]提到连接池),所以我们会分别说明。 另外,根据用户上一次的问题(关于MySQL的启动和关闭),我们可以假设用户可能是在本地开发环境中使用MySQL,因此示例中会使用localhost和默认端口。 注意:在回答中,我们会引用提供的引用内容,并在适当的地方添加引用标记。 </think>### Node.js连接MySQL的详细方法 #### 🔧 核心步骤与示例代码 ##### 1. **安装MySQL驱动** ```bash npm install mysql --save # 基础驱动[^2] # 或搭配Express框架 npm install express mysql --save[^1][^4] ``` ##### 2. **建立数据库连接(三种方式)** ###### 方式一:直接连接(适合简单查询) ```javascript const mysql = require('mysql'); // 创建连接配置[^2][^3] const connection = mysql.createConnection({ host: 'localhost', // 数据库地址 user: 'root', // 用户名 password: '123456', // 密码 port: '3306', // 端口(默认3306) database: 'test_db' // 数据库名 }); // 连接数据库 connection.connect(err => { if(err) { console.error('连接失败: ' + err.stack); return; } console.log('连接成功, 线程ID: ' + connection.threadId); }); // 执行查询[^2] connection.query('SELECT * FROM users', (err, results) => { if(err) throw err; console.log(results); }); // 关闭连接[^3] connection.end(); ``` ###### 方式二:连接池(推荐用于生产环境) ```javascript const pool = mysql.createPool({ connectionLimit: 10, // 最大连接数[^5] host: 'localhost', user: 'root', password: '123456', database: 'test_db', multipleStatements: true // 允许多条SQL语句 }); // 获取连接 pool.getConnection((err, connection) => { if(err) throw err; connection.query('SELECT * FROM products', (error, results) => { connection.release(); // 释放连接连接池 if(error) throw error; console.log(results); }); }); ``` ###### 方式三:Express框架集成 ```javascript const express = require('express'); const mysql = require('mysql'); const app = express(); // 创建数据库连接[^4] const conn = mysql.createConnection({ host: 'localhost', user: 'root', password: '1234', database: 'ecommerce' }); // 测试连接 conn.connect(err => { if(err) console.error('连接错误:', err); else console.log('数据库连接成功'); }); // Express路由示例 app.get('/users', (req, res) => { conn.query('SELECT * FROM users', (err, results) => { if(err) return res.status(500).json({ error: err.message }); res.json(results); }); }); app.listen(3000, () => { console.log('服务器运行在 http://localhost:3000'); }); ``` #### ⚠️ 关键注意事项 1. **安全防护** ```javascript // 使用参数化查询防止SQL注入 connection.query( 'SELECT * FROM users WHERE id = ?', [userId], (err, results) => {...} ); ``` 2. **错误处理** ```javascript connection.on('error', err => { if(err.code === 'PROTOCOL_CONNECTION_LOST') console.error('数据库连接断开'); else throw err; }); ``` 3. **连接配置** - `charset`: 字符编码设置(推荐`'utf8mb4'`) - `timeout`: 连接超时时间(毫秒) - `ssl`: 加密连接配置[^3] #### 🔄 工作流程示意图 ```mermaid graph TD A[安装mysql模块] --> B[创建连接/连接池] B --> C[执行SQL查询] C --> D[处理结果集] D --> E[释放连接] E --> F[错误处理] ``` > **最佳实践提示**:生产环境建议使用连接池管理数据库连接,避免频繁创建/销毁连接的开销。连接池默认上限10个连接(可通过`connectionLimit`调整)[^5],每个请求完成后需调用`connection.release()`释放资源。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值