Що робити якщо ушкодилася база даних mysql

Дуже багато движків сайтів і сервісів використовує для зберігання інформації бази даних і найбільш популярною, на мій погляд, вважається MySQL.

Для запобігання втрати інформації слід робити регулярні резервні копії, але що робити якщо таблиця ушкодилася в слідстві програмного або апаратного збою, або аварійного завершення сервісу MySQL в силу будь-яких причин?

У випадку з таблицями у форматі MYISAM, все може вирішитися дуже просто за допомогою phpmyadmin (як зазначено на скріншоті), або з консолі терміналу:

З форматом InnoDB все буде кілька складніша. Спочатку, цей формат був розроблений з розрахунком на те, що він буде самостійно відновлювати пошкоджені таблиці. Але бувають моменти, коли пошкодження може виявитися серйозним і вплинути на працездатність всього сервера баз даних MySQL.

На цей випадок була створена функція відновлення інформації, яка включається параметром innodb_force_recovery в файлі конфігурації MySQL. Файл може знаходитися в /etc/my.cnf або /etc/mysql/my.cnf при використанні Linux.

За замовчуванням, цей параметр вимкнений і користуватися ним потрібно вкрай обережно, так як існує ризик втратити всі дані безповоротно. Параметр додається в розділ '[mysqld]'

Значення параметра можуть змінюватися від 0 (вимкнено) до 6. І для його застосування сервер MYSQL потрібно перезапустити.

Зверніть увагу, що значення параметра innodb_force_recovery вище "0" потрібно змінювати тільки в крайньому випадку і тільки при відновлювальних роботах з таблицями бази даних. Нижче розглянемо значення параметра, що вони означають і для яких цілей їх слід застосовувати.

Коли вирішите скористатися параметром innodb_force_recovery, рекомендується почати з 1 і поступово збільшувати, якщо буде потрібно. Зі збільшенням значення, додаються різні параметри, які необхідні для доступу до даних. Наприклад, значення 3 включає в себе параметри, які застосовувалися при включенні значення 1 і 2.

Так само нагадую, що при проведенні робіт, не повинно ніяких операцій з функціями INSERT, UPDATE або DELETE, тобто доступ до бази повинен бути тільки на читання і тільки для адміністратора.

Список значень параметра innodb_force_recovery:

Дозволяє серверу запуститися навіть якщо її було пошкоджено в innodb. Після запуску спробуйте зробити вибірку з таблиці - SELECT * FROM <таблица>.

Запобігає роботу основного тред. Якщо збій виник в процесі очищення, цей параметр заборонить її повторний запуск

Не дозволяє виконувати транзакції відкату після відновлення пошкоджень

Запобігає операції об'єднання буферів, що створюються при INSERT.Так ж не відключається підрахунок статистики. Це значення параметра innodb_force_recovery може остаточно зруйнувати дані. Після її використання слід виконати очистку і перевтілення всіх другорядних індексів.

Чи не звертає уваги на логи, в яких зберігаються копії незавершених транзакції, при запуску сервера. Це значення параметра innodb_force_recovery може остаточно зруйнувати дані.

Не проводиться відкат з незавершених транзакцій. Це значення параметра innodb_force_recovery може остаточно зруйнувати дані.

Після того, як значення параметра виставлено, можна робити як SELECT з таблиць, щоб сдампіть дані, або DROP / CREATE для перевтілення таблиць. При встановленні значення "6", настійно рекомендується використовувати тільки найпростіші функції типу SELECT * FROM <таблица>, так як більш складні запити можуть остаточно зруйнувати дані. Слідкуйте за своїми даними, робіть резервні копії регулярно.