Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/reporting-services/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL检查自动增量脚本-不带“从信息\u SCHEMA.TABLES中选择自动增量”_Mysql_Linux_Bash_Shell_Auto Increment - Fatal编程技术网

MySQL检查自动增量脚本-不带“从信息\u SCHEMA.TABLES中选择自动增量”

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

我已经写这个脚本好几天了,最近我开始用bash写了 脚本检查列何时接近其自动增量限制。我可以从信息模式中获取自动增量值。但是,因为我们有数百个表和大约4TB的数据,这需要一段时间。因此,我决定从“SHOW CREATE TABLE”中获取自动增量值,希望它能更快,直到在staging中运行它。我相信有多种方法可以解决这个问题,就像我说的,我不是bash脚本专家,但我希望你的意见,如果有什么我可以做得更好的话。希望这也能帮助其他人。 谢谢大家!-新闻局

#!/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语句。我会在测试脚本后发布结果