Перенос БД MySQL на другой хостинг

Далеко не всегда удаётся использовать одну базу данных (БД) на одном сервере. Ситуации бывают разные: перенос проекта с сервера разработки на рабочий хостинг, неисправность оборудования и/или конфигурации ПО на используемом сервере, просто смена хостинга и т. д. Так или иначе, необходимо перенести БД (или некоторые их объекты) на другой сервер. Будь это коммерческий хостинг или другой обычный сервер, никакой роли не играет — необходимо знать основные аспекты и учитывать некоторые технические детали для каждого из случаев. Основным принципом, на котором основан перенос БД — это резервное копирование.

Как это работает?

Как можно догадаться, перенос БД — это два основных действия, проводимые непосредственно над БД:

  • создание резервной копии БД на исходном сервере;
  • восстановление БД из резервной копии на целевом сервере.

По соображениям безопасности для БД MySQL нельзя просто скопировать бинарные файлы БД. Поэтому для таких целей предусмотрены инструменты экспорта/импорта, которые можно проводить при помощи специальных команд и/или утилит. Таковыми являются команды mysqldump и source соответственно.
Есть ещё один инструмент для переноса БД — утилита mysqldbcopy. Она позволяет буквально одной командой скопировать объекты БД с одного сервера на другой. Утилита mysqlbdcopy является более удобным вариантом, однако её рекомендуется использовать опытным пользователям и администраторам. Именно поэтому для получения полного представления о переносе БД между серверами необходимо освоить выполнение данной задачи «ручным» способом, используя классические инструменты экспорта/импорта.

Команда mysqldump – резервирование БД

Данная команда обычно доступна в пакете mysql-client. Конечно, в зависимости от используемого дистрибутива Linux наименование пакета может несколько отличаться. У команды mysqldump синтаксис несложный и выглядит следующим образом:

musqldump [options] [db_name [tbl_name …]]

На хостинг-площадках команда mysqldump очень часто используется для автоматического (по расписанию) резервирования БД пользователей. Именно такие резервные копии БД и можно использовать для переноса (восстановления/импорта) на другой хостинг. Команда mysqldump располагает внушительным арсеналом опций, это довольно универсальная команда. Ознакомиться более подробно можно на страницах интерактивного руководства, используя команду man mysqldump. Для того, чтобы сделать дамп БД (т. е. зафиксировать содержимое и состояние её таблиц в текстовом файле) нужно выполнить команду:

$ mysqldump -u john -p dbname > ~/backups/dbname_back-$(date +%d%m%y).dump

В результате будет создан файл dbname_back-130319.dump в подкаталоге backups домашней директории текущего пользователя. Ключи -u и -p служат для задания имени и пароля пользователя-клиента MySQL соответственно. Пароль непосредственно в команде mysqldump указывать не стоит — она автоматически предложит его ввести в процессе выполнения. В качестве dbname выступает имя требуемой БД. Конструкция $(date +%d%m%y) в имени файла позволяет задействовать команду date непосредственно в команде mysqldump для присутствия в имени файла даты создания дампа БД. Символ «>» используется для перенаправления стандартного потока STD_OUT (т. е. результата) команды mysqldump непосредственно в файл.
На этом, собственно, и всё — дамп БД создан. Теперь его можно использовать для восстановления на целевом сервере.

Команда source MySQL – восстановление резервной копии БД

Команда source является внутренней инструкцией языка SQL, в отличии от команды mysqldump, которая реализует возможности отдельной одноимённой утилиты. С помощью команды source выполняется импорт таблиц из дампа в заранее подготовленную БД. Таким образом, для восстановления на целевом сервере требуемой ДБ необходимо:

  • создать пустую БД;
  • выбрать созданную БД для использования;
  • аполнить выбранную БД содержимым из файла-дампа, сознанного ранее командой mysqldump.

Следует заметить, что все вышеперечисленные действия выполняются средствами языка запросов SQL (MySQL). Итак, первым делом необходимо авторизоваться на сервере MySQL:

$ mysql -u username -p
Enter password:
mysql>

При успешной авторизации, как видно, пользователь будет перенаправлен в командную консоль MySQL. Далее не лишним будет посмотреть, какие БД доступны пользователю:

mysql>show databases;
+-------------------+
| Database |
+-------------------+
| drupal7_devtest |
| phpmyadmin |
| wordpress_devtest |
+-------------------+
3 rows in set (0.01 sec)
mysql>

Теперь нужно создать новую (пустую) БД для последующего в неё импорта содержимого дампа:

mysql>create database new_dbname;
Query OK, 1 row affected (0.00 sec)
mysql>

Создана новая БД с именем new_dbname. Если снова выполнить запрос «show databases;», то БД new_dbname будет в представленном списке. Далее, для того, чтобы можно было работать с этой БД (new_dbname), следует её явно выбрать. Для этого нужно выполнить запрос:

mysql>use new_dbname;
Database changed
mysql>

Теперь можно импортировать таблицы (со всем их содержимым) из ранее созданного дампа:

mysql>source ~/bacups/dbname_back-130319.dump;
Query OK, 0 rows affected (0.00 sec)
. . .
Query OK, 5 rows affected (0.00 sec)
Records: 5 Duplicates: 0 Warnings: 0
Query OK, 0 rows affected (0.00 sec)

Изучая вывод запроса source можно делать вывод о том, корректно ли был произведён импорт содержимого дампа. В данном случае всё прошло без ошибок и теперь БД new_dbname готова к использованию, при условии, что для неё установлены соответствующие привилегии. Для выхода из командной оболочки MySQL следует выполнить команду exit. Особое внимание следует обратить на то, что использование символа «;» в конце каждого запроса является обязательным — таков синтаксис языка SQL.

Восстановление базы с помощью mysql

Еще один способ восстановление базы можно выполнить с помощью команды mysql. Здесь также должна быть создана пустая база данных, как создать было рассмотрено выше. После чего из корня ОС (не из командной строки mysql) дать команду

mysql -u user -p new_dbname < ~/bacups/dbname_back-130319.dump

Заключение

Как видим перенос базы MySql не представляет большой сложности. Следует отметить, что в случае с очень большими БД, перенос может занимать длительное время.Например, на перенос БД объёмом 200 Гб может потребоваться приблизительно неделя. В таких случаях обычно перенос осуществляют по частям, отдельными таблицами, или использовать другие инструменты переноса.

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Понравилась статья? Поделиться с друзьями:
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!:

ИТ Проффи

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: