我目前正在使用MySQL数据库开发一个应用程序.

在开发过程中,数据库 struct 仍在不断变化和变化(我更改了本地副本,将其留在测试服务器上).

是否有方法比较数据库的两个实例以查看是否有任何更改?

虽然目前简单地丢弃之前的测试服务器数据库是可以的,但随着测试开始输入测试数据,它可能会变得有点棘手

有没有一种简单的方法可以增量地对生产数据库进行更改,最好是自动创建一个脚本来修改它?


答案中提到的工具:

推荐答案

如果您使用的是小型数据库,我发现在这两个数据库上都运行mysqldump,并使用--skip-comments--skip-extended-insert选项生成SQL脚本,那么在SQL脚本上运行diff效果非常好.

通过跳过注释,可以避免无意义的差异,例如运行mysqldump命令的时间.通过使用--skip-extended-insert命令,可以确保每一行都插入了自己的insert语句.这样就消除了一条新的或修改过的记录可能会在将来的所有insert语句中引发连锁react 的情况.使用这些选项运行会产生更大的转储,而没有任何注释,所以这可能不是您在生产使用中想要做的事情,但对于开发来说应该没问题.下面是我使用的命令示例:

mysqldump --skip-comments --skip-extended-insert -u root -p dbName1>file1.sql
mysqldump --skip-comments --skip-extended-insert -u root -p dbName2>file2.sql
diff file1.sql file2.sql

Mysql相关问答推荐

MySQL在带有特定属性值上的对象的数组的杨森对象中搜索

加载数据本地infile,字段中有双引号和逗号

使用 awk 重写 maxscale 过滤器

在 mySQL 中计算每日数组的每周指标

看不懂mysql自左连接查询

如何计算具有权重属性的记录数

Select 同一张表中的结果数?

global max_connections 和 spring.hikari.maximumPoolSize 有什么区别?

SQL查询以查找两个特定行的总和

SQL:如何为给定组中的所有记录 Select 一列与另一列不匹配的位置

使用 Having 表达式连接多个表

使用适配器设计模式和外观设计模式实现

mysql数据库数据文件夹中的DESKTOP-7JFP5MF-bin.000001文件有什么用?

如何在 MYSQL 中使用多个表进行插值

从 2 个不同的表中获取数据并将它们加入 sql

查询给出错误时的 mySQL Group_Concat 和 Case

PDO:MySQL 服务器已消失

SQLSTATE [42000]:语法错误或访问冲突:1055 SELECT 列表的表达式 #3 不在 GROUP BY 子句中并且包含非聚合

将 JavaScript 到日期对象转换为 MySQL 日期格式 (YYYY-MM-DD)

将行插入 MySQL 数据库的最有效方法