Доброго времени дня!
Решил перенести свой блог с домена третьего уровня не потеряв контент.
Поискав в яндексе и гугле решения по переносе, в большей массе народ решает с помощью плагинов миграции, либо остановился на своем быстром решении.
Итак дано:
- Блог на wordpress на адресе blog.marvins.ru
- База MySQL с именем wordpress
- Веб-сервер Nginx
- Доступ к терминалу
Нам необходимо перенести блог на адрес marvins.ru, по старому адресу настроить редирект на новый сайт.
Наши действия:
- Дамп базы
- Корректировка дампа
- Создание новой базы и развертывание в ней дампа
- Копирование содержимого сайта
- Правка конфигурационного файла wordpress
- Настройка нового виртуального хоста в nginx
- Настройка редиректа со старого адреса на новый
В данном примере мы считаем. что все находится на одном физическом хосте, если вы переносите на другой физический хост, то действия точно такие-же, только придется еще скопировать нужные файлы на другой хост и там все развернуть.
Делаем дамп базы:
mysqldump -uroot -p wordpress > blog.marvins.ru.sql
Т.к. wordpress хранит в базе полные пути, нам их необходимо скорректировать по имени нового домена.
Получившийся дамп открываем редактором vi и делаем замену старого имени на новое, в моем примере я менял все вхождение blog.marvins.ru на marvins.ru
vi blog.marvins.ru.sql :%s/blog.marvins.ru/marvins.ru/g :wq!
:wq! — сохраняем файл и выходим.
Запускаем клиент MySql и создаем базу и пользователя с паролем которые мы будем использовать для подключения нашего wordpress:
mysql -p CREATE DATABASE wordpress_new CHARACTER SET utf8 COLLATE utf8_general_ci; GRANT ALL PRIVILEGES ON wordpress_new.* TO marvins@localhost IDENTIFIED BY 'YOURPASSWORD'; FLUSH PRIVILEGES; \q
Немного поясню:
- Первая строка – запускает клиент mysql, ключ -p указывает использовать пароль, т.к. пользователь у нас не указан (ключ -u), то подключается от имени root (к системному суперпользователю это имя не относится)
- Второй строкой мы создаем новую базу с именем wordpress_new с кодировкой utf-8
- Третьей строкой мы разрешаем пользователю marvins с паролем YOURPASSWORD любые операции с базой wordpress_new
- Четвертой строкой пересчитываем привилегии
- Пятой строкой отключаемся от MySQL
Копируем наш wordpress в новое место (можно и не копировать, а использовать его, но я решил скопировать, т.к. в случае каких-либо ошибок вы не потеряете хотябы сайт по старому адресу):
mkdir/usr/local/www/newsite cp -r /usr/local/www/wordpress/* /usr/local/www/newsite chown -R www:www /usr/local/www/newsite
Открываем файл конфигурации wordpress:
vi /usr/local/www/newsite/wp-config.php
И в нем прописываем параметры соединения с базой данных в строках:
/** Имя базы данных */
define(‘DB_NAME’, ‘wordpress_new’);
/** Имя пользователя MySQL */
define(‘DB_USER’, ‘marvins’);
/** Пароль к базе данных MySQL */
define(‘DB_PASSWORD’, ‘YOURPASSWORD’);
/** Имя сервера MySQL */
define(‘DB_HOST’, ‘localhost’);
Далее настраиваем виртуальный хост в nginx для нового доменного имени, точнее проще скопировать старый, поправив пути до root директории.
В конфигурации «старого»виртуального хоста, в моем случае blog.marvins.ru устанавливаем редирект на новый сайт:
server { listen 80; server_name blog.marvins.ru; rewrite ^ $scheme://marvins.ru$request_uri? permanent; }
Проверяем корректность конфигурационных файлов nginx:
nginx -t
Если видим
nginx: the configuration file /usr/local/etc/nginx/nginx.conf syntax is ok nginx: configuration file /usr/local/etc/nginx/nginx.conf test is successful
То, говорим nginx перечитать конфигурацию:
nginx -s reload
Проверяем доступность нашего сайта по новому адресу, проверяем корректность редиректа со старого адреса и не забываем внести изменения в google webmasters и яндекс вебмастер.
Удачи, до встречи!