发布时间:2026-06-02 14: 16: 00
开发库、测试库和正式库各管各的时间一长,表的字段、索引还有视图慢慢就容易对不上号。很多人都会关心Navicat里的结构同步功能到底要怎么操作,以及在同步之前又该怎样去比较两边库的差异;有一点操作上要留心的是,不能一上来就直接去点执行按钮。因为结构同步一旦跑起来,它会去改动目标库里对象的定义,像删掉某个字段、改变数据类型、动了约束条件这些,全都有可能给已有的数据造成影响。好在Navicat的结构同步工具可以先比出两个数据库在结构上的差异,然后生成一份等着去执行的变更脚本。
一、Navicat怎么做结构同步
开始动手同步之前,先得把哪一边的数据库当成标准版定下来,这个方向要是搞反了,原本是想更新测试库,结果说不定把旧结构给同步进了新库里。
1、先给目标库做一次备份:动手同步之前,第一步就是给准备被修改的那个库做一次备份,在Navicat里打开目标连接,先跑一遍备份流程;如果库里面已经存了不少业务数据,那这一步就更得小心,毕竟改表结构这种事随时可能造成数据的丢失。Navicat官方的帮助文档里同样给出过建议,要求在执行结构上的变动之前,先用备份工具把数据库完整存下来。
2、打开结构同步工具:接着在菜单栏里找到【工具】下面的【结构同步】选项,打开向导之后,就要去指定哪边是源数据库、哪边是目标数据库,Source代表那个被当作参照的库,Target则是即将要被改动的那一个。这个地方不能光凭连接名称来认,服务器地址、端口号、具体的数据库名以及账号的权限,这些信息都值得再核对一遍,以免指错了方向。
3、把比较的范围设好:到了选要比较哪些对象那一步,得看具体任务的实际需要来勾选,假如这一回只打算调整表结构,就别把视图、函数、存储过程还有事件这些一股脑全选上;把比较的范围收得窄一些,后面生成的脚本读起来会更容易,也能顺带减少不小心把无关的对象给改掉的麻烦。
4、确认过脚本再去执行:等比较完毕,进到脚本的页面里,把Navicat自动生成的每一条变更语句从头到尾看一遍,确认没有问题了,再去点击执行按钮。执行之后的结果会展示在消息日志当中,万一出了什么差错,也方便回头查。另外,Navicat还支持把当前的同步配置给存下来,后面再要跑类似的同步时,直接加载出来用就行了。
二、Navicat结构同步前怎么比较差异
在结构同步的具体操作里,真正要花心思去磨的,往往不是最后点一下执行按钮那一下子,而是更前面的环节:你得一条一条地去判,哪些差异是应该被留下来的,哪些差异才真正需要被同步过去。
1、按照操作的类型来查看差异:比较跑完之后,建议先从操作类型这个维度去看,把新增的、修改过的还有即将被删掉的对象一一分开;碰到要删字段、删整张表或者改动字段类型这些动作,一定要拎出来单独检查一遍。Navicat的结构比较页面,本身就允许按照操作类型或者对象类型来整理差异,挑一种自己看着顺眼的方式就行。
2、把两边的DDL内容拿来对着看:单独选中一个对象之后,把源库和目标库两边的DDL定义摆在一起对比着看;核对的时候要重点盯住字段名称、数据类型、长度、默认值、能不能为空,以及主键、索引和外键这些定义。举一个很常见的例子,varchar的长度假如从200改成50,表面看着好像只是改了个参数,背后却很可能把已有的数据内容给截断掉。
3、去掉那些用不着同步的对象:查来看去,要是发现目标库里还留着一些为正式环境特制的索引,或者一些临时的兼容字段、特殊的视图,就不要不管三七二十一地全给勾上。先把这些不想动的对象勾掉,再去重新过一遍生成的脚本;要知道,结构同步的本意是把那些确确实实需要调的东西给修正好,而不是强行逼着两个库变成一模一样。
4、把结构同步和数据同步分清楚:还有一点要特意记住,结构同步只负责管数据库里对象的定义,它根本不会去碰表里一行行的记录;要是你连表数据里增了哪条、改了哪条、删了哪条都想要一并去看,那就要另外去用数据同步那个功能才行。Navicat在产品说明里也是把数据同步和结构同步作为两项不同的功能列开的。
三、Navicat结构同步怎么减少误操作
到了正式环境准备执行结构同步的时候,比较稳妥的办法是把整个流程拆成几步来走:先仔仔细细地比较,再把脚本审一遍,等到全都确认妥当了,最后再去按下执行,千万别把这几步动作急急忙忙地塞在一次操作里头。
1、先在测试库里把脚本验证一遍:拿到生成的脚本之后,别急着往正式库上招呼,先把它保存好,找一套结构跟正式库差不多的测试库跑上一遍;等确认过表结构正常、查询没出错、应用连接也都顺利,没有冒出什么异常,再来安排正式环境的变更,这样心里有底。
2、单独检查那些危险的语句:脚本里一旦出现DROP、ALTER COLUMN,或者改动主键、改动外键、删除索引这一类的语句,一定要单独拿出来重新确认。特别是事情牵扯到大表的时候,更要多想一想锁表的时间和对正常业务访问带来的影响;可能半夜操作会更合适一些。
3、把同步的记录都保留下来:最后,记得把同步的配置、执行过的脚本、备份文件以及运行时产生的消息日志都好好地留下来。万一后面冒出字段没了、接口开始报错,或者查库突然变慢这类问题,就能靠这些记录快速回头去查清楚这一轮结构变更到底动了哪些地方。
总结
总的来看,数据库的结构同步虽然看上去就是一次简单的比对操作,但它背后跟数据的安全是直接绑在一起的。把Navicat里怎么去做结构同步、同步前又要怎样去比较差异这两个问题理一遍,比较妥当的处理次序是这样的:先给目标库做备份,再去选对源库和目标库,接着比较对象的差异,然后一条一条地审核DDL变更脚本,到最后才去点击执行,并且留意查看执行后的日志。结构同步始终只是围着对象的定义来转,数据记录如果也要一起变动,就得另外用数据同步来处理,这一点从头到尾都不要弄混了。
展开阅读全文
︾