Как сделать резервную копию и восстановить базы данных MySQL с помощью Mysqldump

Резервное копирование баз данных MySQL из командной строки

В этом руководстве объясняется, как выполнять резервное копирование и восстановление баз данных MySQL или MariaDB из командной строки с помощью утилиты mysqldump.

Резервные файлы, создаваемые утилитой mysqldump, по сути, представляют собой набор SQL-операторов, которые можно использовать для восстановления исходной базы данных. Команда mysqldump также может создавать файлы в форматах CSV и XML.

Вы также можете использовать утилиту mysqldump для переноса базы данных MySQL на другой сервер MySQL.

Если вы не делаете резервные копии своих баз данных, программная ошибка или сбой жёсткого диска могут иметь катастрофические последствия. Чтобы сэкономить время и избежать разочарований, настоятельно рекомендуется регулярно создавать резервные копии баз данных MySQL.

Синтаксис команды Mysqldump

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

Выражения утилиты mysqldump имеют следующий вид:

 mysqldump [ options ] > file.sql

Для использования команды mysqldump сервер MySQL должен быть доступен и запущен.

Резервное копирование одной базы данных MySQL

Наиболее распространенным вариантом использования инструмента mysqldump является резервное копирование одной базы данных.

Например, чтобы создать резервную копию базы данных с именем database_name , используя учетную запись root , и сохранить ее в файле с именем database_name.sql , выполните следующую команду:

 mysqldump -u root -p database_name > database_name.sql

Вам будет предложено ввести пароль root. После успешной аутентификации начнётся процесс создания дампа. В зависимости от размера базы данных, процесс может занять некоторое время.

Если вы вошли в систему под тем же именем пользователя, под которым выполняете экспорт, и этому пользователю не требуется пароль, вы можете опустить параметры -u и -p :

 mysqldump database_name > database_name.sql

Резервное копирование нескольких баз данных MySQL

Для резервного копирования нескольких баз данных MySQL одной командой необходимо использовать опцию --database , а затем указать список баз данных, которые необходимо скопировать. Имя каждой базы данных должно быть разделено пробелом.

 mysqldump -u root -p --databases database_name_a database_name_b > databases_a_b.sql

Приведенная выше команда создаст файл дампа, содержащий обе базы данных.

Резервное копирование всех баз данных MySQL

Используйте опцию --all-databases для резервного копирования всех баз данных MySQL:

 mysqldump -u root -p --all-databases > all_databases.sql

Как и в предыдущем примере, команда выше создаст один файл дампа, содержащий все базы данных.

Резервное копирование всех баз данных MySQL в отдельные файлы

Утилита mysqldump не предоставляет возможности резервного копирования всех баз данных в отдельные файлы, но мы легко достигаем этого с помощью простого цикла FOR в bash :

 for DB in $( mysql -e 'show databases' -s --skip-column-names ) ; do mysqldump $DB > " $DB .sql" ; done

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

Создать сжатую резервную копию базы данных MySQL

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

 mysqldump database_name | gzip > database_name.sql.gz

Создать резервную копию с отметкой времени

Если вы хотите сохранить более одной резервной копии в одном месте, то вы можете добавить текущую дату к имени файла резервной копии:

 mysqldump database_name > database_name-$(date +%Y%m%d).sql

Приведенная выше команда создаст файл следующего формата database_name-20180617.sql

Восстановление дампа MySQL

Вы можете восстановить дамп MySQL с помощью инструмента mysql . Общий синтаксис команды следующий:

 mysql database_name < file.sql

В большинстве случаев вам потребуется создать базу данных для импорта. Если база данных уже существует, сначала её нужно удалить.

В следующем примере первая команда создаст базу данных с именем database_name , а затем импортирует в нее дамп database_name.sql :

 mysql -u root -p -e "create database database_name"; mysql -u root -p database_name < database_name.sql

Восстановление одной базы данных MySQL из полного дампа MySQL

Если вы создали резервные копии всех своих баз данных с помощью параметра -all-databases и хотите восстановить одну базу данных из файла резервной копии, содержащего несколько баз данных, используйте параметр --one-database как показано ниже:

 mysql --one-database database_name < all_databases.sql

Экспорт и импорт базы данных MySQL одной командой

Вместо создания файла дампа из одной базы данных и последующего импорта резервной копии в другую базу данных MySQL вы можете использовать следующую одностроковую команду:

 mysqldump -u root -p database_name | mysql -h remote_host -u root -p remote_database_name

Приведённая выше команда передаст вывод клиенту MySQL на удалённом хосте, который импортирует его в базу данных с именем remote_database_name . Перед выполнением команды убедитесь, что база данных уже существует на удалённом сервере.

Автоматизируйте резервное копирование с помощью Cron

Автоматизировать процесс резервного копирования баз данных так же просто, как создать cron-задание , которое будет запускать команду mysqldump в указанное время.

Чтобы настроить автоматическое резервное копирование базы данных MySQL с помощью cronjob, выполните следующие действия:

  1. Создайте файл с именем .my.cnf в домашнем каталоге пользователя:

     sudo nano ~/.my.cnf

    Скопируйте и вставьте следующий текст в файл .my.cnf.

     [client] user = dbuser password = dbpasswd

    Не забудьте заменить dbuser и dbpasswd на пользователя базы данных и пароль пользователя.

  2. Ограничьте права доступа к файлу учетных данных, чтобы доступ к нему имел только ваш пользователь:

     chmod 600 ~/.my.cnf
  3. Создайте каталог для хранения резервных копий:

     mkdir ~/db_backups
  4. Откройте пользовательский файл crontab:

     crontab -e

    Добавьте следующее задание cron, которое будет создавать резервную копию базы данных mydb каждый день в 3 часа ночи:

     0 3 * * * /usr/bin/mysqldump -u dbuser mydb > /home/username/db_backups/mydb-$(date +%Y%m%d).sql

    Не забудьте заменить username на своё настоящее имя. Мы также экранируем знаки процента ( % ), поскольку они имеют особое значение в crontab.

Вы также можете создать еще одно задание cron для удаления любых резервных копий старше 30 дней:

 find /path/to/backups -type f -name "*.sql" -mtime +30 -delete

Конечно, вам нужно настроить команду в соответствии с расположением резервной копии и именами файлов. Чтобы узнать больше о команде find, ознакомьтесь с нашим руководством «Как найти файлы в Linux с помощью командной строки» .

Заключение

В этом руководстве рассматриваются только основы, но оно должно стать хорошим началом для всех, кто хочет научиться создавать и восстанавливать базы данных MySQL из командной строки с помощью утилиты mysqldump.

Если вы хотите узнать больше о работе с MySQL из командной строки, ознакомьтесь с нашим руководством «Как управлять учетными записями пользователей и базами данных MySQL» .

Вы также можете ознакомиться с руководством по сбросу пароля root в MySQL, если вы его забыли.

Если у вас есть вопросы или пожелания, не стесняйтесь оставлять комментарии.

резервное копирование mysql mariadb mysqldump

Связанные руководства

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *