如何检查MySQL架构是否已更改



假设我想检查MySQL数据库中定义的模式是否与代码中定义的相同——这是一项业务要求,以确保两者之间没有差异。

我可以通过查询information_schema表来进行比较。但是,在某些情况下,有些对象的返回方式与我创建它们的方式不同。数据库以不同的方式表示它们。

有没有办法在数据库上进行比较或使用MySQL的内部函数?

形式上,您使用一个"自然形式";而MariaDB的引擎正在返回表达式的";规范形式";比较它们是否相等的唯一方法是生成并存储索引的规范形式。

我使用的技巧是在一个单独的数据库(或模式(中运行整个SQL脚本并创建模式。然后你可以检索并存储它的规范形式。一旦你有了规范形式,你就可以用它来与TEST、STAGING、QA、UAT和PROD模式进行比较。

只要一点点编码,你就可以自动化整个过程,整个过程可以很快完成。请记住,在部署新版本的代码时,您可能需要一次又一次地这样做。

现在,你需要确保你在MariaDB引擎中运行这个并行过程,该引擎的版本与目标引擎的版本相同,以确保所有引擎都产生完全相同的形式

说了这么多,我开发了一个名为";Sentinel";它比较整个模式并在运行时提供差异。这样,它会快照DEV数据库,在启动期间检查TEST和PROD数据库,并报告日志中的任何差异。我最近才在Oracle、DB2和PostgreSQL中测试过它,所以我不记得它在MariaDB中的表现有多好(据说是受支持的(。

最新更新