2

Недавно у нас было переполнение в столбце auto_increment в таблице MySQL. Теперь я хотел бы отслеживать наши базы данных с помощью nagios, так что мы будем предупреждены, когда столбец auto_increment приближается к своему максимальному значению.

Уже есть проверка для этого? Если да, где я могу найти это? Если нет, есть ли хорошие советы о том, как написать один?

(Я нашел только несколько полезных результатов Google, и те использовали расширение Percona; к сожалению, мы ограничены "чистым" mysql здесь).

2 ответа2

2

ПРЕДЛОЖЕНИЕ № 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, который вызывает таблицы, которые вы хотите отслеживать, вы можете использовать этот последний запрос в качестве своей базы.

Попробуйте!

0

Вдохновленный ответом от RonaldMySQLDBA, я сейчас написал https://github.com/moritz/mysql-check-autoincrement

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .