本文使用场景

服务器修改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

网络前置放行要求

  1. 云服务器:安全组只放行SSH端口(默认22),不用开放3306外网,依靠SSH隧道加密访问数据库,安全性更高;
  2. 服务器内部防火墙(firewalld/ufw)放行SSH端口;
  3. 本地电脑关闭防火墙、杀毒软件拦截,避免Navicat连接被拦截。

三、第一步:Navicat分别创建本地、远程两套数据库连接

新建线上远程MySQL连接(SSH隧道方案,推荐生产使用)

生产环境不建议直接对外开放3306端口,优先使用SSH隧道加密中转,规避数据库公网暴露风险。

  1. Navicat顶部「连接」→ 选择「MySQL」;
  2. 常规标签页填写MySQL服务信息(全部填写服务器本地访问参数):
    • 连接名:线上-生产-业务库(SSH隧道)(自定义命名,方便区分环境)
    • 主机名/IP:127.0.0.1
    • 端口:3306
    • 用户名:台账记录的线上业务账号
    • 密码:台账记录的线上数据库密码
  3. 切换到【SSH】标签页,开启SSH隧道:
    • 勾选「使用SSH通道」
    • SSH主机:服务器公网IP
    • SSH端口:服务器SSH端口(默认22)
    • SSH用户名:服务器登录账号
    • 认证方式二选一:
      • 密码:填写服务器登录密码
      • 私钥:选择本地.pem私钥文件(云服务器标配,更安全)
  4. 其余高级配置全部保持默认,点击测试连接
    • 连接成功:SSH通道、MySQL账号、密码全部正常;
    • 连接失败:按文末报错清单逐项排查;
  5. 测试正常后点击「确定」保存连接。

补充:若需要直连3306(不推荐),关闭SSH通道,填写公网IP+3306,云安全组放行3306即可。

新建本地开发MySQL连接

  1. 再次新建MySQL连接;
  2. 参数配置:
    • 连接名:本地-开发-业务库
    • 主机:127.0.0.1
    • 端口:3306
    • 填写本地MySQL账号、本地密码
  3. 测试连通后保存。

连接失败通用排查方向

  1. 1045 访问拒绝:账号密码错误 / 账号Host不匹配,重新执行MySQL改密+权限刷新;
  2. SSH报错超时:云安全组、服务器防火墙未放行SSH端口;
  3. SSH能连通、MySQL报错:服务器内MySQL限制本地访问、账号无127.0.0.1权限;
  4. 本地服务器可登录、Navicat外网连不上:MySQL配置文件bind-address限制了访问IP。

四、第二步:MySQL账号权限双向核对(改密后必做)

分别打开线上、本地连接的查询编辑器,执行SQL核对账号权限,保证线上、本地权限规则对齐。

线上服务器权限核查SQL

1
2
3
4
5
6
-- 查询业务账号所有授权主机
SELECT user,host FROM mysql.user WHERE user='biz_custom_db';

-- 分别查询全网、本地Host账号权限
SHOW GRANTS FOR 'biz_custom_db'@'%';
SHOW GRANTS FOR 'biz_custom_db'@'0.0.0.0';

✅ 正常标准:可查询到%、0.0.0.0两条 Host 记录,拥有目标业务库完整增删改查权限。

授予全网访问全库权限
1
2
3
4
5
GRANT ALL ON biz_project_db.* TO 'biz_custom_db'@'%';
-- 授予服务器本地访问权限
GRANT ALL ON biz_project_db.* TO 'biz_custom_db'@'0.0.0.0';
-- 刷新权限生效
FLUSH PRIVILEGES;

本地开发库权限核查
本地执行同款查询 SQL,确认本地开发账号权限充足;开发环境可直接使用 root 全权限账号,不用做多 Host 适配。

五、第三步:Navicat 结构同步:比对表、字段、索引

适用于本地开发改表后,核对线上库结构是否同步,区分字段差异、缺失表、索引不一致。

操作步骤

  1. Navicat 顶部菜单栏:工具 → 结构同步;
  2. 源连接:选择「本地 - 开发 - 业务库」,数据库选择本地biz_project_db;
  3. 目标连接:选择「线上 - 生产 - 业务库 (SSH 隧道)」,数据库选择线上biz_project_db;
  4. 点击「比对」,等待扫描完成。

比对结果处理规范

  1. 无任何差异:线上线下库表结构完全一致,无需改动;
  2. 存在字段 / 表差异:
    开发环境:可直接勾选变更,一键同步结构;
    生产环境:禁止一键自动执行,先全量备份线上数据库,人工确认每一处变更,按需手动执行 SQL 更新;
  3. 字段类型、长度、主键、索引不一致:优先以正式业务需求为准,统一两边配置。

六、第四步:数据同步比对:核对业务行数据

用于校验本地测试数据、线上真实业务数据是否一致,排查脏数据、缺数据问题。

工具入口

顶部 工具 → 数据同步

源:本地开发库;目标:线上生产库
点击比对,区分三类数据:新增行、修改行、待删除行

运维约束

  1. 生产环境严禁全量覆盖,只针对单张业务表单独比对;
  2. 正式业务数据优先以线上为准,测试数据以本地为准;
  3. 简易兜底方案:单张表右键「转储 SQL 文件」,分别导出本地、线上 SQL,用文本工具对比内容。

七、标准化运维流程(后续改密码 / 改库通用流程)

  1. 服务器 MySQL 执行ALTER USER修改账号密码,执行FLUSH PRIVILEGES刷新权限;
  2. Navicat 重测线上 SSH 隧道数据库连接,确认新密码可正常登录;
  3. 更新项目数据库配置文件,清理框架配置缓存;
  4. Navicat 结构同步,确认线上线下库表无异常改动;
  5. 网站前台全功能登录测试,确认数据库读写正常;
  6. 更新本地密码台账,线上密码线下加密保存,禁止明文公开。

八、高频报错自查清单

  1. Navicat 可连数据库,网站报错密码错误:配置文件存在多余空格、框架缓存未清理;
  2. SSH 隧道连通失败:安全组没放通 22 端口、服务器 SSH 服务异常;
  3. 修改 MySQL 密码后,旧密码依旧能登录:缺少FLUSH PRIVILEGES权限刷新;
  4. 本地新增数据表,线上查不到:未做结构同步,线上库缺失对应表;
  5. 线上报错 SQL 语法异常:本地、线上 MySQL 版本不一致,字段语法存在兼容性差异。