使用Navicat对比和同步Mysql

文章目录
  1. 1. 问题
  2. 2. 解决办法
    1. 2.1. 情景描述
    2. 2.2. 表结构同步
    3. 2.3. 表数据同步
  3. 3. 后记
  4. 4. 书签

问题

线上一份数据库,测试环境一份数据库。怎样知道两个数据库之间的表结构和数据差异?

1、表结构对比:对比开发库和正式库之间的表结构,哪个表结构有字段的增加减少,或者字段类型的改变,并生成sql进行结构的同步。

2、数据对比:对比两个数据库中的某个表的数据差异,生成sql脚本进行两个库的同步。

解决办法

很简单,使用 navicat

很多开发者使用navicat创建数据库、创建表、增删查改、导出sql文件、导入sql文件等。但是,只有少数人知道,navicat还有强大的对比同步功能。

情景描述

东北高师就业联盟网,线上(阿里云)有一份数据库db_new_dsjyw,本地有一份数据库也叫db_new_dsjyw。因为在本地进行开发,所以本地的数据库表结构是最新的,而线上的数据库数据是最新的。开发完成要把本地数据库表结构同步到线上,该怎么做?

表结构同步

1、在navicat中,首先确认本地数据库连接和线上数据库连接都正常。

2、工具,结构同步。

3、结构同步窗口,常规选项卡中,源连接选择本地,源数据库选择db_new_dsjyw;目标连接选择阿里云,目标数据库选择db_new_dsjyw。

4、对比选项全部勾选,除了对比自动递增值,运行选项全部勾选。

5、单击“对比”,即可跳转到对比选项卡。

6、对比完成,右键查询修改小窗口,即可看到“运行查询”前的选项。

7、单击“全部勾选”,然后单击“已勾选脚本的详细信息”,可以看到脚本详细信息。

8、全选,复制,保存为sql脚本,用于修改线上的数据库表结构。

9、单击“运行查询”,即可修改线上数据库表结构。或者直接在线上数据库中执行第8步中得到的sql文件,也可以修改线上数据库表结构。

表数据同步

在本情景中,不需要同步表数据。如果非要同步的话,那么我们要先把线上的数据同步到本地,然后再把本地数据同步到线上。当然,更好的做法是线上新建数据库db_new_dsjyw2,然后切换到db_new_dsjyw2,万一同步除了问题,我们还可以切换回db_new_dsjyw。

下面我们尝试下线上数据同步到本地。

1、在navicat中,首先确认本地数据库连接和线上数据库连接都正常。

2、工具,数据同步。

3、数据同步窗口,常规选项卡中,源连接选择阿里云,源数据库选择db_new_dsjyw;目标连接选择本机,目标数据库选择db_new_dsjyw。

4、单击“全选”,源表出现在目标表中。

5、单击“开始”,开始数据同步。

后记

有同学推荐mysqldiff,mysqldiff工具是官方mysql-utilities工具集的一个脚本,可以用来对比不同数据库之间的表结构,或者同个数据库间的表结构。如果在windows下,直接下载安装mysql-utilities就可以了。

然而,上手体验不愉快,遂放弃,感兴趣的小伙伴自行百度。

书签

10秒钟完成MySQL数据库结构对比

MySQL 对比数据库表结构

mysqldiff — Identify Differences Among Database Objects