在 CentOS 上配置 Node.js 与数据库连接的实操指南
一 环境准备
- 安装 Node.js(建议通过 NodeSource 仓库获取较新 LTS 版本,例如 16.x):
- 安装仓库并安装:curl -sL https://rpm.nodesource.com/setup_16.x | sudo bash -;sudo yum install -y nodejs
- 验证版本:node -v、npm -v
- 安装数据库(示例为 MySQL 与 MongoDB):
- MySQL:sudo yum install -y mysql-server;sudo systemctl start mysqld;sudo systemctl enable mysqld
- MongoDB:导入公钥并配置仓库后安装(示例为 4.4),然后启动与自启:sudo yum install -y mongodb-org;sudo systemctl start mongod;sudo systemctl enable mongod
- 防火墙放行端口(示例:Node 服务 8080,MongoDB 27017):
- 查看状态:systemctl status firewalld
- 放行端口:firewall-cmd --zone=public --add-port=8080/tcp --permanent;firewall-cmd --zone=public --add-port=27017/tcp --permanent
- 生效:firewall-cmd --reload
二 数据库初始化与权限
- MySQL 初始化与账户授权:
- 登录:mysql -u root -p
- 建库建用户并授权:CREATE DATABASE mydatabase; CREATE USER ‘myuser’@‘localhost’ IDENTIFIED BY ‘mypassword’; GRANT ALL PRIVILEGES ON mydatabase.* TO ‘myuser’@‘localhost’; FLUSH PRIVILEGES;
- MongoDB 基础验证(本机测试):
- 命令行连接:mongo;执行 show dbs 查看默认库(如 admin、config、local),确认服务可用
三 Node.js 连接示例
- 使用环境变量管理敏感信息(.env 示例):
- DATABASE_HOST=localhost;DATABASE_USER=myuser;DATABASE_PASSWORD=mypassword;DATABASE_NAME=mydatabase
- MySQL(mysql 包,回调风格):
- 安装驱动:npm install mysql dotenv
- 代码示例:
- const mysql = require(‘mysql’); const dotenv = require(‘dotenv’); dotenv.config();
- const conn = mysql.createConnection({ host: process.env.DATABASE_HOST, user: process.env.DATABASE_USER, password: process.env.DATABASE_PASSWORD, database: process.env.DATABASE_NAME });
- conn.connect(err => { if (err) throw err; console.log(‘MySQL connected’); });
- // … your queries
- conn.end();
- PostgreSQL(pg 包,客户端方式):
- 安装驱动:npm install pg dotenv
- 代码示例:
- const { Client } = require(‘pg’); const dotenv = require(‘dotenv’); dotenv.config();
- const client = new Client({ user: process.env.DATABASE_USER, host: process.env.DATABASE_HOST, database: process.env.DATABASE_NAME, password: process.env.DATABASE_PASSWORD, port: 5432 });
- await client.connect(); console.log(‘PostgreSQL connected’);
- // … your queries
- await client.end();
- MongoDB(mongodb 包,官方驱动):
- 安装驱动:npm install mongodb dotenv
- 代码示例:
- const { MongoClient } = require(‘mongodb’); const dotenv = require(‘dotenv’); dotenv.config();
- const uri = ‘mongodb://localhost:27017’; const client = new MongoClient(uri);
- await client.connect(); console.log(‘MongoDB connected’);
- const db = client.db(‘mydatabase’); const col = db.collection(‘documents’);
- await col.insertOne({ name: ‘Alice’, age: 25 }); console.log(‘Inserted:’, res.insertedId);
- await client.close();
四 安全与性能建议
- 使用 环境变量 或配置中心管理数据库凭据,避免硬编码;为不同环境(开发/测试/生产)使用独立配置
- 启用 连接池(如 mysql 的 createPool、pg 的 Pool)以复用连接、提升并发性能与稳定性
- 限制数据库访问来源:仅允许应用服务器 IP 访问数据库端口;必要时开启 TLS/SSL 加密传输
- 最小权限原则:数据库账户仅授予目标库/表的必要权限;避免使用 root 远程连接
- 防火墙与端口:仅放行必要端口;变更后执行 firewall-cmd --reload 使规则生效
五 常见问题排查
- 服务未启动:systemctl status mysqld/mongod 查看状态与日志,必要时 sudo systemctl restart mysqld/mongod
- 端口未放行或被占用:ss -tulnp | grep 端口;firewall-cmd --query-port=端口/tcp;必要时调整 firewalld 规则并重载
- 远程连接被拒:核对数据库绑定地址(如 MySQL 的 bind-address)、用户主机限制(如 ‘myuser’@‘%’)、云安全组/本机防火墙
- 认证失败:确认用户名、密码、库名、端口与驱动版本匹配;MongoDB 注意 SRV/普通 URI 写法差异
- 连接泄漏:确保 query/request 结束后调用 release/end/close;生产环境务必使用连接池并设置合理的最大连接数与超时