UPD: Перенос сайта Wordpress на другой домен

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

Для этих целей используется SQL запрос:

#posts
UPDATE wp_posts SET guid = REPLACE (guid, 'old_domain.com/', 'new_domain.com/');
UPDATE wp_posts SET post_excerpt = REPLACE (post_excerpt, 'old_domain.com/', 'new_domain.com/');
UPDATE wp_posts SET post_content = REPLACE (post_content, 'old_domain.com/', 'new_domain.com/');
UPDATE wp_postmeta SET meta_value = REPLACE (meta_value, 'old_domain.com/', 'new_domain.com/');
 
#comments
UPDATE wp_comments SET comment_author_url = REPLACE (comment_author_url, 'old_domain.com/', 'new_domain.com/');
UPDATE wp_comments SET comment_content = REPLACE (comment_content, 'old_domain.com/', 'new_domain.com/');
UPDATE wp_commentmeta SET meta_value = REPLACE (meta_value, 'old_domain.com/', 'new_domain.com/');
 
#links
UPDATE wp_links SET link_url = REPLACE (link_url, 'old_domain.com/', 'new_domain.com/');
UPDATE wp_links SET link_rss = REPLACE (link_rss, 'old_domain.com/', 'new_domain.com/');
 
#options
UPDATE wp_options SET option_value = REPLACE (option_value, 'old_domain.com/', 'new_domain.com/');
 
#usermeta
UPDATE wp_usermeta SET meta_value = REPLACE (meta_value, 'old_domain.com/', 'new_domain.com/');
 
#posts
UPDATE wp_posts SET guid = REPLACE (guid, 'old_domain.com', 'new_domain.com');
UPDATE wp_posts SET post_excerpt = REPLACE (post_excerpt, 'old_domain.com', 'new_domain.com');
UPDATE wp_posts SET post_content = REPLACE (post_content, 'old_domain.com', 'new_domain.com');
UPDATE wp_postmeta SET meta_value = REPLACE (meta_value, 'old_domain.com', 'new_domain.com');
 
#comments
UPDATE wp_comments SET comment_author_url = REPLACE (comment_author_url, 'old_domain.com', 'new_domain.com');
UPDATE wp_comments SET comment_content = REPLACE (comment_content, 'old_domain.com', 'new_domain.com');
UPDATE wp_commentmeta SET meta_value = REPLACE (meta_value, 'old_domain.com', 'new_domain.com');
 
#Links
UPDATE wp_links SET link_url = REPLACE (link_url, 'old_domain.com', 'new_domain.com');
UPDATE wp_links SET link_rss = REPLACE (link_rss, 'old_domain.com', 'new_domain.com');
 
#options
UPDATE wp_options SET option_value = REPLACE (option_value, 'old_domain.com', 'new_domain.com');
 
#usermeta
UPDATE wp_usermeta SET meta_value = REPLACE (meta_value, 'old_domain.com', 'new_domain.com');

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

a:2:{i:758;s:4:"test";i:759;s:4:"test";}
a:2:{i:758;s:4:"test";i:759;s:9:"test";}

Первый вариант то что нужно получить, второй то что имеем. Неверный параметр s - длина строки.

Для исправления ошибки необходимо обработать каждую ячейку БД с неверной строкой.

preg_replace('!s:(\d+):"(.*?)";!e', "'s:'.strlen('$2').':\"$2\";'", $bad_string );

 

Рабочий скрипт с сайта http://www.wtfpl.net/

Комментарии

Аватар пользователя пашка
Спасибо! Это помогло

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