ПРЕДЛОЖЕНИЕ № 1
У меня есть предложение, если вы хотите немного испачкать руки, и столы достаточно малы.
Вы должны преобразовать все таблицы с auto_increment из INT в BIGINT. Это должно подавить проблемы переполнения автоинкремента в течение нашей жизни. Это приведет к большим таблицам (1 дополнительный байт на строку).
ПРЕДЛОЖЕНИЕ № 2
Если вы все еще предпочитаете отслеживать все таблицы с автоматическим приращением, вот подход бедного человека:
Начните с выполнения этого запроса
SELECT table_schema,table_name,auto_increment FROM information_schema.tables
WHERE auto_increment IS NOT NULL;
Это даст вам каждую таблицу, для которой auto_increment определен в таблице, и следующее значение, которое будет использовано. Если вы хотите увидеть, сколько значений осталось, вы можете вычислить его.
Например, если все ваши auto_increments были определены как INT
, максимальное значение со знаком будет 2147483647
. Вы можете запустить этот запрос
SELECT table_schema,table_name,auto_increment
(2147483647 - auto_increment) values_left
FROM information_schema.tables
WHERE auto_increment IS NOT NULL;
values_left
- это то, что вы можете отслеживать. Если вы хотите получить предупреждение о таблицах, у которых осталось менее миллиона значений, вы можете запустить это:
SELECT * FROM
(SELECT table_schema,table_name,auto_increment
(2147483647 - auto_increment) values_left
FROM information_schema.tables
WHERE auto_increment IS NOT NULL) A
WHERE values_left < 1000000;
Если вы можете создавать плагины Nagios или хотите создать cronjob, который вызывает таблицы, которые вы хотите отслеживать, вы можете использовать этот последний запрос в качестве своей базы.
Попробуйте!