Я работаю над этим скриптом в течение нескольких дней (я недавно начал писать в bash)
Скрипт проверяет, когда столбец приближается к пределу auto_incment. Я мог бы просто получить значение auto_increment из информационной схемы. Но, поскольку у нас есть сотни таблиц и около 4 Тбайт данных, которые можно было бы потратить некоторое время. Поэтому я решил получить значение auto_increment из «SHOW CREATE TABLE», который, мы надеемся, будет быстрее (все равно придется запускать это при постановке). Я уверен, что есть несколько способов решить эту проблему, и, как я уже сказал, я не эксперт по сценарию bash, но мне бы хотелось ваше мнение и если бы я мог сделать что-то лучше. Надеюсь, это также поможет другим.
Спасибо! -GioMySQL Check Auto Increment Script - без 'SELECT AUTO_INCREMENT FROM INFORMATION_SCHEMA.TABLES'
#!/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
Моя интуиция заключается в том, что получение автоматического приращения из information_schema будет быстрее, чем выполнение множества операторов show show table. – Barmar
Я отправлю результаты после проверки скрипта – andresg3