Резервное копирование (бэкап) MySQL и восстановление
Создание бэкапа базы или таблицы MySQL с помощью mysqldump.
Базы данных обычно разворачиваются, чтобы хранить и обрабатывать какие-либо важные данные. Потеря таковых может быть очень болезненная. Поэтому проведение бэкапов вообще — это очень важное мероприятие. Ну а если это бэкап баз данных, то вообще за отсутствие такового надо вводить смертную казнь. Лучше всего бэкапы делать периодически и, желательно, автоматизировав. Чтобы периодически дампить базу данных MySQL вручную или с помощью cron, можно использовать такой скрипт резервного копирования. Разумеется, такой вариант лучше всего проводить на относительно небольших базах и при минимальных запросах, так как нагрузка будет большая. Время минимальных запросов можно просто определить графиком MRTG или любым другим средством, которое у вас есть. Обычно это 4-5 часов утра.
Копируем в файл:
Если необходимо сжать архив (а текстовые архивы жмутся действительно сильно), то просто нужно добавить
| gzip -9 -cНапример:
Сохраните данный скрипт в файл, например в backup.sh. Далее стоит сделать этот скрипт исполняемым:
chmod +x backup.shИмя дампа базы создается с датой и временем, чтобы можно было не только знать, когда сделан бэкап, но и сколько он делался. Если cron запустил выполнение в 4.00, а в имени файла 4.02 — значит 2 минуты бэкапилась база.
С созданием бэкапа отдельных таблиц все просто — нужно добавить название таблицы. Например, в вышеуказанно скрипте добавим “имятаблицы” после “имябазы” и в название файла:
Восстановление базы данных
Для восстановления какой-либо из баз или таблицы нужно задать команду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
- Обратите внимание, что указан полный путь к файлу. Если вы выполняете данную команду из директории с нужным дампом, то полный путь прописывать не обязательно.
- Система запросит пароль и пойдет подлив дамп-файла.
Как сохранить все базы
Скрипт бэкапит все базы сразу по циклу.Запускаем сие чудо по CRON’у раз в сутки и будет счастье….
Разумеется, стоит учитывать, что на момент создания дампов, нагрузка будет достаточно большая и в час-пик такое организовывать точно не стоит. Если же условия не позволяют, настраиваем репликацию и бэкапим slave сервер.
Как делать бэкап базы данных не создавая нагрузку
Если есть необходимость делать резервное копирование баз данных, но нагрузка достаточно большая в любое время, можно нагрузить не основной сервер, а дополнительный. Для этого нужно:- установить сервер баз данных MySQL ещё на одной машине в сети,
- далее следует настройка репликации баз данных MySQL,
- скриптом уже бэкапим второй сервер, не трогая первый.
Комментарии
Отправить комментарий