我想生成类似于diff的SQL文件来比较两个MySQL数据库的DATA和STRUCTURE。
这些生成的文件将在命令行上作为SQL查询执行。
在SO和各种论坛上有各种相关的旧线程,但它们处理的是带有用户界面的非免费工具(不是命令行工具)。
此外,不应直接同步数据库,而只能通过执行生成的diff SQL脚本来同步。
答案 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包可以很容易地从命令行运行。我也发现了一个数据差异(这是一个非常复杂的问题!),但它有点陈旧,我不确定它有多好。
祝你好运。