我正在尝试使用mysqldbcompare
(版本 1.6.5)自动生成 SQL 命令以同步同一服务器上的开发和生产数据库的模式。我正在使用以下命令:
mysqldbcompare --server1=client:3306 \
--server2=client:3306 \
dev:test\
--skip-row-count \
--skip-data-check \
--skip-checksum-table \
--skip-table-options \
--run-all-tests \
--changes-for=server1 \
--difftype=sql
该文档声称该工具忽略了数据库名称差异。但是,如果两个表之间存在其他差异,则会在 SQL 输出中报告相同的外键约束(数据库名称除外)。例如,如果我克隆一个数据库并比较所有检查将通过。但是,如果我在克隆数据库中的表中添加一列,我会看到:
ALTER TABLE `prod`.`Table`
DROP FOREIGN KEY Table_ibfk_1,
ADD CONSTRAINT Table_ibfk_1 FOREIGN KEY(old_column) REFERENCES `dev`.`Table2`(old_column),
ADD COLUMN new_column int(4) NULL AFTER old_column;
这是一个错误,还是我误解了mysqldbcompare
文档?似乎这些多余的外键命令应该被禁止。它们在 SQL 输出中的存在会导致重复的键错误,使其在没有额外的解析和编辑的情况下毫无用处。