понедельник, 21 января 2008 г.

Правильный бекап MySQL

Задача
Орагнизовать резервное копирование базы данных на Windows машину не имея непосредственного доступа к серверу MySQL.

Решение
Для бекапа будут использоваться две утилиты:
  • Putty - лучший консольный SSH клиент для Windows.
  • MySQL Administrator - входт в состав MySQL GUI Tools и доступен на сайте http://dev.mysql.com
Основная функция putty - предоставить доступ к командной строке сервера. Второй предоставляемой им возможностью, которую я буду использовать, является тунелирование соединений. Не буду вдаваться в подробности этого понятия. Скажу, что тунелирование поможет мне перенести интерфейс к базе данных на Windows машину так, что мне останется только сделать бекап с локальной машины. Для непосредственного бекапа я буду использовать MySQL Administrator.

Запускаю putty, в разделе Session указываю адрес ApacheSrv. В разделе Tunnels указываю порт источник 5000 и назначение mysql.host.com:3306. Нажимаю кнопку Open, ввожу запрашиваемые логин и пароль. С этого момента начинает действовать тунелирование. Другими словами, на 5000 порту Windows машины теперь действует точная копия MySQL сервера, которая будет считать, что к ней присоединяется ApacheSrv.


Запускаю MySQL Administartor, указываю имя хоста localhost (Windows машина) , порт 5000, а также имя пользователя и пароль к БД. После соединения с базой данных выбираю Backup, New Project. Ввожу имя проекта My backup, выбираю базу данных для бекапа и нажимаю на кнопку ">", для того чтобы MySQL Administrator получил список таблиц в базе.


Нажимаю Execute Backup Now и указываю, куда мне сохранить бекап. Процесс может занять несколько часов. По окончании должно высветиться окно The Backup was finished successfully.
Для восстановления вместо Backup надо выбрать Restore и указать на сохранённый файл.

Заметки
  • Имя SSH сервера, а также, логин и пароль часто совпадают с параметрами доступа по FTP.
  • Адрес MySQL сервера, имя пользователя и пароль можно посмотреть в конфигурационных файлах ваших скриптов, или же обратиться к хостеру.
  • Перед бекапом надо обязательно остановить сервис, который работает с базой данных. Иначе восстановление данных не гарантировано.
  • Файлы бекапа базы данных, как правило, хорошо поддаются сжатию, так что хранить их удобнее в сжатом виде.
  • Бекап необходимо проводить регулярно, и копии хранить в безопасном месте. Хранить копии на рабочей машине небезопасно. Лучше использовать внешние носители.
  • Использование Web интерфейсов, таких кaк phpMyAdmin, позволяет орагнизовать бекап и восстановление только маленьких баз данных. Предложенный мной способ прекрасно справляется с гигабайтными объёмами.
  • Не имеет значения сколько место вам предоставляет хостер. Для такого бекапа не портебуется дополнительного места.

2 комментария:

Анонимный комментирует...

Если бекап занимает гигабайты и часы, то по уму надо делать slave и бекапится с него.

Вы же не будете останавливать рабочую базу на несколько часов для ежедневного бекапа?

Alexxz комментирует...

Да, согласен, если проект действительно серьёзный. На практике, если идут такие объёмы данных, то и прямой доступ к базе данных тоже, как правило, есть.
Данная заметка предназначается больше для владельцев мелких частных сайтов и форумов, которые просто не знают как сделать бекап в таком случае.
Лично я тоже не знал, потому потратил своё время, чтобы найти решение.

Сейчас я делаю такие бекапы с девелоперской версии проекта, чтоб не пинать лишний раз админов.