在命令行上使用免费工具比较两个MySQL数据库

时间:2011-07-13 13:08:24

标签: mysql sql diff

我想生成类似于diff的SQL文件来比较两个MySQL数据库的DATA和STRUCTURE。

这些生成的文件将在命令行上作为SQL查询执行。

在SO和各种论坛上有各种相关的旧线程,但它们处理的是带有用户界面的非免费工具(不是命令行工具)。

此外,不应直接同步数据库,而只能通过执行生成的diff SQL脚本来同步。

3 个答案:

答案 0 :(得分:13)

以下内容将向您展示差异(问题的第一部分),但输出实际上不能用作补丁文件。

比较两个表:

 mysql -u whatever -e "describe table" database1 > file1.txt
 mysql -u whatever -e "describe table" database2 > file2.txt
 diff file1.txt file2.txt

比较数据:

 mysql -u whatever -e "select * from table" database1 > file1.txt
 mysql -u whatever -e "select * from table" database2 > file2.txt
 diff file1.txt file2.txt

比较数据库:

 mysqldump --extended-insert=FALSE -u whatever database1 > file1.txt
 mysqldump --extended-insert=FALSE -u whatever database2 > file2.txt
 diff file1.txt file2.txt

答案 1 :(得分:4)

查看开源Percona Toolkit ---具体来说,pt-table-sync实用程序。它使用索引和其他策略的校验和来扩展表快速。它的主要目的是同步复制品,但是通过一些额外的工作,它是一个伟大的差异工具。请参阅my full answer about it here

编辑:我忘了提到结构的比较是一个不同的野兽。我使用您可以从命令行调用的存储过程来执行此操作,但它可能不是您要查找的内容。

这是我编写的用于显示架构差异的shell脚本包装器的片段:

mysql ${MYSQL_CNF_OPTION} -u ${DB_USER} \
-e "USE sys; CALL compareDBs('${DBDIFF_LOCAL_DB1}','${DBDIFF_LOCAL_DB2}');"

它调用compareDBs存储过程,这是我从the Artful Software query archive page获得的。

答案 2 :(得分:1)

架构比较工具更常见。有一些perl包可以很容易地从命令行运行。我也发现了一个数据差异(这是一个非常复杂的问题!),但它有点陈旧,我不确定它有多好。

架构比较: http://adamspiers.org/computing/mysqldiff/

数据比较: http://rossbeyer.net/software/mysql_coldiff/

祝你好运。