2023-05-11 09:11:43
Наступила новая эпоха, а проблемы остались всё те же. Хочу рассказать вам одну поучительную историю, которую я узнал от подписчика. История банальна, так как там отсутствовали бэкапы и системный подход, но нова, потому что не обошлось без
ChatGPT.
Как-то поздно вечером сел делать свои дела. Пишет незнакомый человек и очень просит помочь, потому что у него упала база данных Mysql, а он не знает, как починить. Да и база не его, а там много сайтов. Отчаяние сообщения сподвигло меня попробовать помочь. Подключаюсь к серверу и вижу там совершенно незнакомые мне ошибки, суть которых не очень понятна. В логе ошибок был backtrace и информация о том, что нарушен порядок транзакций. Как всё это чинить я совершенно не знал, а времени разбираться и погружаться в проблему не было, так что помочь ничем не смог.
Дальше мне рассказали историю проблемы. База данных очень сильно нагружала процессор. Автор вызвался помочь с решением проблемы, но не рассчитал свои силы. Он запустил mysqltuner.pl и получил некоторые рекомендации от него. Когда он их внёс, в логе были какие-то ошибки.
Тогда он решил спросить по ним совета у ChatGPT, и он предложил переместить файлы ib_logfile0 и ib_logfile1, чтобы при запуске были созданы новые. После этих манипуляций база перестала вообще стартовать.
В этих файлах хранится журнал транзакций innodb. Тут я примерно понял, в чем скорее всего проблема. Вероятно эти файлы были переименованы при работающей субд, что и привело к расхождению в транзакциях. Это нарушило целостность баз данных, поэтому служба не стартовала. Как решать подобную проблему, я даже теоретически не знаю. Было бы любопытно узнать хотя бы теорию по восстановлению, если оно вообще возможно при таких вводных.
В итоге были обращения в платную поддержку хостера, но они тоже не помогли. Пришлось всё восстанавливать из частичных бэкапов, которые кое-где нашлись. На момент обращения ко мне была информация, что бэкапов нет. То есть перед началом всех манипуляций бэкапы сделаны не были.
Ругать автора всех этих манипуляций не надо, он и так всё понял. Понятно, что желающие это сделать и так всё знают и ошибок не совершают. Но есть другие люди и их много. Они пока ещё не научились, как делать правильно, так что эта заметка для них.
Когда вы выполняете какие-то манипуляции в работающих сервисах, всегда держите в голове мысль:
"А что я будут делать, если после моих изменений сервис не запустится". Об этом нужно подумать заранее, даже если вы точно знаете, что будете делать. Вы можете банально ошибиться, перепутать консоли и грохнуть работающие базы. Это далеко не редкость, и я сам путал консоли неоднократно.
Перед любыми действиями как минимум делаем бэкап или убеждаемся, что у нас есть работающий бэкап. Потом в голове прокручиваем мысль с тем, как мы поступим, если всё упадёт. Есть ли у нас хотя бы в теории возможность всё быстро запустить из бэкапа. Если первое и второе не сделано и не продумано, то не начинайте что-то менять.
Я сам с чем только не сталкивался. И свои ошибки были, и ошибки разработчиков, которые всё уничтожали. И поддержка хостера роняла серваки, отключив сетевой кабель или питание, и диски не те меняли на развалившихся массивах. Всегда нужно держать в голове план восстановления и сразу же начинать его реализовывать, когда что-то пошло не так, а не сидеть и думать, что же теперь делать. Когда нет плана, это сильно бьёт по нервам и вообще отбивает желание работать в профессии.
#backup #история
3.3K views06:11