Бэкапиться, бэкапиться и ещё раз бэкапиться..

Вчера приезжаю с отдыха, а один из проектов, над которым работал больше месяца сгорел. Сгорел во всех смыслах, большой пожар неделю назад был в украинском дата-центре в Одессе (hosting.ua), где сервер временно размещался. К счастью бэкап проекта был, его быстро восстановили, хотя потеряли часть критически не важных данных.

Суть в том, что потеря данных может быть в любом, даже в самом навороченном дата-центре. Нельзя полагаться только на RAID, дизель-генераторы и автоматизированные системы пожаротушения. Сервер могут арестовать (по ошибке или просто за компанию с другими), может пройти короткое замыкание или начаться война, попасть метеорит, застрять таракан в лопастях вентилятора или прогрызть проводку мышь, да на него кофе в конце концов могут пролить. Где-то читал, что одна комания бэкапила данные в всемирном торговом центре с одного небоскрёба на сервер в другом небоскрёбе. А потом наступило 9 сентября 2001 года.

В отдельности вероятность этих событий очень маленькая, но вместе, за годы, умноженная на человеческое разгильдяйство — какое-либо чрезвычайное событие, которое приведёт к потере целого сервера, может вполне произойти и нужно быть к этому готовым. Панацея одна — делать бэкапы, причём важно чтобы они хранились где-нибудь подальше (дома или в другом территориально расположенном дата-центре)

Самый простой способ, особенно в случае не очень часто меняющихся и важных данных, просто сохранять файлы и дампы на свой рабочий диск раз в пару недель. Ситуация осложняется, если сайтов несколько, или данные достаточно важные.

Я около года назад сделал небольшой PHP скрипт, который использую для бэкапа своих проектов. Файлик лежит в корне веб-сайта, делает бэкап базы и файлов и заливает данные на удалённый сервер. Для каждого нового сайта я заливаю этот скрипт в корень директории сайта и ставлю его выполнение раз в пару дней в cron. Раз в месяц я сливаю архивы с FTP к себе на домашний компьютер.

Я приведу команды для подобного бэкапа в linux. Для вызова консольных команд из PHP можно использовать команды exec или system. Можно на основе этих команд сделать bash скрипт.


Бэкап файлов

Сохраняем сайт в tar архив:
tar -cf {путь к получаемому tar архиву} {полный путь к директории сайта}

например: tar -cf site.tar /var/www/site.com/htdocs

Сжимаем полученный архив в tar.gz (т.к. tar не сжимает, а только пакует файлы в один):
gzip -c {путь к tar архиву} > {путь к получаемому tar.gz архиву}

например:
gzip -c /var/www/site.com/htdocs/site.tar > /var/www/site.com/htdocs/site.tar.gz


Бэкап MySQL базы данных

