- Вопрос или проблема
- Ответ или решение
- 1. Анализ условий проблемы
- 2. Возможные причины проблемы
- 2.1 Проблемы аппаратного и программного обеспечения
- 2.2 Ошибки в коде приложения
- 2.3 Проблемы безопасности
- 3. Рекомендации по устранению проблемы
- 3.1 Включение логирования
- 3.2 Проверка конфигурации системы
- 3.3 Аудит безопасности
- 3.4 Рассмотрение использования триггеров
- 4. Заключение
Вопрос или проблема
У меня есть приложение, которое может только добавлять записи в базу данных. Когда существующая запись требует обновления, запись удаляется, и создается новая запись с новыми данными.
Приложение работало нормально в течение двух лет, пока несколько месяцев назад не произошел сбой сервера, после которого записи случайным образом удаляются из таблицы или автоматически утверждаются по их статусам. Эти автоматические утверждения не исходят от приложения, потому что, когда утверждение поступает от приложения, мы фиксируем имя пользователя сеанса. Эти автоматически утвержденные записи имеют значение null в качестве имени пользователя сеанса.
Иногда несколько записей пропадают случайным образом через несколько дней. Например, запрос на утверждение семи пунктов был успешно одобрен, и через месяц три пункта пропадают.
Я в основном работал с SQL Server и BigQuery. Это мой первый опыт с MySQL. Мне действительно нужны подсказки о том, с чего начать поиск логов и т. д.
Сервер базы данных находится в Gcloud внутри контейнера Kubernetes.
Ответ или решение
Чтобы разобраться с проблемой случайных удалений записей из таблицы базы данных MySQL и автоматических одобрений статусов, необходимо последовательно проанализировать ситуацию и варианты решения.
1. Анализ условий проблемы
На основе вашего описания, вы столкнулись с несколькими проблемами:
- Случайные удаления записей: Записи исчезают через неопределённые промежутки времени.
- Автоматические одобрения: Записи получают статус "одобрен", но без указания сессии пользователя, что указывает на отсутствие контроля со стороны вашего приложения.
- Техническое окружение: База данных размещена в Google Cloud и управляется с помощью Kubernetes.
2. Возможные причины проблемы
2.1 Проблемы аппаратного и программного обеспечения
- Серверные сбои: Проблемы, возникшие после аварии серверов, могли привести к повреждению данных или изменению конфигурации базы данных.
- Конфликт версий MySQL: Если ваша версия MySQL не стабильно работает в контейнере или имеет конфликты с Kubernetes, это может стать причиной ненадлежащего поведения.
2.2 Ошибки в коде приложения
- Ошибки логики обновления: Возможно, при создании новых записей происходит неявное удаление старых данных.
- Неверная работа с транзакциями: Если транзакции не контролируются должным образом, могут возникнуть ситуации, когда изменения не фиксируются или откатываются.
2.3 Проблемы безопасности
- Несанкционированный доступ: Убедитесь, что база данных защищена от неавторизованного доступа, который может привести к случайным или злонамеренным изменениям данных.
3. Рекомендации по устранению проблемы
3.1 Включение логирования
- Логи MySQL: Убедитесь, что у вас включено логирование всех изменений (bin-log, general-log) для отслеживания всех операций.
- Логирование запросов приложения: Добавьте логирование всех запросов к базе данных в приложении. Это поможет отследить, какие операции выполняются и когда.
3.2 Проверка конфигурации системы
- Кубернетес и MySQL: Проанализируйте настройки контейнеров MySQL. Проверьте, правильно ли у вас настроены ресурсы (память, процессор) и параметры соединения.
- Резервное копирование: Настройте регулярные резервные копии базы данных, чтобы можно было восстановить данные в случае их потери.
3.3 Аудит безопасности
- Аудит доступа: Проверьте журналы доступа к базе данных. Убедитесь, что доступ к базе данных имеют только авторизованные пользователи.
- Анализ уязвимостей: Используйте инструменты для анализа безопасности, чтобы проверить приложение и базу данных на наличие уязвимостей.
3.4 Рассмотрение использования триггеров
- Триггеры на уровне базы данных: В некоторых случаях создание триггеров для событий удаления или обновления может помочь отслеживать изменения или предотвращать нежелательные удаления.
4. Заключение
Рекомендуется начать с включения логирования и анализа полученных данных о запросах к базе данных. На основе этой информации будет проще выявить источники проблемы. Также важно обеспечить безопасность и защиту базы данных от несанкционированного доступа. Если у вас нет опыта управления MySQL, можно привлечь специалиста, который поможет вам выявить и устранить причину данной ситуации.
Помните, что систематический подход к решению проблем и внимание к деталям помогут вам восстановить целостность и стабильность вашей базы данных.