背景: 我们有大量的数据库和大量的表。他们中的大多数(99%)正在使用innodb。 我们希望有一个每日进程来监视哪些表已被修改。因为他们使用innodb来自
的Update_time
的值
SHOW table STATUS from information_schema;
为空。 出于这个原因,我们想要创建一个日常过程,它将在某个地方(最好是另一个表)存储每个表的校验和(以及其他重要事项)。在那,我们将做不同的检查。
问题: 我正在尝试使用
checksum table from db_schema.table_name;
返回带有2列的结果集表:“table”,“checksum”。 它给了我想要的值,但是我无法在select或insert语句中使用它。
我尝试过很多东西:
select `checksum` from (checksum table from db_schema.table_name);
或其他类似的查询。但是我无法从结果集中提取数据。
我有办法吗? 在此先感谢您的帮助。
编辑:最后我想要的是构建一个更复杂的结果集,其中包含不同的信息(表模式,表名,计数,校验和,日期时间:now()...) 然后我将使用此结果集与昨天的值进行比较并绘制我自己的统计信息。这就是我想从结果集中获取校验和的原因。
答案 0 :(得分: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;