Как сделать бэкап и восстановить БД MySQL
Если вы храните данные в БД MySQL и вам важно не потерять их, то вам нужно регулярно делать бэкапы. Эта статья научит вас быстро через консоль делать бэкапы и восстанавливать их в БД MySQL. Также вы сможете перенести данные на другой сервер.
- Как сделать бэкап через командную строку (используя mysqldump)
- Как сделать бэкап MySQL БД со сжатием
- Как восстановить БД MySQL из бэкапа
- Бэкап и восстановление через adminer
Как сделать бэкап через командную строку (используя mysqldump)
Если у вас есть доступ к серверу через консоль (SSH) вы можете быстро делать бэкапы и разварачивать их обратно. Эта позволяет быстро создавать дамп базы данных (дамп - это текстовый вариант БД) и восстанавливать их обратно, быстрее чем через phpmyadmin, adminer и прочее. Дамп базы будет состоять из SQL-команд для создания копии вашей БД. Вот команда создания дампа:
$ mysqldump --opt -u [uname] -p[pass] [dbname] > [backupfile.sql]
[uname] - Имя пользователя БД (возможно root)
[pass] - пароль к вашему пользователю, можно писать слитно если он без каких-то особых знаков и пробелов, например -proot, -ppassword
[dbname] - имя вашей БД
[backupfile.sql] - имя файлу куда будет сохранен бэкап
[--opt] - опции к команде mysqldump, можно пропустить и не писать
Допустим у вас есть база данных Drupal, а имя пользователя root с паролем password и имя файла будет backup.sql, тогда команда будет такая:
$ mysqldump -u root -ppassword DrupalDB > backup.sql
Можно опустить пароль или пароль содержит пробелы и другие особые знаки (#!,-_), то тогда вам придется вводить пароль отдельно и команда будет такая:
$ mysqldump -u root -p DrupalDB > backup.sql
Вы можете также бэкапить отдельные таблицы, для этого нужно перечислять таблицы через пробел, например nodes users:
$ mysqldump -u root -p DrupalDB nodes users > backup.sql
Помимо того чтобы бэкапить отдельные таблицы, можно бэкапить сразу несколько БД, для этого нужно указать параметр --databases это позволит через пробел указать нужные БД:
$ mysqldump -u root -p --databases DrupalDB Drupal7 Drupal8 > backup.sql
Если вы хотите перенести сервер MySQL полностью, то вы можете скопировать все данные с помощью параметра --all-databases:
$ mysqldump -u root -p --all-databases > alldb_backup.sql
Команда mysqldump имеет также несколько полезных параметров:
--add-drop-table - позволяет удалять таблицы перед разварачиваем этого бекапа (то есть в дамп будет добавлены SQL-запросы DROP TABLE перед CREATE TABLE той же таблицы).
--no-data - позволяет копировать только структуру БД без данных, например полезно когда вы копируете таблицы кеша, которые в друпале могут быть с сотнями тысяч ненужных нам записей.
--add-lock - позволяет добавить LOCK TABLES и UNLOCK TABLES. Если размер БД большой то таблицы могут быть залочены на продолжительное время.
Как сделать бэкап MySQL БД со сжатием
Пожалуй наиболее подходящий варинт, потому что сжать удается в 10-20 раз и бэкапы из больших баз данных становится вполне небольших размеров. Для сжатия мы будем пользоваться командой gzip:
$ mysqldump -u root -p DrupalDB | gzip -9 > backup.sql.gz
Если вы хотите разархивировать файл (не восстановить БД, а просто разархивировать), то воспользуйтесь этой командой:
$ gunzip backup.sql.gz
Как восстановить БД MySQL из бэкапа
Для восстановления БД из дампа, вам нужна чистая БД, можете удалить таблицы с помощью adminer'а или phpmyadmin'а. Если вы использовали параметр --add-drop-table, то таблицы сами удаляться и зальются и ничего удалять прежде не нужно. Вот команда чтобы восстановить БД из дампа:
$ mysql -u root -p DrupalDB < backup.sql
Если у вас был сжатый бэкап, то воспользуйтесь этой командой:
gunzip < backup.sql.gz | mysql -u root -p DrupalDB
Бэкап и восстановление через Adminer (замена PhpMyAdmin)
Adminer - это замена PhpMyAdmin. Он такой же по функционалу, только сделан в виде одного небольшого файла, что весьма удобно:
Просто копируем файл в корень нашего сайта и обращаемся к нему через браузер:
http://имя_вашего_сайта/adminer-4.2.1.php (можете переименовать в adminer.php для удобства):
Авторизируемся и заходим в нужную нам БД, у меня это Drupal7.
Теперь нажимаем Экспорт (Dump) и выгружаем данные. Причем мы можем не выгружать ненужные нам данные кэша:
Для загрузки дампа обратно используйте вкладку Импорт (Import):