news 2026/4/15 16:33:59

【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/4/8 15:28:58

模型微调自动化:基于Llama Factory的超参数搜索与最佳配置推荐

模型微调自动化:基于Llama Factory的超参数搜索与最佳配置推荐 在算法团队的实际工作中,每次接手新任务时手动网格搜索超参数不仅耗时耗力,还会消耗大量计算资源。本文将介绍如何利用Llama Factory框架实现超参数自动搜索与最佳配置推荐&…

作者头像 李华
网站建设 2026/4/12 1:04:44

CTF从入门到上头

CTF从入门到上头 声明:仅对学习介绍引导,之后的学习之路可能会道阻且长。 各位安全圈的小伙伴们,大家好! 还记得我第一次参加CTF(Capture The Flag)时,面对满屏的代码和不知所云的题目描述&a…

作者头像 李华
网站建设 2026/4/4 19:41:31

树莓派视频项目全攻略:从播放到监控一机搞定

树莓派在视频领域的应用已经非常广泛,从简单的媒体播放到复杂的视频处理系统,这款小巧的单板计算机都能胜任。无论是搭建家庭影院、创建视频监控系统,还是进行视频流媒体传输,树莓派都能以低成本实现高效能。对于想要探索视频技术…

作者头像 李华
网站建设 2026/4/8 22:25:50

从0到1:用快马打造企业级媒体内容生产系统

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 创建一个企业级媒体内容管理系统,功能包括:1. 多用户协作编辑界面 2. 自动内容审核模块 3. 智能标签和分类系统 4. 跨平台发布到微信、微博、抖音等 5. 数据…

作者头像 李华
网站建设 2026/4/4 19:41:27

如何用AI快速搭建Kafka开发环境?

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 创建一个自动化脚本,能够自动下载最新版本的Kafka,解压并配置必要的环境变量。脚本应包含启动Zookeeper和Kafka服务器的命令,并验证服务是否正常…

作者头像 李华
网站建设 2026/4/13 1:15:48

XFTP7在企业文件同步中的实战应用

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 开发一个企业级文件同步系统,基于XFTP7实现跨地域文件自动同步。系统需支持:1. 定时同步和实时监控文件变化;2. 冲突检测和版本管理&#xff1b…

作者头像 李华