【发布时间】:2013-11-25 05:29:58
【问题描述】:
我被指派创建一个 bash 脚本来检查 AUTO_INCREMENT 列何时接近其限制。
我认为最好的方法是获取“当前自动增量值”并与“支持的最大值列的数据类型”进行比较(比如 tinyint 的 255)。
我们的数据库中有大约 2Tb 的数据,我不想查询 INFORMATION SCHEMA 表来获取 AUTO_INCREMENT,因为它会花费太长时间。
因此我不能使用(SHOW TABLE STATUS LIKE 'table_name') 或(SELECT AUTO_INCREMENT FROM information_schema.tables),因为两者都查询INFORMATION SCHEMA 表。
有人告诉我,可能有一种解决方法可以在不访问信息架构表的情况下获取当前的 AUTO_INCREMENT,但我不知道如何操作。有什么想法吗?
这就是我获取数据类型的方式
DATA_TYPE="`$MYSQLCONNECT -D $DATABASE --batch -N -e "SELECT DATA_TYPE FROM
INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = '$DATABASE' AND TABLE_NAME='$TABLE' AND
EXTRA='auto_increment'"`"
这就是我获得该列可以处理的最大值的方式:
MAX_VALUE="`$MYSQLCONNECT -D $DATABASE --batch -N -e "SELECT ( CASE '$DATA_TYPE' WHEN 'tinyint'
THEN 255 WHEN 'smallint' THEN 65535 WHEN 'mediumint' THEN 16777215 WHEN 'int' THEN 4294967295
WHEN 'bigint' THEN 18446744073709551615 END >> IF(LOCATE('unsigned', COLUMN_TYPE) > 0, 0, 1) )
as MAX_VALUE FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = '$DATABASE' AND TABLE_NAME
= '$TABLE' AND EXTRA='auto_increment'"`"
【问题讨论】:
-
@thinkswan 也许你可以帮忙
标签: mysql limit increment auto-increment