news 2026/9/23 20:19:49

【MySQL】node.js 如何判断连接池是否正确连接上了?

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【MySQL】node.js 如何判断连接池是否正确连接上了?

在使用mysql2/promisecreatePool时,仅仅调用createPool是不会立即去连接数据库的。它是“懒加载”的,只有在执行第一次查询或者手动请求连接时,才会真正尝试建立连接。

要判断连接是否正确以及数据库是否存在,推荐以下两种方式:

方法一:手动获取并释放一个连接(推荐)

这是最标准的方法。通过调用pool.getConnection(),你可以触发一次真实的连接尝试。

importmysqlfrom'mysql2/promise';asyncfunctioncheckConnection(){letpool=mysql.createPool({host:configData.db_host,user:configData.db_user,database:configData.db_database,password:configData.db_password,waitForConnections:true,connectionLimit:10,queueLimit:0});try{// 尝试获取一个连接constconnection=awaitpool.getConnection();console.log('数据库连接成功!');// 释放连接回连接池connection.release();returnpool;}catch(err){// 判断错误类型if(err.code==='ER_BAD_DB_ERROR'){console.error('错误:数据库不存在!');}elseif(err.code==='ER_ACCESS_DENIED_ERROR'){console.error('错误:用户名或密码错误!');}elseif(err.code==='ECONNREFUSED'){console.error('错误:无法连接到数据库服务器(IP或端口错误)!');}else{console.error('连接失败,错误代码:'+err.code);console.error(err.message);}returnnull;}}constmyPool=awaitcheckConnection();

方法二:执行一个简单的测试查询

如果你不想手动获取连接,可以直接执行一个极简查询(如SELECT 1)。

try{// 这种方式也会触发一次连接请求awaitpool.query('SELECT 1');console.log('数据库连接验证通过');}catch(err){if(err.code==='ER_BAD_DB_ERROR'){console.error('数据库不存在');}else{console.error('连接失败:',err.message);}}

如何识别“数据库不存在”?

catch块中,你可以通过检查err.code属性来识别具体的错误:

  • ER_BAD_DB_ERROR(错误代码: 1049): 表示你指定的database在服务器上不存在。
  • ER_ACCESS_DENIED_ERROR(错误代码: 1045): 表示用户名或密码不对。
  • ENOTFOUND/EAI_AGAIN: 表示host地址解析失败。
  • ECONNREFUSED: 表示数据库服务没启动,或者端口号填错了。

进阶:如果数据库不存在,自动创建它

有时你希望程序启动时如果发现数据库不存在,就自动创建一个。这时候你创建 Pool 时不能指定 database,连接成功后再创建:

// 1. 先不指定数据库连接到服务器constpoolWithoutDB=mysql.createPool({host:configData.db_host,user:configData.db_user,password:configData.db_password});// 2. 执行创建命令awaitpoolWithoutDB.query(`CREATE DATABASE IF NOT EXISTS \`${configData.db_database}\``);// 3. 此时再关闭这个 pool,或者直接切换到目标数据库使用awaitpoolWithoutDB.end();// 4. 然后创建正式带数据库名的 poolconstpool=mysql.createPool({...configData});

总结

要判断连接情况,请在初始化后立刻执行一次await pool.getConnection(),并捕获err.code === 'ER_BAD_DB_ERROR'来识别数据库不存在的情况。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/20 22:36:18

效率对比:传统开发 vs AI生成Vue3图表项目

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 请生成一个完整的Vue3ECharts项目代码,用于对比人工开发和AI生成的效率差异。要求:1. 实现一个包含5种复杂图表(如桑基图、雷达图等&#xff09…

作者头像 李华
网站建设 2026/9/20 18:59:08

创意无限:用Llama Factory和云端GPU打造你的AI内容工厂

创意无限:用Llama Factory和云端GPU打造你的AI内容工厂 在当今内容爆炸的时代,自媒体团队面临着持续产出高质量内容的巨大压力。AI生成内容(AIGC)技术为内容创作带来了革命性的变化,但很多团队却受限于本地硬件性能不足,无法稳定高…

作者头像 李华
网站建设 2026/9/22 11:13:05

零基础部署CRNN OCR:从镜像启动到API调用的完整指南

零基础部署CRNN OCR:从镜像启动到API调用的完整指南 📖 项目简介 OCR(Optical Character Recognition,光学字符识别)是将图像中的文字内容转化为可编辑文本的关键技术,广泛应用于文档数字化、票据识别、车牌…

作者头像 李华
网站建设 2026/9/23 19:51:57

周末项目:和孩子一起用Llama Factory搭建会讲故事的AI

周末项目:和孩子一起用Llama Factory搭建会讲故事的AI 作为一名程序员爸爸,我一直想带孩子体验AI技术的魅力,但家里的电脑性能有限,无法流畅运行大型语言模型。最近我发现了一个有趣的解决方案:使用Llama Factory搭建一…

作者头像 李华
网站建设 2026/9/20 10:49:41

多模态扩展:用Llama Factory微调视觉-语言联合模型

多模态扩展:用Llama Factory微调视觉-语言联合模型实战指南 在AI领域,多模态模型正成为研究热点,它能同时处理文本和图像数据,实现更智能的跨模态理解。本文将带你使用Llama Factory框架,完成视觉-语言联合模型的微调任…

作者头像 李华
网站建设 2026/9/20 19:01:17

电商平台如何用Redis Manager应对高并发?

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 开发一个针对电商场景的Redis管理模块,重点实现秒杀活动的缓存策略。包括库存预热、分布式锁机制、热点数据自动隔离和熔断保护功能。要求能实时显示缓存命中率、请求排…

作者头像 李华