Перенос бд mysql другой сервер. Перенос базы данных MySQL. Переносим базу данных MуSQL со старого хостинга на компьютер

Май 16

Недавно встал вопрос переноса сайта с одного хостинга на другой. С сайтами на одном только html и css без баз данных — трудностей возникать не должно. Танцы с бубном начинаются когда вы являетесь счастливым обладателем сайта с базой данных. Сейчас таких сайтов в интернете — подавляющее большинство.

Сами файлы сайта мы можем перенести с помощью обычного копирования с хостинга на хостинг

Для того, чтобы перенести базу данных с одного сервера на другой нам нужно:
1. Скачать дамп базы данных к себе на компьютер (операция Экспорт).

2. Загрузить дамп базы данных на сервер хостинга (операция Импорт).

Сделать это можно несколькими различными способами. Некоторые CMS даже позволяют выполнять данные операции своими внутренними средствами. Также можно воспользоваться дампером баз данных MySQL . Но самый привычный и распространенный способ для переноса баз данных — это перенос средствами панели управления базами данных , которые хотелось бы рассмотреть в этой статье.

1. Экспорт базы данных с сервера на свой компьютер.

Нужно зайти в того сервера, на котором сейчас находится база данных, которую нам необходимо перенести, и в левой части меню в списке баз данных выберите ту, которую необходимо перенести.

Нужно перейти на вкладку «Экспорт » и выбрать в качестве «Способа экспорта » — Обычный — отображать все возможные настройки.

После этого нужно обратить свое внимание на поля:
1. Во вкладке таблицы должны быть выбраны все таблицы, которые необходимо импортировать. Может быть такая ситуация, когда для переноса баз данных некоторые таблицы при импорте будут не нужны. В таком случае, можно снять выделение с тех таблиц, которые не нужны, выделив необходимые названия таблиц с зажатой клавишей Ctrl на клавиатуре. (ВАЖНО! Если вы не являетесь опытным пользователем баз данных — лучше выделить все таблицы. )
2. Нужно выбрать пункт «Сохранить вывод в файл».
3. Запомните кодировку, которая установлена в поле — Кодировка файла.
4. Остальные пункты трогать не нужно, если вы не знаете, зачем они нужны.
5. Нажимаем OK, после чего сохраняем файл к себе на компьютер.

2. Импорт базы данных с компьютера на сервер.

