вторник, 16 апреля 2013 г.

Создание бэкапа базы или таблицы MySQL


Создание бэкапа базы или таблицы MySQL

Базы данных обычно разворачиваются, чтобы хранить и обрабатывать какие-либо важные данные. Потеря таковых может быть очень болезненная. Поэтому проведение бэкапов вообще - это очень важное мероприятие. Ну а если это бэкап баз данных, то вообще за отсутствие такового надо вводить смертную казнь. Лучше всего бэкапы делать периодически и, желательно, автоматизировав. Чтобы периодически дампить базу данных MySQL вручную или с помощью cron, можно использовать такой скрипт резервного копирования:

#!/bin/bash
# это нужно сменить, если какой-либо из параметров поменяется. Например при плановой замене пароля.
export DB_BACKUP="/home/backups/mysql" #Указать каталог для баз
export DB_USER="root" # Указать пользователя, от которого будет идти бэкап
export DB_PASSWD="qweqwe" # Указать пароль этого пользователя
# название и версии бэкапов. Тут же - глубина бэкапов. Чем больше строк "mv $DB_BACK..." тем больше бэкапов сохранится. При каждом
# срабатывании скрипта бэкапы перемещаются в сл. папку, а последний - удаляется.
echo ""
echo "* Идет бэкап, можете покурить, попить чаю или поиграть в косынку :)"
rm -rf $DB_BACKUP/04
mv $DB_BACKUP/03 $DB_BACKUP/04
mv $DB_BACKUP/02 $DB_BACKUP/03
mv $DB_BACKUP/01 $DB_BACKUP/02
mkdir $DB_BACKUP/01
echo "* Самый ответственный, нужный и необходимый момент. Спорцменк и комсомолк mysqldump делает свое черное дело..."
echo "----------------------"
mysqldump --user=$DB_USER --password=$DB_PASSWD -R имя_базы >$DB_BACKUP/01/имя базы-wi-`date +%Y-%m-%d-%H-%M-%S`.sql
mysqldump --user=$DB_USER --password=$DB_PASSWD -R имя_еще одной базы >$DB_BACKUP/01/имя_еще_одной_базы-`date +%Y-%m-%d-%H-%M-%S`.sql
echo "ready!"
ls -lah $DB_BACKUP/01/
exit 0

Сохраните данный скрипт в файл, например в backup.sh. Далее стоит сделать этот скрипт исполняемым:
chmod +x backup.sh
Имя дампа базы создается с датой и временем, чтобы можно было не только знать, когда сделан бэкап, но и сколько он делался. Если cron запустил выполнение в 4.00, а в имени файла 4.02 - значит 2 минуты бэкапилась база.

Строка
ls -lah
нужна, чтобы после выполнения, когда крон отправит системное сообщение о выполнении работы, на почту пришли названия файлов с временем и объемом. Можно будет не заходя на сервер проверить, все ли прошло на отлично.

С созданием бэкапа отдельных таблиц все просто - нужно добавить название таблицы. Например, в вышеуказанно скрипте добавим "имя_таблицы" после "имя_базы" и в название файла:
mysqldump --user=$DB_USER --password=$DB_PASSWD имя_базы имя_таблицы >$DB_BACKUP/01/имя базы-имя_таблицы-wi-`date +%Y-%m-%d-%H-%M-%S`.sql

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

Для восстановления какой-либо из баз или таблицы нужно задать команду
mysql -u root -p имя_базы < имя_базы.sql
имя_базы.sql - это имя дампа, сделанного ранее.

Как обойти ошибку Fatal error: Allowed memory size of......phpmyadmin/libraries/import.lib.php

Специально добавляю этот пункт сюда, т.к. мы будем использовать командную строку.
Как известно, есть жесткие ограничения в php и phpmyadmin на размер загружаемого файла при импорте дампа в базу данных. Не рекомендуется поднимать значение максимально разрешенных передач, лучше эту операцию провести в командной строке. К тому же дампы баз могут быть очень большими, исчисляясь гигабайтами. И такие импорты просто уничтожат всю свободную оперативную память и есть шанс отправить систему в SWAP. Лучше поступим так:
  • Загрузите нужный дамп-файл на сервер, например по ftp в любую удобную вам папку. В качестве примера используем /tmp
  • В командной строке задайте вышеуказанную команду:
mysql -u root -p имя_базы < /tmp/имя_базы.sql
  • Обратите внимание, что указан полный путь к файлу. Если вы выполняете данную команду из директории с нужным дампом, то полный путь прописывать не обязательно.
  • Система запросит пароль и пойдет подлив дамп-файла.

Комментариев нет:

Отправить комментарий