Navicat本地&服务器MySQL数据库双向对比排查教程
本文使用场景
服务器修改MySQL账号密码、权限配置、库表结构变更后,使用Navicat双向核对本地开发库、线上服务器库,排查账号连通、权限、表结构、数据差异。
一、Navicat Premium软件基础介绍
软件简介
Navicat 是一款主流可视化数据库管理工具,支持 MySQL、MariaDB、PostgreSQL、SQL Server 等绝大多数关系型数据库。支持可视化连接、SQL编辑、数据备份、结构比对、数据比对、SSH隧道加密连接等功能。日常开发、服务器运维中常用来统一管理本地开发数据库与线上生产数据库,方便做结构同步、数据核对、账号权限排查。
官方信息
- 官方网站:https://www.navicat.com/
- 常用稳定版本:Navicat Premium 15 / Navicat Premium 16
- 核心优势:可视化操作、自带结构/数据同步、支持SSH隧道、适配Windows/macOS,大幅降低数据库运维门槛。
二、前置准备
数据库信息标准化台账(建议本地备忘录存档)
线上服务器数据库台账
| 配置项 | 填写规范示例 |
|---|---|
| 服务器公网IP | 云服务器外网地址 |
| SSH端口 | 服务器SSH端口,默认22 |
| SSH登录账号 | 服务器登录用户名 |
| SSH登录密码/密钥 | 服务器登录凭证 |
| 数据库端口 | 3306(MySQL默认端口) |
| 数据库账号 | biz_custom_db(自定义业务账号,不要使用root对外) |
| 账号访问Host | %(全网访问)、0.0.0.0(服务器本地访问) |
| 数据库密码 | 自定义高强度随机密码 |
| 业务数据库名 | biz_project_db |
本地开发数据库台账
| 配置项 | 常规本地值 |
|---|---|
| 连接地址 | 127.0.0.1 / localhost |
| 端口 | 3306 |
| 本地账号 | root / local_dev_user |
| 本地密码 | 本地自定义密码 |
| 本地库名 | 和线上库名保持完全一致:biz_project_db |
网络前置放行要求
- 云服务器:安全组只放行SSH端口(默认22),不用开放3306外网,依靠SSH隧道加密访问数据库,安全性更高;
- 服务器内部防火墙(firewalld/ufw)放行SSH端口;
- 本地电脑关闭防火墙、杀毒软件拦截,避免Navicat连接被拦截。
三、第一步:Navicat分别创建本地、远程两套数据库连接
新建线上远程MySQL连接(SSH隧道方案,推荐生产使用)
生产环境不建议直接对外开放3306端口,优先使用SSH隧道加密中转,规避数据库公网暴露风险。
- Navicat顶部「连接」→ 选择「MySQL」;
- 常规标签页填写MySQL服务信息(全部填写服务器本地访问参数):
- 连接名:
线上-生产-业务库(SSH隧道)(自定义命名,方便区分环境) - 主机名/IP:
127.0.0.1 - 端口:3306
- 用户名:台账记录的线上业务账号
- 密码:台账记录的线上数据库密码
- 连接名:
- 切换到【SSH】标签页,开启SSH隧道:
- 勾选「使用SSH通道」
- SSH主机:服务器公网IP
- SSH端口:服务器SSH端口(默认22)
- SSH用户名:服务器登录账号
- 认证方式二选一:
- 密码:填写服务器登录密码
- 私钥:选择本地
.pem私钥文件(云服务器标配,更安全)
- 其余高级配置全部保持默认,点击测试连接:
- 连接成功:SSH通道、MySQL账号、密码全部正常;
- 连接失败:按文末报错清单逐项排查;
- 测试正常后点击「确定」保存连接。
补充:若需要直连3306(不推荐),关闭SSH通道,填写公网IP+3306,云安全组放行3306即可。
新建本地开发MySQL连接
- 再次新建MySQL连接;
- 参数配置:
- 连接名:
本地-开发-业务库 - 主机:
127.0.0.1 - 端口:3306
- 填写本地MySQL账号、本地密码
- 连接名:
- 测试连通后保存。
连接失败通用排查方向
- 1045 访问拒绝:账号密码错误 / 账号Host不匹配,重新执行MySQL改密+权限刷新;
- SSH报错超时:云安全组、服务器防火墙未放行SSH端口;
- SSH能连通、MySQL报错:服务器内MySQL限制本地访问、账号无
127.0.0.1权限; - 本地服务器可登录、Navicat外网连不上:MySQL配置文件
bind-address限制了访问IP。
四、第二步:MySQL账号权限双向核对(改密后必做)
分别打开线上、本地连接的查询编辑器,执行SQL核对账号权限,保证线上、本地权限规则对齐。
线上服务器权限核查SQL
1 | -- 查询业务账号所有授权主机 |
✅ 正常标准:可查询到%、0.0.0.0两条 Host 记录,拥有目标业务库完整增删改查权限。
1 | GRANT ALL ON biz_project_db.* TO 'biz_custom_db'@'%'; |
本地开发库权限核查
本地执行同款查询 SQL,确认本地开发账号权限充足;开发环境可直接使用 root 全权限账号,不用做多 Host 适配。
五、第三步:Navicat 结构同步:比对表、字段、索引
适用于本地开发改表后,核对线上库结构是否同步,区分字段差异、缺失表、索引不一致。
操作步骤
- Navicat 顶部菜单栏:工具 → 结构同步;
- 源连接:选择「本地 - 开发 - 业务库」,数据库选择本地biz_project_db;
- 目标连接:选择「线上 - 生产 - 业务库 (SSH 隧道)」,数据库选择线上biz_project_db;
- 点击「比对」,等待扫描完成。
比对结果处理规范
- 无任何差异:线上线下库表结构完全一致,无需改动;
- 存在字段 / 表差异:
开发环境:可直接勾选变更,一键同步结构;
生产环境:禁止一键自动执行,先全量备份线上数据库,人工确认每一处变更,按需手动执行 SQL 更新; - 字段类型、长度、主键、索引不一致:优先以正式业务需求为准,统一两边配置。
六、第四步:数据同步比对:核对业务行数据
用于校验本地测试数据、线上真实业务数据是否一致,排查脏数据、缺数据问题。
工具入口
顶部 工具 → 数据同步
源:本地开发库;目标:线上生产库
点击比对,区分三类数据:新增行、修改行、待删除行
运维约束
- 生产环境严禁全量覆盖,只针对单张业务表单独比对;
- 正式业务数据优先以线上为准,测试数据以本地为准;
- 简易兜底方案:单张表右键「转储 SQL 文件」,分别导出本地、线上 SQL,用文本工具对比内容。
七、标准化运维流程(后续改密码 / 改库通用流程)
- 服务器 MySQL 执行ALTER USER修改账号密码,执行FLUSH PRIVILEGES刷新权限;
- Navicat 重测线上 SSH 隧道数据库连接,确认新密码可正常登录;
- 更新项目数据库配置文件,清理框架配置缓存;
- Navicat 结构同步,确认线上线下库表无异常改动;
- 网站前台全功能登录测试,确认数据库读写正常;
- 更新本地密码台账,线上密码线下加密保存,禁止明文公开。
八、高频报错自查清单
- Navicat 可连数据库,网站报错密码错误:配置文件存在多余空格、框架缓存未清理;
- SSH 隧道连通失败:安全组没放通 22 端口、服务器 SSH 服务异常;
- 修改 MySQL 密码后,旧密码依旧能登录:缺少FLUSH PRIVILEGES权限刷新;
- 本地新增数据表,线上查不到:未做结构同步,线上库缺失对应表;
- 线上报错 SQL 语法异常:本地、线上 MySQL 版本不一致,字段语法存在兼容性差异。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 WEIXING.ME!
