第18-19天:从数据库隔离到后端打通(3307端口 + Navicat 16 + Node.js连接MySQL)

3 阅读3分钟

这两天把数据库环境彻底理顺了:3306留给学校作业,3307专供无人机项目,换了Navicat 16,最后用 mysql2 把后端和数据库连了起来。


一、为什么要折腾3307端口?

学校作业用的MySQL跑在3306(小皮管理),如果直接在3306里建 drone_platform 库,作业和项目数据会混在一起。3307端口是复制出来的独立MySQL实例,数据存在单独的 MySQL5.7.26_3307/data 文件夹,两套环境完全隔离。

效果:

  • 3306(作业库)和3307(项目库)互不干扰
  • 小皮崩了不影响项目数据
  • 项目代码里固定连3307,不用改来改去

坑与解决:

  • 复制MySQL文件夹后需要改 my.ini 里的端口和数据目录
  • 初始化新数据目录用 mysqld --initialize-insecure
  • 注册Windows服务:mysqld --install MySQL_3307 --defaults-file="...my.ini"
  • 服务启动:net start MySQL_3307

二、Navicat 16 安装 + 脚本重置(不用补丁)

Navicat 16.3 下载链接来自官方服务器:

text

https://download.navicat.com.cn/download/navicat163_premium_cs_x64.exe

为什么不用17?
17的Windows重置脚本不够稳定,16社区验证充分,一次配置长期省心。

Navicat Premium 16 支持 14 天全功能试用。

为了延续试用状态,可以通过清理注册表中的试用记录来实现。

具体方法:创建 .bat 脚本,执行 reg delete 命令删除 HKEY_CURRENT_USER\Software\PremiumSoft\NavicatPremium 键值,重新打开后试用期恢复为 14 天。


三、Node.js 连接 MySQL

安装 mysql2

bash

npm install mysql2

连接代码 db.js

javascript

const mysql = require('mysql2');

const connection = mysql.createConnection({
    host: 'localhost',
    port: 3307,           // 项目专用数据库
    user: 'root',
    password:'your_password',   // 填写自己端口号密码
    database: 'drone_platform'
});

connection.connect((err) => {
    if (err) {
        console.error('❌ 连接失败:', err.message);
        return;
    }
    console.log('✅ 数据库连接成功!');
});

// 插入测试数据
connection.query("INSERT INTO users (name) VALUES ('无人机1')", (err, result) => {
    if (!err) console.log('✅ 插入成功,id:', result.insertId);
});

// 查询数据
connection.query("SELECT * FROM users", (err, results) => {
    if (!err) console.log('📋 users表数据:', results);
});

connection.end();

关于代码理解点:

connection.query() 是 mysql2 包提供的方法

作用就是:把 SQL 语句发给 MySQL,MySQL 执行完后把结果返回。

query 就是 JS 和 MySQL 之间的“翻译官”。


运行

bash

node db.js

输出示例

text

✅ 数据库连接成功!
✅ 插入成功,id:1
📋 users表数据: [ { id: 1, name: '测试飞手' } ]

四、今天踩的坑 & 解决

原因解决
Navicat看不到数据库没在高级选项卡指定数据库名填写 drone_platform
CMD找不到mysql命令环境变量没配用 cd 进bin目录再执行
mysql2 装不上在系统CMD而非VS Code终端运行切换到VS Code终端
重复插入多条数据用 nodemon 跑脚本,每次保存重复执行改用 node db.js
3307服务未启动重启电脑后服务没自动跑net start MySQL_3307

五、核心理解

  • 数据不在Navicat里:数据存在MySQL的数据目录,Navicat只是查看工具,换版本不影响数据。
  • 3307不会白折腾:本地开发用3307,将来部署云端只需改 .env 里的端口,不影响代码逻辑。
  • query 是JS和MySQL的翻译官:JS把SQL字符串发给MySQL,MySQL执行后返回结果。
  • id自增是MySQL设置的:建表时的 AUTO_INCREMENT,不用JS手动管理。
  • 占位符 ? 用来防SQL注入:现阶段写固定值不涉及安全问题,以后写动态接口时再换。