记一次wordpress网站迁移的经历

wordpress网站迁移说难不难,说简单不简单,涉及的东西也是不少很杂。

找了资料不少都是说用什么插件,有些还须要付费购买才能用,用了以后还各类问题,
我作了简单的尝试, 不须要wordpress的插件,熟悉linux命令,彻底能够自行迁移php

环境: Centos 7 ,  LNMP

旧站点:a.test.com
旧数据库: atest
旧项目代码路径: /var/www/atest

新的站点: b.test.com
新数据库: btest
新项目代码路径: /var/www/btest

将旧 a.test.com 站点 迁移到新 b.test.com域名站点

迁移步骤: 复制wordpress代码-->更改配置域名/数据库链接信息-->导出数据库修改域名/存储路径信息-->导入新数据库-->添加nginx配置-->重启服务html

一、复制a.test.com完整代码,这里能够压缩或者直接复制一份wordpress代码mysql

# cp -r atest  btest

二、修改新复制的wordpress代码中全部出现a.test.com域名的字符替换为 b.test.comlinux

# cd  btest
# for i in `grep -R "a.test.com" . | awk -F":" '{print $1}' | sort -u`;do sed -i 's/a.test.com/b.test.com/g' $i; done

修改wordpress数据库配置nginx

# vi  wp-config.php


更改新的数据库链接信息
sql

至此wordpress新的站点项目代码已经修改好新的域名和新的数据库信息数据库

三、导出数据库(mysqldump),保存为sql格式文件ide

以 atest数据库为例
 # mysqldump -uroot -p  atest > atest.sql


四、修改数据库文件atest.sql (也能够用wp-cli工具wp search-replace直接修改), 这里直接修改sql文件是最为稳妥
修改替换atest.sql数据库文件中出现a.test.com的字符改成b.test.com
wordpress

# sed -i 's/a.test.com/b.test.com/g'  atest.sql


修改替换test.sql数据库文件中的网站存储路径, 我这里旧的存储路径是/var/www/atest, 改成新的存储路径/var/www/btest
工具

# sed -i 's/var\/www\/atest/var\/www\/btest/g'  atest.sql


五、新建数据库btest, 容许admin/admin用户全部权限,自行根据状况定义

> create database btest character set utf8;
    > grant all privileges on btest.* to 'admin'@'%' identified by 'admin';
    > flush privileges;
    导入修改好的atest.sql数据
    > use btest;
    > source /root/atest.sql;

至此数据库迁移完成,并已经修改好新的站点相关域名,存储路径信息

六、最后一步配置nginx (支持wordpress多站点的配置)

nginx  https配置 和  root路径根据自身状况自行配置,这里很少说 
 #  vi /etc/nginx/conf.d/btest.conf
server {
  server_name b.test.com;
  fastcgi_pass_request_headers on;
  fastcgi_pass_header Authorization;

   root /var/www/btest;

   #Load configuration files for the default server block.
  rewrite ^/([_0-9a-zA-Z-]+/)?wp-admin$ /$1wp-admin/ permanent;
  if (-f $request_filename){
        set $rule_2 1;
  }
  if (-d $request_filename){
        set $rule_2 1;
  }
  if ($rule_2 = "1"){
  }
  rewrite ^/([_0-9a-zA-Z-]+/)?(wp-(content|admin|includes).*) /$2 last;
  rewrite ^/([_0-9a-zA-Z-]+/)?(.*.php)$ /$2 last;
  rewrite /. /index.php last;

   location / {
       index  index.html index.php;
   }
   location ~ ^(.+\.php)(.*)$ {
      fastcgi_pass   127.0.0.1:9000;
      fastcgi_split_path_info       ^(.+\.php)(.*)$;
      fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
      fastcgi_param PATH_INFO       $fastcgi_path_info;
      include        fastcgi_params;
   }
  listen 443 ssl;
  ssl_certificate /etc/nginx/ssl/b.test.com.crt;
  ssl_certificate_key /etc/nginx/ssl/b.test.com.key;
}
server {
    if ($host = b.test.com) {
        return 301 https://$host$request_uri;
    } # managed by Certbot
  listen 80;
  server_name b.test.com;
  return 404; # managed by Certbot
}

七、重启nginx服务,访问新地址,便可


问题:

多站点迁移测试中发现若是a.test.com的域名迁移更改成 cc.test.com 访问新地址后发现有一些原来的主题样式设置失效了,又要从新设置,从新设置是不可能,有一些操做设置都忘记了

个人解决方法:

迁移前 a.test.com的域名字符长度是 10, 迁移后的新域名 cc.test.com字符长度是 11, 两个域名字符长度不同,就会出现迁移后样式设置丢失的状况,多方查找缘由,最大多是数据库会同时保存域名的字符串长度,判断惟一性。因此更改个人域名迁移前和迁移后的域名字符长度同样 b.test.com后,迁移后就显示正常了,网站跟原来的wordpress同样。这只是个人临时解决方法,应该是能够直接修改数据库里面关于这个域名字符长度设置的,但不知怎么修改,若有更好的解决方法请留言给我,我学习一下,谢谢!!