Что будет с базой, если во время выполнения запроса к MySQL выключится питание сервера?
Привет всем.
Что будет с базой данных, если во время выполнения SELECT/INSERT/UPDATE/DELETE/ALTER запроса к MySQL выключится питание сервера?
Есть какие-то встроенные в СУБД механизмы, позволяющие избежать последствий?
Движок, например, InnoDB.
Зависит от движка изменяемой таблицы и того, что повреждено. Если нет разрушения файловой системы и транзакционный движок - недовыполненная транзакция просто откатится без каких-либо последствий.
Кирилл Гусарев, ничего. Транзакции всегда есть в InnoDB, даже если не созданы явно - тогда каждый запрос - отдельная транзацкия.
Транзакции обеспечивают защиту данных на логическом уровне, гарантируя, что выполнится все или ничего. Т.е. например, если вы в рамках транзакции захотели перевести некую валюту от пользователя А пользователю Б, для чего уменьшили на 100 единиц баланс А в первом запросе и потом увеличили баланс Б во втором. Без транзакции отключение питания может попасть ровно между запросами, и нарушится логическая целостность.