Восстановление баз MySQL для Drupal сайтов

Ну вот я и собрался опубликовать очередную статью. Примерно 1,5 месяца был перерыв — работы было много, но это даже хорошо за это время накопился небольшой опыт, будет чем поделится с читателями блога. Сегодня статья будет посвящена теме восстановление MySQL. С этим вопросом я столкнулся в июне, когда на нашем сервере разработки для Drupal сайтов (он находится на виртуалке) в следствии жесткого рестарта сломался MySQL, а бэкап виртуалки был примерно на 10 дней назад, что оказалось неприемлемо для нескольких баз данных. Да, да, да всем известный вопрос о бэкапировании коснулся и нас.

Введение в проблему

В один прекрасный день стали появляться ошибки PHP при обращении к MySQL типа: MySQL has gone away. Большинство сайтов на сервере разработки перестали работать. Подключившись к серверу MySQL увидел, что после команды 'use database' mysql перестает выполнять какие либо запросы. Мы приняли решение: взять бэкап сервера 10 дневной давности и попробовать восстановить в него 3 базы данных из "испорченного" сервера mysql.

Восстановление

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

mysqldump --force --compress --triggers --routines --create-options -uUSERNAME -pPASSWORD --all-databases > /usr/alldb.sql

у меня случился "fail". А именно mysqldump стал показывать ошибку: Lost connection to MySQL server during query when dumping table Также я попробовал сделать mysqldump только для нужных мне баз данных, но ошибки повторились. После этого я поступил следующим образом:

  1. Используя MySQL Workbench сделал бэкап нужных мне баз данных. Этот инструмент делает бэкап по-таблично, то есть каждая таблица в отдельном файле (mysqldump почему-то при выполнении подобных команд показывал ошибки). На этом шаге я увидел что таблицы 'cache*' были повреждены и их бэкап не удалось сделать.
  2. Восстановил все базы 10 дневной давности.
  3. Написал небольшой скрипт импорта всех файлов дампов таблиц из текущего каталога в базу данных

    #!/bin/bash
    #Создаем список всех файлов с маской mydatabase_*
    LIST=$(ls -rt mydatabase_*)
    
    #перебираем все элементы списка
    for i in $LIST; do
     echo "mysql -uUSER -pPASSWORD --default-character-set=utf8 mydatabase < "$i
     mysql -uUSER -pPASSWORD --default-character-set=utf8 mydatabase < $i
    done
    
  4. Я запустил этот скрипт для нескольких баз данных, бэкап таблиц которых удалось сделать

P.S. Ну и конечно же следующая статья будет посвящена настройке сервера бэкапов;)