MySQL将表的校验和存储在另一个表中
背景: 我们有大数据库和大量的表。他们中的大多数(99%)正在使用innodb。 我们希望有一个日常流程来监控哪些表被修改。当他们使用innodb时,MySQL将表的校验和存储在另一个表中,mysql,statistics,checksum,Mysql,Statistics,Checksum,背景: 我们有大数据库和大量的表。他们中的大多数(99%)正在使用innodb。 我们希望有一个日常流程来监控哪些表被修改。当他们使用innodb时,Update\u timefrom的值 SHOW table STATUS from information_schema; 是空的。 因此,我们希望创建一个日常过程,将每个表的校验和(以及其他相关内容)存储在某个位置(最好是另一个表)。在这方面,我们将进行不同的检查 问题: 我想用 checksum table from db_schema.t
Update\u time
from的值
SHOW table STATUS from information_schema;
是空的。
因此,我们希望创建一个日常过程,将每个表的校验和(以及其他相关内容)存储在某个位置(最好是另一个表)。在这方面,我们将进行不同的检查
问题:
我想用
checksum table from db_schema.table_name;
它返回一个包含两列的resultset表:“表”、“校验和”。
它给了我想要的值,但我不能在select或insert语句中使用它
我尝试了很多东西,比如:
select `checksum` from (checksum table from db_schema.table_name);
或其他类似查询。但是我无法从结果集中提取数据
我有办法做到吗?
提前感谢你的帮助
编辑:最后,我想构建一个更复杂的结果集,其中包含不同的信息(表架构、表名、计数、校验和、日期时间:now()…)
然后,我将使用此结果集与昨天的值进行比较,并得出我自己的统计数据。这就是为什么我想从该结果集获取校验和。不可能直接使用SQL保存校验和表的结果。也不能在存储过程中使用预处理语句或游标来使用校验和结果 你最好围绕它编写一个脚本,或者下载一些流行的工具来为你做这件事 对于使用CHECKSUM=1 table参数的MyISAM表,可以简单地使用如下信息模式:
SELECT TABLE_NAME,CHECKSUM FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA = 'test' AND ENGINE='MyISAM'
AND CHECKSUM IS NOT NULL;
无法使用SQL直接保存校验和表的结果。也不能在存储过程中使用预处理语句或游标来使用校验和结果 你最好围绕它编写一个脚本,或者下载一些流行的工具来为你做这件事 对于使用CHECKSUM=1 table参数的MyISAM表,可以简单地使用如下信息模式:
SELECT TABLE_NAME,CHECKSUM FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA = 'test' AND ENGINE='MyISAM'
AND CHECKSUM IS NOT NULL;
正如我所说,我们的表大部分是InnoDB,信息模式中的校验和总是空的。另外,看看我的编辑,它可能会更好地解释我想要什么。是的,我知道你的表是InnoDB。问题是关于校验和表的结果,我回答了。MyISAM注释仅用于完整性。是否有方法使用该查询返回稍微复杂(或简化)的结果集,如我的编辑中所述。我的问题是,我无法使用该结果集执行任何操作,比如只选择校验和而不选择表的名称、校验和example@Antoine正如我在回答中提到的:在任何地方都不能使用checksumtable语句,因为它确实很有用,比如在存储例程中。我用MySQL 5.5试过了。(提示:至少,不是在原始的MySQL服务器中。)这就是你所说的“保存”的意思,我不是这样读的。最后,我完成了一个小java程序,可以从结果集中提取这个校验和值,然后进行我需要的计算。糟糕的是,不能直接使用SQLAs,正如我所说,我们的表大多是InnoDB,信息模式中的校验和总是空的。另外,看看我的编辑,它可能会更好地解释我想要什么。是的,我知道你的表是InnoDB。问题是关于校验和表的结果,我回答了。MyISAM注释仅用于完整性。是否有方法使用该查询返回稍微复杂(或简化)的结果集,如我的编辑中所述。我的问题是,我无法使用该结果集执行任何操作,比如只选择校验和而不选择表的名称、校验和example@Antoine正如我在回答中提到的:在任何地方都不能使用checksumtable语句,因为它确实很有用,比如在存储例程中。我用MySQL 5.5试过了。(提示:至少,不是在原始的MySQL服务器中。)这就是你所说的“保存”的意思,我不是这样读的。最后,我完成了一个小java程序,可以从结果集中提取这个校验和值,然后进行我需要的计算。太糟糕了,不能直接用SQL实现