От автора: база данных без резервного копирования или, попросту говоря, бэкапа подобна средневековому замку без рыцарей — в любой момент кто-то или что-то может нарушить ее целостность. Практика показывает, что не существует идеальных БД: они постоянно «падают», перегружаются и начинают работать некорректно. Чтобы максимально обезопасить себя и свой проект, веб-мастера создают MySQL backup copy. Это файл, который хранит данные обо всех внесенных изменениях в конкретный момент времени. Сегодня расскажем, как делать это грамотно. Причем, не единственным способом.
Разные подходы
Настройка базы данных и ее резервное копирование — это ваш крест, который придется нести все время, пока вы будете управлять проектом. Несмотря на то, что опытные веб-разработчики умеют расставить все так, чтобы работа была самоуправляемой некоторое время, это не под силу новичкам. Тем более, что даже самая отстроенная база нуждается в качественных бэкапах. Если вы только начинаете разбираться во всех тонкостях MySQL и перешли на эту статью, то, скорее всего, вашу работу постигла определенная неудача. Не страшно: только на ошибках и их исправлениях рождаются настоящие профессионалы.
Просто скопируйте
Это самый простой способ, который может предложить веб-разработка, и самый примитивный. Как вы поняли, можно просто скопировать все файлы и сохранить их там, где это будет удобно. Необходимо перейти в папку хранения баз данных. Она находится по пути библиотек lib, mysql/db/. Далее выберите файл с именем базы, для которой нужно создать бэкап. Естественно, что для такого метода необходима полная остановка сервера. Если этого не сделать, вероятны два неблагоприятных варианта развития событий:
искажение данных при копировании их с массивной базы, которая активно используется;
проверка копий. Даже если все копируется славно, и через некоторое время вы решите снова запустить базу данных с такого бэкапа, то система начнет ее детальную проверку. Готовы ли выделить большую часть дня под этот процесс?
С другой стороны, даже начинающему разработчику известно, насколько нежелательной может быть остановка сервера с БД. Если проект активно взаимодействует с пользователями, то прерывание работы базы данных может полностью исказить отображение страниц. В худшем случае, будет нарушен порядок доступа к персональным данным. Так что, если вы имеете дело с интернет-банкингом, социальной сетью или даже посредственным форумом, остановка просто противопоказана.
Но и для такого случая программисты придумали трюк. Как вы делаете снимок экрана на своем смартфоне, также можно провести снапшот файловой системы, на которой размещена база. Это не настоящее резервное копирование, а скорее моментальное фото, которое впоследствии даст представление о положении вещей в конкретное время. Не только «сиквел», но и другие языки программирования поддерживают снэпшоты. Можно определить последовательность действий.
Блокирование таблиц. В зависимости от движка, оно происходит на разных уровнях, но сейчас это для нас неважно. Наша цель — скопировать содержимое.
Слив кэша файловой системы.
«Фото» момента в системе.
Разблокировка таблиц.
Далее работа сервера продолжается в штатном режиме, вы больше не взаимодействуете с базой данных. Со снэпа теперь легко проводить резервное копирование. На время фриза таблиц немного замедлится работа сервиса. Но это терпимо: пользователи почувствуют неудобство всего на несколько секунд.
Если такой способ кажется вам наиболее адекватным, то пора задуматься о системе, которая будет поддерживать его напрямую. К ним относится ZFS. Даже если вы его не используете, но на машину установлен Logical Volume Manager, то снепшоты в MySQL так же легко доступны. Существует и программное обеспечение для таких снимков, которое доступно на Linux-осях. Разработчики активно используют Hot Copy, но он тоже не является панацеей для всех случаев.
Копия из текста
Можно проводить бэкапы и другим путем. Если речь идет о базах класса production, то изымать файлы из нормальной работы совершенно необязательно благодаря специфическим SQL-командам, таким как SELECT INTO OUTFILE и LOAD DATA INFILE. Можно провести селективную выгрузку, а не копировать весь файл целиком. Выбору подлежит каждая отдельная строка таблицы.
Но сегодня мало кто делает это вручную. Существует программное обеспечение, вроде mysqldump. С ее помощью создается файлы со всеми необходимыми командами для сборки базы на другом сервере. При должном упорстве утилита позволяет настроить совместимость со всеми наиболее популярными системами управления базами данных. В свете последних тенденций разумно смещать концентрированность с одной только MySQL.
Через интерфейс веб-приложения
Еще один крутой способ бэкапа базы данных, который позволяет делать все через удобный и понятный интерфейс. Утилита называется Sypex Dumper, и ее возможности были оценены в девятнадцати странах мира. К сожалению, последнее обновление вышло более пяти лет назад. Но даже сегодня программу можно использовать для корректного резервного копирования.
Приложение написано на языке «препроцессора», и его основной функцией является как раз бэкап в MySQL. Функционал также рассчитан и на то, чтобы восстановить БД из уже готовой копии, но практика показывает, что лучше использовать Sypex Dumper для двух этапов: копирования и восстановления. Основным преимуществом этого ПО называют невероятную оптимизированность. Веб-приложение позволяет работать не только с простыми проектами, но с базами, размер которых доходит до тысячи мегабайт.
Основной задачей при создании была разработка такой утилиты, которая бы решала проблемы копирования там, где не справлялась популярная phpMyAdmin. Разработчику не понравилось то, что она не решает проблему копирования массивных БД. Изначально инструмент входил в систему управления контентом, которую автор создал для своих проектов. Качественным преимуществом стала упрощенная работа с русскими кодировками, решалось большинство проблем, которые с ними возникают. Последние версии дампера были оснащены возможностями технологии AJAX, а сама программа была переведена на большинство языков.
В основном, преимуществами Sypex Dumper можно назвать:
генерация бекапа без сторонних утилит. Все происходит благодаря одному только PHP;
взаимодействие с БД абсолютно любого размера. Даже в 2018 году актуальны разработки, которые компания совершила в 2013-ом;
быстродействие. В сравнении с phpMyAdmin, Sypex Dumper — пуля;
кроссплатформенность;
смарт-Shift в плане работы с кодировкой;
невысокие системные требования к машине, на которой запускается утилита.
Из репликации
Каким бы качественным ни был бэкап, он всегда будет немного отставать от реального положения дел. Если сервис с БД упадет, то вернуть все на место можно будет только лишь с определенным опозданием. Представьте, что вам пришла зарплата на электронный счет, но из-за сбоя MySQL все откатится то того момента, когда денег на счету не было. Если бы не существовало технологии, которая решает данную проблему, мы бы никогда не перешли на цифровой расчет.
В MySQL существует система репликации, которая решает проблему отката. Суть в том, что на объемный продукт работает не только мастер-сервер, но и раб-сервера, которые принято называть слейвами. Они получают файлы резервного копирования от главного сервера и таким образом поддерживают его в случае падения. Если в системе и будет обнаружена несинхронность, то ее объемы не превысят обычной сетевой задержки. Если же мастер-сервер полностью утратит свою работоспособность, его место сможет занять любой из рабов, на котором уже размещено достаточно информации.
Также слейвы могут использоваться для распределения нагрузки на сеть. Если мастер доходит до предела, он может слить часть задач на рабов. Именно так работает абсолютное большинство массивных веб-сервисов, с которыми вы взаимодействуете сегодня. Важно лишь помнить, что такой способ является не резервным копированием, а полной копией базы данных. Если изменения перенести, их откат станет невозможен. Одним из лучших способов станет синтез бэкапа файлов БД с остановкой раб-сервера, продолжая работу мастера. Таким образом, веб-приложение не перестанет работать, а резервное копирование произойдет в режиме реального времени.
Детально о дампе
Теперь поговорим о самом механизме дампа, и как он производится на деле. Он имеет ключевую роль для создания бэкапа. В нем содержатся основные инструкции на языке «сиквел», чтобы создать резервную копию той базы данных, с которой вы работаете. Важно не только содержание: прежде всего, важна структура, взаимосвязанность информации.
Итак, прежде всего, с помощью дампа можно перенести базу данных на другое железо. Такой сценарий рассматривается, когда вы уже создали проект на локальной машине и впереди ждет размещение на хостинге. Дамп позволит портировать все без малейших потерь. То же самое касается и бэкапов.
Чтобы создать дамп, необходимо обратиться к консоли системы управления базами данных, в нашем случае — MySQL. Для этого заготовлена специальная команда:
1 |
mysqldump -uuser -ppass db_name > file_to_save |
Важно, чтобы пользователь имел достаточные права для слива информации. В значении «db_name» необходимо прописывать название БД, с которой вы будете работать. Последняя переменная — это предварительно созданный файл, в котором будет храниться дамп.
Если все пройдет хорошо, создастся файл с расширением .sql, в котором и будет сохранен дамп. На самом деле, за простотой этого способа скрывается универсальность и доступность. Особенно распространен метод для пользователей Linux. Также он хорош тем, что подходит новичкам: без лишних движений пользователь получает готовый дамп.
Можно создавать дампы с использованием phpMyAdmin. Хотя действия исключительно с помощью PHP показали, насколько более эффективен отказ от стороннего программного обеспечения. Для начала, необходимо войти и выбрать ту базу, с которой будем копировать информацию. Далее проходим процедуру авторизации: нужно, чтобы пользователь обладал необходимым кругом полномочий. После того как в левом баре появился список информации различного рода, снова выбираем нашу БД. Жмите на экспорт и сливайте дамп. Чтобы при восстановлении не возникало проблем, пропишите параметр DROP TABLE/VIEW/PROCEDURE/FUNCTION/EVENT. Теперь у вас есть zip-архив, из которого можно провести восстановление. Как только база данных упадет, вы сможете восстановить ее при помощи данного бэкапа.
Напоследок подготовили небольшой лайфхак для тех, кто действительно будет создавать бэкапы в утилитарных целях. Вы ведь хотите, чтобы файлы были стройными и весили мало, а вся информация отображалась корректно? Есть и такое решение.
При помощи трехбуквенного кода можно совершить задуманное: Q, c и e. Чтобы реализовать эти параметры, необходимо лишь включить их в запрос для создания данных:
1 |
mysqldump -Q -c -e -u USER -pPASSWORD DATABASE > /path/to/file/dump.sql |
Например, «Q» ставит неймы в инвертированные кавычки, «с» проводит полную вставку, учитывая неймы колонок, а «e» — это расширение вставки. Таким образом, все оптимизируется, а объем файлов уменьшается.
На этом у нас все! Помните, что бэкап — это вещь сугубо индивидуальная. Необходимо получить массу опыта перед тем, как приступить к резервному копированию. Особенно все зависит от размера и предназначения базы. Пробуйте, испытывайте, и все обязательно получится.