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

Опубликовано admin - вс, 07/07/2013 - 16:18

Ну вот я и собрался опубликовать очередную статью. Примерно 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. Ну и конечно же следующая статья будет посвящена настройке сервера бэкапов;)

Добавить комментарий

Filtered HTML

  • Допустимые HTML-теги: <a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd>
  • Строки и абзацы переносятся автоматически.
  • Web page addresses and email addresses turn into links automatically.