今天又用 Navicat 解决了一个数据同步的需求,财务又到账一笔收入.......
本文我将结合我过去的实践,给大家推荐一款数据库的运维工具。给大家呈现一下竟然可以用 Navicat 解决这些实际问题 。
熬了几个夜,毫无保留地将这些技能分享,只为博的一个赞,哈哈哈......
功能概览,本文也算是 Navicat 功能解读,并配合实际案例展开。
核心功能 | 描述 |
数据传输 | 将 A 处的数据传输到 B 处。 |
数据同步 | 将 A 处的数据和 B 处的数据进行比较,找出差异进行同步。 |
结构同步 | 将 A 处的结构和 B 处的结构进行比较,包括函数、存储过程等。可以导出对应脚本 |
转储、备份 | 将数据进行导出。(结构和数据、数据) |
快速生成数据 | 快速生成测试数据;性能压测生成数据 |
服务器监控 | 监控服务器的配置数据 |
逆向工程 | 快速生成 ER 图 |
其他功能 | ...... |
以上功能,将结合实际案例,以图文并茂的方式进行演示。
一、数据传输
这里解释一下数据传输的概念:简单理解为将 A 里面的数据都传输到 B 中。
如下所示:将数据库 database1 传输到数据库 database2 中。
1.1 需求场景
场景 | 描述 |
数据库服务商更换 | 第一年购买了阿里云的 MySQL 数据库,由于价格原因原因等, 第二年换成华为云的 MySQL。需要将阿里云 MySQL 的数据迁移到华为云 MySQL 数据库 |
数据库资源升级 | A 数据库对应存储资源快满了,将其数据库中的数据迁移到资源更好的 B 数据库中 |
资源安全升级 | 由于安全等,将环境 A 的数据库迁移到环境 B 中 |
数据初始化 | 新项目系统基础数据从预发环境迁移到正式环境等 |
场景还有很多,不一一举例,那么用 Navicat 如何实现这一需求呢,请往下看
1.2 Navicat 演示数据传输
以测试例子进行举例说明
第一步:找到数据传输
第二步:确定数据传输方向。
这一步,确定好方向。方向反了就是事故了。
第三步:高级配置设置(特殊场景配置)
第四步:其他选型配置设置
如图已经标注注意点
第五步:开始执行
创建前删除目标对象: 如果目标库中有对应的表,勾选上会被删除。如果不勾选,那么第一个遇到错误时继续则必须要勾选,否则执行创建创建的检查存在就直接停止了。不再继续了。
第六步:执行结果
通过这几步,数据就传输完成了。
1.3 注意事项
-
注意同步方向, 要明确从哪里到哪里。
-
默认情况,从源到目标,目标库中的对应存在会删除被删除,包括数据和结构。如果目标表里面的数据不应该被删除,则这种传输方式会是一种事故,特别注意。 数据同步是一种覆盖的传输。
数据传输务必仔细,拉其他人一起确认 review。可以对旧的库先做备份,这样确保万无一失。
1.4 其他工具
像上面的这种情况其实还有很多其他工具可以实现的。
工具 | 优势 | 劣势 |
dump |
| 比较粗粒度; |
数据库厂商 | 工具成熟 |
|
当然还有其他工具,不再举例。
1.5 小结
-
如果你只需同步部分字段到目标表,这个工具将是一个不错的选择
-
目标库是全新的,将旧的数据库都传输到新的库;不需太多的设置,直接采用默认就好了。
-
按批传输,效率比较高。
如果目标库存在表,也存在数据,要找出差异呢?只同步差异呢?
这是我四五年前遇到的一个升级问题。还记得那些加班的夜晚,直到我遇到 Navicat 这个技能。
二、数据同步
2.1 需求场景
我曾用这个数据同步功能做过两个数据库的差异对比!
下面是发布在 CSDN 的博客文章,是2018年,一晃 6年过去了.....
场景 | 描述 |
系统升级,找到灰度与生产之间的配置数据差异。 | 找到差异进行执行 |
当年做 saas 产品,都是先升级产品,再去升级定制的企业; 每次做产品迭代时都要找到大量差异数据进行执行。在没有这个能力之前都是手动处理,非常麻烦。
2.2 Navicat 演示数据同步
第一步:选择数据同步
第二步:确认数据同步的方向
第三步:填写配置
第四步:比较差异
根据实际情况,勾选具体项目。
特别说明:这种比较是十分消耗资源的操作。 不建议用同步方式去做数据传输。因为会有比较过程。
2.3 注意事项
这是同步过程,需要特别注意,否则会出问题! 会有删除、更新的情况。 这步操作一定要慎重处理。虽然工具很好用,但一旦操作错误,会是重大故障
当然,除了数据同步以外, 数据库常常会存储过程(函数)同步等。 以前做saas 产品,升级的时候会遇到存储过程的升级,所以也会非常麻烦。 找出差异脚本估计是我那一个周的工作,但是自从学会下面这个功能以后,老板都对我刮目相看了。
三、结构同步
比较两个数据库之间的结构差异,包括表、视图、函数(存储过程) 等
3.1 需求场景
这个是用得最多的一种能力。 因为产品常常升级,因此会经常遇到增加字段、增加索引、增加函数等。 对于传统项目开发,每次升级都是比较大的改动,常常会伴随大量的数据库变更。因此要正确、无遗留地整理出 SQL 升级脚本并不是一件简单的事情。有了这个功能后,我解放了。
场景 | 描述 |
系统升级,需要升级表结构、比如增加了一个字段;需要升级函数、索引等等 | 通过比较找到与线上数据库之间的差异,形成 DDL 脚本。快速升级到线上。 |
根据 DDL 脚本,可以编写出对应的回滚脚本
3.2 Navicat 演示结构同步
第一步:确定数据源。
第二步:确定对象,包括数据表、视图、函数等;这一步会生成脚本
生成差异脚本,需要进行详细的比对,防止不必要的变更
最后一步:检查执行结果
3.3 注意事项
注意:可以反向生成回滚脚本,这是我的经典操作之一。 这样到了线上出了问题,可以通过回滚脚本进行回滚,不一定要手动去整理写出回滚脚本。
这一步,我会关注 DELETE、DROP 语句,通过搜索找出这些语句。重点 review。
任何的变更都是很重要的,务必升级前拉会做好 review 。
四、转储 & 备份 & 导出向导 & 快速复制一张表
备份数据是一种非常好的行为! 这些功能,可以备份表、存储过程等。
4.1 需求场景
场景 | 描述 |
出于安全角度,备份数据 | 备份一张表、备份一个库等,“有备无患” |
4.2 Navicat 演示
转储 SQL 文件
可以选择结构和数据、只有结构。 可以选择针对一个表、或者一个库;不能编辑具体字段。
备份
备份选型,功能更加丰富。可以选择对象(表、视图、函数)等
导出向导
导出向导功能,将数据导出更多的格式,真的比想象更强大!
快速复制一张表
当需要对一张表做更新操作,为了保证安全,可以快速复制一张表,做备份。
4.3 小结
这些运维工具都是十分方便。 在做一些高危操作的时,常常可以通过备份来达到“有备无患”。
五、快速生成测试数据
5.1 需求场景
场景 | 描述 |
测试同学需要进行性能测试,以前需要写程序,写脚本才能快速生成大量数据 | 快速生成压测数据 |
开发一个新表,需要造一些数据做功能验证 | 快速生成测试数据 |
5.2 Navicat演示
第一步:找到工具入口
第二步:确定表需要生成的数据量
第三步:可以根据高级选项,对生成的数据进行定制!
提效工具,真的太赞了!!!
5.3 小结
可以将这个功能推荐给你的测试朋友们,比手写脚本快太多了。要是早知道这个功能,也不至于加班了
六、其他功能
6.1 服务器监控
知道 mysql 服务器运行时候的配置信息。可以快速进行调整。
除非你了解这些变量,否则不要修改它们!!!
6.2 逆向工程 or ER 图
对于快速了解一个系统的表示非常方便的
6.3 全局查找
全局搜索,查找关键字。但用的比较少。
其他功能就不再一一介绍了。感兴趣的可以自行下载进行研究。
七、最后总结
-
保持对数据的敬畏之心,任何的数据变更都要慎重。数据变更做好 review
-
上面功能,建议先自行练习和测试,熟悉后再到生成环境使用
纸上得来终觉浅,绝知此事要躬行!
文章已经同步发布到微信公众号:面汤放盐
我用 Navicat 的这些技能少加了好多班,也为公司挣了不少w (qq.com)
掘金技术:我用 Navicat 这些技能少加了好多班,也为公司挣了不少w - 掘金 (juejin.cn)