MySQL 检查 table 是否有正确的架构

MySQL check if table has correct schema

我目前正在用 C++ 开发带有 MySQL 数据后端的服务器软件。我正在使用 official MySQL/connector library from Oracle 来处理 MySQL。连接本身正常,我对此没有任何问题。
我的问题是数据库和 table 模式往往每隔一段时间就会发生变化,因为新的 table 和列不断被添加。出于同样的原因,退出列也可能会更改。为了确保我能快速识别过时的服务器软件,我想在数据库更改时添加警告。
我的第一个想法是硬编码数据库(以及 tables 等)的外观,然后检查当前数据库是否与硬编码数据匹配。但我不知道如何实现它。

总而言之,我希望能够检测是否

使用尽可能少的 C++ 代码。而且它应该很容易维护。

将在需要时添加其他信息。

我建议采用以下方法:

1) fork 并执行 mysql 命令行客户端。设置一对管道,到mysql的标准输入和输出。

2) 此时,您应该能够通过标准输入管道将简单命令传送到 mysql 来执行简单命令,并从标准输出管道读取输出。

您需要仔细记录每个 mysql 命令的输出格式,以便您知道何时读完它的输出,然后才能发送下一个命令。

3)作为being的第一条命令,执行:

show tables;

返回的输出将列出数据库中的所有 table。将输出解析为 table 名称列表很简单。然后对每个 table:

执行
show create table <tablename>;

结果输出显示 table 中的所有字段、其键和约束。 table 的几乎所有架构。每 table.

起泡、冲洗、重复

4) 通过这种方式,您可以捕获整个数据库的基本模式,以便进行比较。如有必要,使用相同的方法捕获触发器和其他对象。您可能需要对数据进行一些小改动,并排除一些数据。例如,"show create table" 将包括当前的 AUTO_INCREMENT 值,您可以忽略这些值。

当然,这种通过标准输入和输出驱动 mysql 进程的一般方法有点不稳定。通过一些工作,您可以使用 mysql 的本地客户端库,并执行所有这些命令,并直接捕获它们的结果。这个应该比较靠谱。