Записи удаляются из таблицы базы данных MySQL.

Вопрос или проблема

У меня есть приложение, которое может только добавлять записи в базу данных. Поэтому, когда нам нужно обновить данные в старой заявке, мы удаляем старую запись и создаем новую с новыми данными.

Приложение работало нормально в течение 2 лет, пока несколько месяцев назад не произошло аварийное завершение работы сервера, после чего записи случайным образом начали удаляться из таблицы или автоматически одобряться в их статусах. Эти автоматические одобрения не происходят из приложения, потому что, когда одобрение приходит из приложения, мы фиксируем имя пользователя сессии. У этих автоматически одобренных записей имя пользователя сессии равно null.

Иногда через несколько дней несколько записей исчезает случайным образом. Например, запрос на одобрение 7 позиций успешно одобряется, а через месяц 3 позиции исчезают.

В основном я работал с SQL Server и BigQuery, и это мой первый опыт с MySQL. Мне действительно нужны какие-то рекомендации о том, с чего начать искать логи и т.д.

Итог: сервер базы данных находится в Gcloud внутри контейнера Kubernetes, если эта информация имеет значение.

Ответ или решение

Ваша ситуация с базой данных MySQL требует внимательного анализа, поскольку проблема возникает после сбоя сервера и связана с исчезновением записей и автоматическим одобрением статусов. Вот полное руководство по диагностике и решению данной проблемы.

Шаг 1: Анализ журнала транзакций и журналы MySQL

Первым делом вам необходимо проверить журналы MySQL. Это поможет вам понять, что именно происходило во время сбоев и после них:

  1. Журнал ошибок MySQL: В этом журнале вы можете найти записи об ошибках, сбоях и предупреждениях. Путь к журналу определяется в конфигурационном файле my.cnf. По умолчанию он может находиться в /var/log/mysql/error.log или аналогичном месте.

  2. Журнал запросов: Если у вас включен бинарный журнал (binary log), вы сможете увидеть все изменения, сделанные в базе данных, включая удаление записей. Это может быть полезно для отслеживания, какие операции выполнялись до исчезновения данных.

  3. Журнал аудита: Если вы используете сторонние кошельки, такие как Percona Audit Log Plugin или другие механизмы аудита, проверьте эти журналы. Они могут дать информацию о том, какие запросы были выполнены и кто их запускал.

Шаг 2: Проверка конфигурации Kubernetes и MySQL

Разберитесь в конфигурации вашего окружения Kubernetes:

  1. Проверка ограничений ресурсов: Убедитесь, что вашему поду MySQL достаточно ресурсов (CPU, памяти), чтобы он мог корректно работать. Ограничения могут привести к нестабильной работе базы данных.

  2. Проверка настроек репликации: Если вы используете репликацию, возможно, проблема связана с неправильной синхронизацией данных между мастер- и слейв-узлами.

  3. Настройки восстановления: Убедитесь, что механизмы резервного копирования и восстановления настроены правильно. Если данные были потеряны из-за сбоя, вам может потребоваться восстановление из резервной копии.

Шаг 3: Изучение логики приложения

Поскольку ваша система создает новые записи при удалении старых, потребуется произвести анализ кода приложения:

  1. Проверка логики удаления: Убедитесь, что процесс удаления записей не включает неожиданные условия, которые могли бы удалить больше данных, чем вы предполагаете.

  2. Следите за сохранением данных: Проверьте, правильно ли данные сохраняются при создании новых записей. Возможно, неправильно прописана логика при создании, что приводит к удалению или потере данных.

  3. Логирование операций: Включите логирование всех ключевых операций с базой данных (вставки, удаления), чтобы лучше понять, что происходит при каждом запуске приложения.

Шаг 4: Методы обнаружения проблем

  1. Использование триггеров: Вы можете создать триггеры в MySQL для отслеживания операций удаления. Это позволяет регистрировать информацию о том, какие записи были удалены и кем это было сделано.

  2. Мониторинг активности: Разработайте и внедрите систему мониторинга для трекинга активности в базе данных. Инструменты, такие как Prometheus или Grafana, могут помочь в визуализации и обнаружении аномалий.

Шаг 5: Предотвращение будущих проблем

  1. Бэкапы: Настройте регулярные резервные копии базы данных. Это позволит быстро восстановить данные в случае их потери.

  2. Процессы и политики безопасности: Убедитесь, что у вашего приложения только необходимые права доступа для работы с базой данных, чтобы избежать случайных или злонамеренных действий.

Заключение

Следование приведенным выше рекомендациям поможет вам глубже понять проблемы, возникающие с вашей базой данных MySQL, и предпринять необходимые шаги для их устранения. Начните с анализа журналов и конфигураций, а затем переходите к проверке логики приложения. Если проблема продолжит возникать, возможно, имеет смысл обратиться к специалистам по поддержке MySQL или к YOUR CLOUD SERVICE PROVIDER для получения более детальной помощи.

Оцените материал
Добавить комментарий

Капча загружается...