1. Проверяем расширение сохраненной базы дынных у себя на компьютере. Оно должно быть ‘.sql ‘. Если при сохранении базы данных был указан пункт — архивировать её (zip, gzip, bzip ) — нужно предварительно извлечь базу данных из архива.
2. Дамп нашей базы данных не должен содержать запросов типа «CREATE DATABASE, /*!40101 SET @OLD » . Убедиться в отсутствии или наличии подобного запроса можно, открыв дамп базы «блокнотом» или другим текстовым редактором. Если подобный запрос присутствует — следует удалить эту строчку и пересохранить файл. Как правило, она находится в первых 15 строчках дампа базы данных.
3. Необходимо убедиться, что в будующей базе данных не создано каких-либо таблиц. Для этого нужно зайти в и слева в меню в списке баз данных выбрать свою базу данных. Слева в меню вы можно увидеть сообщение «Таблиц в базе данных не обнаружено.». В случае если таблицы присутствуют — нужно удалить их.

После выполнения всех этих пунктов, смело можно переходить во вкладку «Импорт», в которой нажав на кнопку «Обзор» выбераем сохраненный дамп базы данных с компьютера. В поле «Кодировка файла:» выбераем кодировку, в которой эта база данных была создана.

Более никаких настроек вносить необходимости нет. Нажмите ОК и дожидаемся окончания импорта базы.

База успешно перенесена и после этого наш сайт будет работать уже на новом хостинге!(при условии, что все остальные операции по переносу сайта уже были сделаны).

Многие задумывались, как перенести скрипты с базой данных MySQL на другой хостинг. Так вот, я написал в этой статье, как перенести Вашу базу данных, с помощью SSH/телнет и PHPMyAdmin"а.

Если Вы имеете доступ по телнет или SSH на оба сервера, то последовательность Ваших действий будет следующей:
Заходите по телнет/SSH на исходный сервер. Экспортируете содержание Вашей базы данных следующей командой:

mysqldump -uВашлогин -pВашпароль _mysql ВашабазаДанных > baza.sql

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

Затем Вам надо закачать полученный файл с Вашей базой данных на сервер получатель. Это можно сделать в том же сеансе телнет/SSH командой ftp, или используя любой предпочтительный для Вас клиент (сначала скачиваете файл baza.sql на свой компьютер, а потом закачиваете его на сервер получатель). После того, как файл Вашей базы данных оказался на сервере получателе, заходите на этот сервер по телнет/SSH. Загрузить Вашу базу данных на сервер получатель Вы можете, выполнив следующую команду:

mysql -uВашлогин -pВашпароль _mysql ВашабазаДанных < baza.sql

(пароли и логины и названия баз данных, Вы естественно, должны указать действительные для сервера-получателя). В результате Вы перенесете Вашу базу данных с одного сервера на другой, без каких-либо потерь.

Описанная выше методика может использоваться в тех случаях, когда Вы имеете доступ к обоим серверам по телнет или SSH и в тех случаях, когда Ваша база данных достаточно большая (несколько десятков тысяч записей). В тех случаях, когда Вы не имеете доступа к серверам (или к одному из них) по телнет или SSH или Вы не умеете работать в командной среде юникс и пользоваться телнет или SSH клиентом, то можно использовать следующую методику:
На сервере источнике заходите в скрипт работы с MySQL базами данных (Как правило, это PHPMyAdmin). Выбираете базу данных, предназначенную для переноса и в ее свойствах указываете "Просмотреть дамп (схему) БД" (Следует заметить, что конкретные названия пункты меню, могут отличаться от упомянутых здесь в связи с тем на разных серверах могут использоваться разные версии программы, и потому, очень желательно, ознакомиться с соответствующей документацией). Отмечаете галочками Нужные Вам пункты: "Только структуру", "Структура и данные", "Только данные" и отмечаете пункт "Послать". Когда Вы нажмете кнопку "Пошел" через какое-то время Вам будет предложено загрузить файл - это и будет содержание Вашей базы данных. Когда файл будет загружен на Ваш компьютер.

Какие способы бывают?

1 - при помощи интерфейса phpMyAdmin.

2 - при помощи панели управления хостинг-провайдера.

3 - при помощи сторонней программы.

Какой способ лучше?

Мы рекомендуем первый, т.к. его схема проста, и используется большинством вебмастеров. Третий способ мы не рекомендуем использовать! Никогда не доверяйте содержимое своего сайта сторонним программам, к тому же от непонятных разработчиков. Еще можно использовать второй способ, но его алгоритм очень разнится, и зависит от панели управления хостера. Поэтому, мы детально рассмотрим первый вариант, и расскажем как грамотно перенести базы данных MySQL, без потери и повреждения данных.

Создаем базу данных на новом хостинге

Если Вы хотите перенести базу данных MySQL, значит у Вас уже есть БД, и Вы умете ее создавать. В любом случае этот процесс разный для каждого из хостинг-провайдеров, но сводится к одному общему алгоритму:

1 - Ищем раздел “MySQL”, “Базы данных” или что-то похожее.

2 - В нем нажимаем “Создать”.

3 - Вписываем название базы данных, прикрепляем к ней пользователя (обычно пользователь БД уже создан, если нет, то создайте его и установите самые большие права) и вводим пароль для БД.

4 - База данных создана, но она пока что пустая.

Экспортируем БД со старого хостинга

Сейчас мы воспользуемся тем, что называют дамп базы данных. Т.е. сохраним текущую БД с сервера, к себе на компьютер. Для этого нам понадобится интерфейс phpMyAdmin, который нужно отыскать в личном кабинете хостинг-провайдера, у которого находится Ваш текущий сайт. Опять же единого алгоритма нет, поэтому приводим общую схему:

2 - Слева в углу выберите свою базу данных (ту, которую вы собираетесь экспортировать на компьютер, чтобы потом перенести на другой хостинг).

4 - Возможно Вас попросят выбрать способ экспорта “Обычный” (много настроек) или “Быстрый” (мало настроек). Не имеет значения какой выбирать, главное изменить только те настройки, которые мы описываем ниже.

5 - Нужно выбрать все таблицы, нажав на кнопку “Выделить все”.

7 - На всякий случай, запоминаем кодировку, но не трогаем ее.

8 - Жмем “Ок” и сохраняем файл с БД себе на компьютер. Обычно сохраняемый файл имеет расширение.sql.

Импорт БД на сервер нового хостера

1 - Таким же образом ищем phpMyAdmin на новом хостинге.

2 - В нем выбираем нужную базу данных (мы ее создавали в начале статьи, и она осталась пустой).

3 - Жмем на вкладку “Импорт”.

4 - Нажимаем “Обзор” и выбираем сохраненную на компьютере базу данных.

5 - Проверьте, чтобы кодировка совпадала с той, в которой Вы сохраняли БД.

6 - Больше ничего не меняете, жмете “Ок” и Ваша база данных импортируется на новый хостинг.

Какие бывают проблемы?

1 - При импорте БД в ней не должно быть запросов типа «CREATE DATABASE, /*!40101 SET @OLD ». Чтобы проверить их наличие - откройте файл БД на своем компьютере любым текстовым редактором (лучше всего подходит Notepad++) и через Ctrl+А поищите эти запросы. Если найдете, то просто удалите их, и попробуйте снова импортировать БД.

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

Алгоритм следующий:

  1. Выбираете нужную базу данных.
  2. Кликаете по пункту меню «Экспорт» в верхнем меню.
  3. Определяете способ экспорта. Учитывая то, что все настройки по умолчанию сохраняются, можно использовать «Быстрый» вариант. «Обычный» я выбираю только, если нужно сжать файл.
  4. Проверьте чтобы были выделены все таблицы базы WordPress для переноса.
  5. Если указан «Обычный» вариант, то можно определить компрессию при экспорте.
  6. В самом низу страницы кликаете «Ок».

В итоге приложение создаст дамп БД и предложит сохранить его на компьютере. Все настройки, как видите, устанавливаются изначально, и в 99% случаев ничего менять не нужно.

Процесс импорта еще проще. Допустим, у вас уже имеется пустая БД сайта, созданная в cPanel, куда требуется перенести всю информацию из прошлой. Порядок действий:

  1. Заходим в PhpMyAdmin и выбираем новую БД.
  2. В верхнем меню кликаете по пункту «Импорт».
  3. После нажатия на кнопку «Choose File» выбираете на своем компьютере SQL файл для импорта.
  4. Жмете «Ок» внизу страницы.

После успешного завершения процедуры увидите соответствующее сообщение, а справа под названием новой БД отобразится список созданных таблиц. На этом миграция wordpress базы завершена. После возвращаетесь к остальным этапам , если вы им занимались.

Плагины переноса базы данных в WordPress

В статье о я упомянул парочку модулей, которые помогают изменить доменное имя (и другую информацию) в базе сайта. Вносить правки вручную в PhpMyAdmin было бы крайне хлопотно, да и не всегда безопасно. Детально обозревать плагины не буду, а лишь представлю их основные преимущества.

Важно! Все три плагина, умеют работать с сериализованными данными (serialized data) и делать корректную замену информации в БД (с учетом длинны строки), например:

s:11:"hello world" станет s:9:"new world"

s:11:"hello world" станет s:9:"new world"

При выполнении SQL и правке напрямую через PhpMyAdmin могу быть ошибки.

Изначально позволял только вносить правки в БД, но в последних версиях разработчики значительно расширили его функции. Теперь вы также сможете скачивать дамп и восстанавливать базу, менять домен, префикс. Новый интерфейс сделали вообще отличным. В статьи чуть более детально расскажу о модуле, хотя здесь все предельно просто. Скачиваний — 100к+, оценка — 4.4.

Этот инструмент может использоваться не только при миграции WordPress базы, но и всего сайта. позволяет переносить медиа файлы, плагины, темы. Также вы можете запустить процедуру поиска и редактирования данных в БД. Отличительной особенностью является быстрая работа (дабы не нагружать хостинг провайдера), а также отсутствие необходимости установки дополнительных PHP расширений. Решение работает даже с PHP v5.2, в то время как предыдущее требует минимум PHP v5.4. Загрузок более 300 тысяч, оценка — 4.8.

Выполняет основные задачи по переносу базы данных в WordPress: экспорт дампа, поиск и замена инфы, сохранение SQL файлов на компьютере. Более 200тыс. скачиваний, оценка — 4.7. Бесплатной версии, в принципе, хватает, хотя конечно в PRO вас ожидаю более крутые фишки. Импортировать БД придется через PhpMyAdmin как я рассказывал в первом разделе.

Использование плагина Search and Replace

С этим модулем я сталкивался чаще всего, поэтому детальнее разберу его в качестве примера. Думаю, процесс переноса вордпресс базы в остальных вариантах аналогичный, в крайнем случае смотрите видеоинструкции в их описаниях на wordpress.org.

Итак. после Search and Replace и активации, все его функции находятся в одноименном пункте меню раздела «Инструменты». Здесь 4 основных направления:

  • Backup Database — создание бэкапа.
  • Search & Replace — поиск и замена информации.
  • Replace Domain URL — смена домена.
  • SQL Import — импорт.

В первом и последнем пунктах всего по одной кнопке «Экспорт/Имопрт», но, по сути, у вас есть все необходимое для полноценной миграции WordPress базы и сайта. Единственное нужно помнить, что импортируются данные в текущую, подключенную к проекту БД.

Переходим в раздел Replace Domain URL. Фактически в нем предусмотрена возможность замены старого домена на новый.

Эта фишка не избавит вас от остальных шагов в алгоритме но, как минимум, упростит задачу переноса базы данных в WordPress. Кроме того, вы можете поменять префикс таблиц, что тоже пригодится.

Вкладка Search & Replace помогает заменять информацию в БД.

  • Первым делом определяете старые и новые значений, после этого отмечаете таблицы, где должен производиться поиск и замена.
  • По умолчанию опция «Dry Run» включена — это значит, что действия будут происводиться в «тестовом режиме».
  • Если снять галочку, то появится 2 опции на выбор — импорт SQL запроса для внесения правок в БД или же непосредственно выполнение данного действия.

То есть, по сути, вы можете сделать: 1) тестовый прогон задачи, 2) реальную замену данных 3) получить SQL запрос, а после внедрить его через PhpMyAdmin или 4-тую вкладку модуля. Отличная гибкость!

Итого. Надеюсь информации по переносу базы данных в WordPress вам хватит дабы самостоятельного провести эту процедуру. Сложного, в принципе, ничего нет, но при работе с БД всегда нужно быть предельно аккуратными — как минимум, создавайте бэкапы перед началом работы. Все три плагина отлично справляются со своей задачей, но Search and Replace мне лично нравится больше всего — простой, гибкий, без лишних деталей.

Если у вас есть что дополнить о переносе и миграции wordpress базы или сайтов, пишите в комментариях.

У вас есть база данных MS SQL Server, которую нужно перенести на другой физический комп. Вы уже сделали бэкап и радостно приступаете к восстановлению. Но тут обнаруживается, что на том компе, куда нужно перенести базу, установлена более старая версия MS SQL Server. Stack Overflow уверяет вас, что всё плохо. Но так ли это на самом деле?

Конечно, перенос базы из более новой версии в старую - это не классический и не самый правильный сценарий работы. Но зачастую базы данных создаются такими, что они поддерживают все более новые версии SQL, начиная с какой-то, например с 2008 R2, т.к. прямая совместимость у MS SQL более чем отличная. И, например, ваш клиент уже поставил себе MS SQL 2016, а у вас на тестовом сервере для разработки стоит MS SQL 2014. А вы хотите развернуть себе базу клиента, чтобы разобраться, где у него путаница с данными.

Microsoft открестились от проблемы - мол нет у них обратной совместимости, и баста. Резервную копию, созданную в более новом сервере, невозможно восстановить на более старом сервере. Да, у них есть инструменты типа DTS, копирование базы, экспорт-импорт и т.п. Но они настолько неудобны и громоздки, что нормальный перенос большой БД с множеством таблиц сделать с их помощью не особо удобно. Во всяком случае лично у меня не получилось.

Да, можно сгенерировать SQL-скрипты всей базы, включая данные. Но представьте, у вас в базе куча блоб-полей с большими данными, и вообще размер всей базы 500+ ГБ. Представляете, сколько будет занимать такой скрипт, сколько времени он будет генерироваться и исполняться.

Ограничение номер один заключается в том, что вам нужен доступ через MS SQL Management Studio к обоим серверам - старому и новому. Если это не возможно, то должна быть возможность на той машине, откуда нужно перенести базу, установить ту версию SQL, в которую нужно перенести базу, чтобы перенести базу сначала в эту версию локально, а потом уже перетащить её через бэкап или непосредственно через *df файлы базы данных (через Detach/Attach) на новую машину (версия SQL Server"а в этом случае уже будет совпадать).

Еще одним ограничением является то, что вам будет необходим скрипт схемы базы данных (всех объектов, включая таблицы, индексы, констрейнты, хранимые процедуры, триггеры и т.п.) без данных, причем инструкции создания Foreign Key Constraints должны в этом скрипте идти в самом конце, отдельно от скрипта создания самих таблиц.

Опишу кратко сам алгоритм переноса данных. Все действия выполняются в сеансе Management Studio, подключенной к серверу, на который нужно перенести базу.

1) На новом сервере создаем пустую базу данных с такими же файлами и файловыми группами, как переносимая база.

2) Скриптом схемы базы данных создаем все объекты базы (таблицы, индексы, представления, триггеры, хранимые процедуры и функции), но без создания Foreign Key Constraints. Создавать FK на этом этапе нельзя, т.к. они будут мешать вставке данных.

3) Подключаем базу данных, из которой будем переносить данные, в качестве Linked Server"а, чтобы можно было использовать в запросах к новой базе данных обращения к старой базе данных.

EXEC sp_addlinkedserver @server=N"LinkedServerAlias", @srvproduct=N"", @provider=N"SQLNCLI", @datasrc=N"LinkedServerHost\LinkedServerName"; EXEC sp_addlinkedsrvlogin "LinkedServerUser", "false", null, "RealUser", "RealUserPassword";
4) Т.к. структуры баз совпадают, воспользуемся встроенной хранимой процедурой sp_msforeachtable, которая позволяет выполнить запрос над каждой таблицей БД, чтобы сгенерировать скрипт переноса данных из старой базы в новую через запрос вида

INSERT INTO ? SELECT * FROM ?
Вместо знака вопроса sp_msforeachtable подставляет имя каждой таблицы и выполняет запрос несколько раз (по одному разу на каждую таблицу).

Здесь я натолкнулся на самое большое количество граблей.

А) Проблема номер один заключается в том, что для таблиц с IDENTITY-полями необходимо вызывать:

SET IDENTITY_INSERT ON; --INSERT INTO ... (сама вставка); SET IDENTITY_INSERT OFF;
б) Проблема номер два заключается в том, что на таблицах, в которых нет IDENTITY-полей, делать данный вызов нельзя, поэтому требуется динамически определять, есть в таблице IDENITY-колонка или нет.

Это можно сделать таким запросом:

SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE (TABLE_NAME="SomeTable") AND (COLUMNPROPERTY(object_id("dbo.SomeTable"), COLUMN_NAME, "IsIdentity") = 1)
в) Проблема номер три заключается в том, что, как оказалось, в режиме IDENITY_INSERT ON нельзя делать

INSERT INTO ... SELECT * FROM ...
, а нужно перечислять конкретные поля.

Перечислить поля таблицы в строку можно таким запросом:

SELECT SUBSTRING((SELECT ", " + QUOTENAME(COLUMN_NAME) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = "SomeTable" ORDER BY ORDINAL_POSITION FOR XML path("")), 3, 200000);
4) Генерируем скрипт вставки по все таблицы:

Процедура генерации скрипта

EXEC sp_msforeachtable N" DECLARE @command varchar(MAX); DECLARE @name varchar(200); SET @name=""?""; SET @name = SUBSTRING(@name, 8, LEN(@name)-8); SET @command = """"; SELECT @command= SUBSTRING((SELECT "", "" + QUOTENAME(COLUMN_NAME) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = """" + @name + """" ORDER BY ORDINAL_POSITION FOR XML path("""")), 3, 200000); SET @command = ""INSERT INTO ""+ @name +"" (""+ @command + "") SELECT "" + @command + "" FROM "" + ""LinkedServerAlias.SourceDatabase."" + ""?""; SET @command= ""IF EXISTS (select * from INFORMATION_SCHEMA.COLUMNS where (TABLE_NAME="""""" + @Name + """""") AND (COLUMNPROPERTY(object_id(""""dbo.""+@Name+""""""), COLUMN_NAME, """"IsIdentity"""") = 1)) SET IDENTITY_INSERT "" + @name + "" ON; "" +@command; SET @command=@command+"";"" + ""IF EXISTS (select * from INFORMATION_SCHEMA.COLUMNS where (TABLE_NAME="""""" + @Name + """""") AND (COLUMNPROPERTY(object_id(""""dbo.""+@Name+""""""), COLUMN_NAME, """"IsIdentity"""") = 1)) SET IDENTITY_INSERT "" + @name + "" OFF;""; PRINT (@command); --EXEC(@command); // Если раскомментировать, скрипт будет сразу исполняться, а не только выводиться на экран "


5) Исполняем сгенерированный скрипт переноса данных

6) Исполняем скрипт на создание всех Foreign Key Constraints (теперь уже можно).

7) Готово! Вы перенесли базу из нового сервера SQL в старый, хоть это и считалось невозможным. Причем перенос осуществляется всего лишь раза в полтора медленнее, чем скорость передачи данных по сети, т.е. довольно быстро.

8) Прибираемся за собой (отключаем Linked Server):

EXEC sp_droplinkedsrvlogin "LinkedServerUser", null; sp_dropserver "LinkedServerAlias";
Ограничения метода.

1) Подобным методом не получится перенести таблицы, в которых есть колонки с типом XML.
Наверняка есть множество других ограничений, т.к. в той базе, которую я переносил подобным способом, не использовалось множество возможностей SQL-сервера. Вы можете написать об ограничениях в комментариях, и я дополню ими статью.

Спасибо за внимание! Надеюсь, кому-то поможет.



Есть вопросы?

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

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