–quote-names –add-drop-table –user=’.$DBLogin.’ –password=’.$DBPassword.’ –host=’.$hostname;
$str = exec(‘mysqldump ‘.$params.’ ‘.$DBBase.’ > ‘.$path.’/tmp.sql

Сохраняем базу в SQL дамп:
mysqldump –quote-names –add-drop-table –user={юзер БД} –password={пароль к БД} –host={хост, как правило localhost} {название БД}>{путь к сохраняемому SQL дампу}

например: mysqldump –quote-names –add-drop-table –user=root –password=12345 –host=localhost site_database>/var/www/site.com/htdocs/dump.sql

Аналогично сжимаем дамп базы данных в gz архив.


Восстановление данных из архивов

Распаковка файлов из tar.gz в текущую директорию:
tar zxvf {tar.gz архив}

например:
tar zxvf archive.tar.gz

Восстановление базы из sql дампа:
mysql –host={хост} –user={юзер БД} –password={пароль к БД} {название БД}<{SQL дамп}

например: mysql –host=localhost –user=root –password=12345 site_database<dump.sql

Если дамп сжат в gz, то нужно его перед тем как скормить утилите mysql предварительно разархивировать:
gzip -d {название gz файла}


Заливаем на FTP средствами PHP:

Если бэкапить скриптом, то полученные архивы неплохо бы сразу залить на удалённый FTP. Простейший код для заливки файла по FTP в PHP:

$conn_id = ftp_connect({FTP сервер:порт});
$login_result = ftp_login($conn_id, {FTP логин}, {FTP пароль});
if ($conn_id && $login_result) $upload = ftp_put($conn_id, {путь к заливаемому файлу}, {путь сохраняемого файла по FTP}, FTP_BINARY);
ftp_close($conn_id);


Шифруем архивы средствами GPG:

Чтобы можно было использовать любой FTP хостинг, а также без опасений заливать и хранить бэкапы где угодно, неплохо бы их шифровать. Я для шифрования использую GPG — аналог симметричного шифрования PGP.

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

Для создания ключей выполняем: gpg –gen-key

  • Тип ключа (первый вопрос) выбираем по умолчанию – 1
  • Выбор размера ключа – по умолчанию 1024 (или можно 2048 байта)
  • Третий вопрос, время действия ключа выбираем 0 (никогда не истекает)
  • Четвёртый вопрос – указание личных данных (имя и мэйл). Главное имя – название ключа. У меня это backup_key.
  • В конце нужно заполнить пароль. Пароль нужен для получения доступа к секретному ключу. НЕ ЗАБЫВАЕМ ЗАПИСАТЬ!

САМОЕ ГЛАВНОЕ! Не забываем скачать и сохранить в надёжном месте у себя на компьютере секретный и публичный ключ, и пароль к секретному ключу,  а то расшифровать потом архивы самому не получиться =)

Чтобы потом импортировать ключи на новую систему, выполняем:
gpg –import {путь к asc файлу с данными ключа}

Шифрование архива средствами GPG:
gpg –recipient {название ключа} –output {получаемый шифрованный файл} –encrypt {файл для шифрования}

например: gpg –recipient backup_key –output dump.sql.gz.gpg –encrypt dump.sql.gz

Расшифрование GPG файла:

gpg -d {шифрованный файл} > {файл}

например: gpg -d dump.sql.gz.gpg > dump.sql.gz

Чтобы расшифровать архивы в Windows, можно скачать консольную GPG для Windows. Если делать шифрование средствами PHP, нужно в корневой папке апача создать папку .gnupg и положить туда публичный ключ, чтобы он мог шифровать архивы.

Вышел Debian Lenny

Два дня назад вышел Debian Lenny (5.0) – популярный, удобный для администрирования, и очень стабильный дистрибутив Linux. О стабильности (минимум ошибок в приложениях) Debian говорит тот факт, что Lenny тестировался около года, пока не нашли и не исправили все критические ошибки. А тестируемая ветка Debian считается более стабильной чем многие другие дистрибутивы Linux – например Ubuntu.

Минус такого длительного цикла разработки – то, что все приложения уже чуть “устаревшие”, и есть новые версии, но для веб-сервера это и не нужно, главное чтобы не было критических ошибок. Уже обновил все свои серверы.

Ubuntu 8.04

Эксперименты с убунтой зашли в неожиданный тупик. После установки новой версии (8.04), вышедшей пару дней назад, и всяких разных красивостей, система стала выглядеть не просто лучше Windows, а просто необыкновенно. Теперь даже не знаю что и делать.

Несмотря на то, что с выхода прошлой версии (7.10) прошло всего полгода, новая убунта без проблем встала на мой ноутбук. Полностью заработал видеодрайвер (раньше никак не удавалось заставить работать 3d ускорение). Чтобы поменять переключение раскладки на Shift+Ctrl не нужно лезть в xorf.conf. В качестве базового браузера стоит Firefox 3.0 бета. Работает без проблем.

На скриншотах не передать, как потешно тягаются окошки (растягиваются) и как переходит переход между экранами (переворот рабочего стола вокруг своей оси).

После базовой системы ставил:

  • Менеджер тем Emerald
  • Пакет поддержки различных виджетов – Screenlets
  • Пакет с Windows-like шрифтами (msttcorefonts)
  • Тему и бэкграунд скачал с gnome-look.org

Остаётся ждать, пока Adobe выпустит весь свой софт под Линукс, и пробовать переходить под него работать, а пока эксперименты продолжаются =). Кстати, через эмулятор wine удалось запустить Dreamweaver (правда, медленно работает).

Очевидно, что у линукса на десктопах большое будущее. Пока весь вопрос в нужном софте.

Ubuntu. Часть вторая =)

Пока счёт в общении с Линуксом на ноутбуке — 1:0 в его пользу =) Как ни странно, почти всё работает — работает картридер, подхватывается bluetooth dongle даже определился wi-fi. Но вот встроенный модем настроить не удалось — ну никак. Модем нахрен в принципе не сдался, но настроить его — принципиальный вопрос, и тут у меня, дома, на данный момент, больше никакого доступа в интернет нету.

Оказывается — с драйверами для некоторого специфичного оборудования под линукс всё достаточно сложно. Некоторые драйверы можно найти в свободном доступе, но чтобы найти точный драйвер модема, и узнать существует ли он в природе, нужно знать производителя и модель чипа. Производителя чипа удалось определить только по id производителя (0x2C06)— оказался Conexant. Драйверов под линукс на сайте производителя нету, есть ссылка на компанию, которая продаёт их по 20 баксов =). А бесплатная версия (скорость подключения аж 14.4 кбит/сек) — полностью убила мою систему. Пришлось переустанавливать.

Ещё забавная ситуация — при смене графического драйвера, слетает английская локаль. Ребутишься, заходишь в аккаунт, а там – введите логин и пароль, но латиница не переключается, ну никак =) Странно — что такой серьёзный баг оказался в финальном релизе (ubuntu 7.10).

Лечится это следующим образом:
1. Нажимаем Ctrl+Alt+F1 и переходим в консоль, где, что удивительно, латиница работает и пароль можно ввести
2. Вводим sudo editor /etc/X11/xorg.conf (editor – это вызов текстового редактора)
3. Находим строчки:
Section Input Device
Indentifier «Generic Keyboard»
Option «XkbLayout» «ru»

меняем последнюю строчку на Option «XkbLayout» «us, ru»
4. Сохраняем (Ctrl+X, потом Y), перезагружаемся.

Также пару раз у меня слетало разрешение =). Чтобы вернуть разрешение и настроить все параметры, нужно переконфигурировать настройки, сделать это можно так: sudo dpkg-reconfigure xserver-xorg, автоматическое конфигурирование: sudo dpkg-reconfigure -phigh xserver-xorg (правда у меня не сработало). После этого у вас опять обязательно опять слетит локаль =)

Поставил Ubuntu на ноутбук

Вчера впервые поставил Линукс на домашний компьютер. Точнее на ноутбук. Потеснил Windows на 20 гигабайт, и поставил на новый раздел Ubuntu 7.10. Для экспериментов.

У меня на одном сервере уже около года стоит Debian – пришлось научится его администрировать через консоль, и всё оказалось достаточно просто. Чтобы обновить систему и поставить все патчи, нужно набрать пару комманд. (apt-get update, apt-get upgrade) Установить новую программу – ещё проще. (apt-get install {пакет})

После установки, первое впечатление – разочарование. Нет, нет – выглядит всё достойно, очень симпатично и аккуратно. Но шрифты – это ужас. Размер у них таков – что информации на экране умещается в несколько раз меньше чем в Win XP, такое ощущение что разрешение экрана уменьшилось в 2 раза =).

Но с другой стороны – я и поставил linux, чтобы в нём разобраться. Поэтому буду трахаться с ним дальше =) Сегодня вечером буду пробовать настроить модем и выйти в интернет.