Как я переносил WordPress между серверами и ничего не потерял
Как я переносил WordPress между серверами и ничего не потерял
Переезд WordPress — это всегда стресс. База данных, файлы, плагины, темы, медиатека. Одна ошибка — и сайт лежит. Зато когда сделано правильно, чувствуешь себя богом администрирования.
Расскажу, как я переносил mysurik.ru с одного хостинга на другой и не поседел.
Подготовка — самое важное
Я не люблю сюрпризы. Поэтому перед переездом сделал дамп всего:
1. База данных: wp db export /tmp/mysurik_backup.sql
2. Файлы: tar -czf /tmp/mysurik_files.tar.gz /var/www/mysurik.ru/
3. Проверил целостность: grep -c «INSERT INTO» /tmp/mysurik_backup.sql
Это был план Б. Если что-то пойдёт не так — всегда можно откатиться.
Перенос файлов
На новом сервере создал ту же структуру директорий. Залил архив через rsync — это безопаснее, чем scp или ftp, потому что rsync докачивает файлы при обрыве:
rsync -avz /tmp/mysurik_files.tar.gz mysurik@новый-сервер:/tmp/
На новом сервере распаковал:
tar -xzf /tmp/mysurik_files.tar.gz -C /var/www/
Важный момент: права на файлы. У WordPress свои требования. Я выставил:
chown -R www-data:www-data /var/www/mysurik.ru/
find /var/www/mysurik.ru/ -type d -exec chmod 755 {} \;
find /var/www/mysurik.ru/ -type f -exec chmod 644 {} \;
Перенос базы данных
Создал новую БД и пользователя:
mysql -e «CREATE DATABASE mysurik_ru;»
mysql -e «GRANT ALL ON mysurik_ru.* TO ‘mysurik_ru’@’localhost’ IDENTIFIED BY ‘пароль’;»
mysql -e «FLUSH PRIVILEGES;»
Залил дамп:
mysql mysurik_ru < /tmp/mysurik_backup.sql
Правим wp-config.php
Это тот момент, где многие спотыкаются. В wp-config.php нужно поменять:
- DB_NAME, DB_USER, DB_PASSWORD — под новую БД
- WP_HOME и WP_SITEURL — если домен временно меняется
Я ещё добавил в wp-config.php несколько строчек для отладки:
define('WP_DEBUG', true);
define('WP_DEBUG_LOG', true);
Это спасло, когда после переезда одна из страниц вываливала белую страницу смерти — в debug.log нашёлся конфликт плагина кеширования с версией PHP.
Проверка ссылок в базе
Если домен остался тем же — тут ничего делать не надо. А если меняется — придётся заменить все вхождения старого домена в базе через wp-cli:
wp search-replace 'старый-домен.ru' 'новый-домен.ru' --skip-columns=guid
Я не менял домен, но всё равно прогнал search-replace для подстраховки — wp-cli показал 0 замен, значит всё чисто.
Акт переноса — DNS
Переключил DNS-записи на IP нового сервера. TTL перед этим выставил на 300 секунд (5 минут), чтобы переключение было быстрым. Проверил через nslookup и whatsmydns.net.
Через 10 минут сайт открылся на новом сервере. Зашёл в админку — работает. Проверил RSS, sitemap, все страницы — всё на месте.
Что пошло не так
Из ошибок: на новом сервере стояла другая версия PHP (8.1 против 8.3). Плагин кеширования ругался, пришлось обновить. Ещё imagemagick не обрабатывал webp — доустановил пакет.
Итог
Переезд занял около часа. Без единого потерянного комментария, файла или настройки. Секрет простой:
1. Полный бекап перед стартом
2. Проверка каждого шага
3. wp-cli как основной инструмент
Теперь у меня есть инструкция и скрипт автоматизации на bash — на случай следующего переезда.