2

上下文:我们有带有大量表的大型数据库。他们中的大多数(99%)都在使用 innodb。我们希望有一个日常流程来监控哪个表已被修改。当他们使用 innodb 时,Update_timefrom的值

SHOW table STATUS from information_schema;

一片空白。出于这个原因,我们想要创建一个日常程序,将每个表的校验和(以及其他相关的东西)存储在某个地方(最好是另一个表)。对此,我们将进行不同的检查。

问题:我正在尝试使用

checksum table from db_schema.table_name;

它返回一个包含 2 列的结果集表:“表”、“校验和”。它给了我想要的值,但我无法在 select 或 insert 语句中使用它。

我尝试了很多东西,例如:

select `checksum` from (checksum table from db_schema.table_name);

或其他类似的查询。但我无法从结果集中提取数据。

有没有办法我可以做到这一点?在此先感谢您的帮助。

编辑:最后我想要的是构建一个更复杂的结果集,其中包含不同的信息(表模式、表名、计数、校验和、日期时间:now()...)然后我将使用这个结果集与昨天的值并绘制我自己的统计数据。这就是为什么我想从该结果集中获取校验和。

4

1 回答 1

1

无法直接使用 SQL 保存 CHECKSUM TABLE 的结果。您也不能在存储过程中使用准备好的语句或游标来使用校验和结果。

你最好围绕它制作一个脚本,或者下载一些流行的工具来为你做这件事。

对于使用 CHECKSUM=1 表参数的 MyISAM 表,您可以像这样简单地使用 INFORMATION_SCHEMA:

SELECT TABLE_NAME,CHECKSUM FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA = 'test' AND ENGINE='MyISAM' 
      AND CHECKSUM IS NOT NULL;
于 2012-06-28T04:56:15.767 回答