MySQL检查自动增量脚本-不带“从信息\u SCHEMA.TABLES中选择自动增量”
我已经写这个脚本好几天了,最近我开始用bash写了 脚本检查列何时接近其自动增量限制。我可以从信息模式中获取自动增量值。但是,因为我们有数百个表和大约4TB的数据,这需要一段时间。因此,我决定从“SHOW CREATE TABLE”中获取自动增量值,希望它能更快,直到在staging中运行它。我相信有多种方法可以解决这个问题,就像我说的,我不是bash脚本专家,但我希望你的意见,如果有什么我可以做得更好的话。希望这也能帮助其他人。 谢谢大家!-新闻局MySQL检查自动增量脚本-不带“从信息\u SCHEMA.TABLES中选择自动增量”,mysql,linux,bash,shell,auto-increment,Mysql,Linux,Bash,Shell,Auto Increment,我已经写这个脚本好几天了,最近我开始用bash写了 脚本检查列何时接近其自动增量限制。我可以从信息模式中获取自动增量值。但是,因为我们有数百个表和大约4TB的数据,这需要一段时间。因此,我决定从“SHOW CREATE TABLE”中获取自动增量值,希望它能更快,直到在staging中运行它。我相信有多种方法可以解决这个问题,就像我说的,我不是bash脚本专家,但我希望你的意见,如果有什么我可以做得更好的话。希望这也能帮助其他人。 谢谢大家!-新闻局 #!/bin/bash # # This i
#!/bin/bash
#
# This is bash script checks when auto_increment column is reaching its limit
# To run Script $ ./auto_increment_check.sh [username] [password] [host]
MYSQL_USER="$1"
MYSQL_PASSWD="$2"
MYSQL_HOST="$3"
MYSQL=$(which mysql)
if [ $? != 0 ]
then
echo -e "\nMYSQL CLIENT NOT PRESENT!\n"
exit 1
fi
MYSQLCONNECT="$MYSQL -u$MYSQL_USER -p$MYSQL_PASSWD -h $MYSQL_HOST"
QUERY="
SELECT table_schema,
table_name,
data_type,
( 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
INNER JOIN information_schema.tables USING (table_schema, table_name)
WHERE table_schema NOT IN ( 'MYSQL', 'INFORMATION_SCHEMA', 'PERFORMANCE_SCHEMA'
)
AND extra = 'auto_increment'"
$MYSQLCONNECT --batch -N -e "$QUERY" | while read DATABASE TABLE DATA_TYPE MAX_VALUE;
do
NEXT_AUTO_INCREMENT=`mysql -uroot -pgio --batch -N -e "SHOW CREATE TABLE $DATABASE.$TABLE" | awk -F'AUTO_INCREMENT=' 'NF==1{print "0";next}{sub(/ .*/,"",$2);print $2}'`
AUTO_INCREMENT_RATIO=$(awk 'BEGIN {printf "%2.2f\n", '$NEXT_AUTO_INCREMENT' / '$MAX_VALUE'}')
[[ $(awk 'BEGIN{print ('$AUTO_INCREMENT_RATIO'>=0.9)}') -eq 1 ]] && echo "Auto Increment limit almost reached! $DATABASE.$TABLE - NEXT_AUTO_INCREMENT= $NEXT_AUTO_INCREMENT, MAX= $MAX_VALUE, RATIO= $AUTO_INCREMENT_RATIO"
done
如果信息模式对您来说比较慢,我建议将innodb\u stats\u设置为\u metadata=0 至于监视自动增量容量,您应该使用 安装公共_模式后,可以运行如下查询:
select *
from common_schema.auto_increment_columns
order by auto_increment_ratio desc
limit 10;
有关更多信息,请阅读我去年写的关于这个主题的文章。如果信息模式对您来说太慢,我建议将innodb\u stats\u设置为元数据=0 至于监视自动增量容量,您应该使用 安装公共_模式后,可以运行如下查询:
select *
from common_schema.auto_increment_columns
order by auto_increment_ratio desc
limit 10;
更多信息,请阅读我去年写的关于这个主题的文章。我的直觉是,从信息模式获得自动增量比执行大量show create table语句要快。我将在测试脚本后发布结果。我的直觉是,从信息模式获得自动增量会更快而不是做很多showcreatetable语句。我会在测试脚本后发布结果