WordPress网站搬家、数据库升级心得

这两天忙着给公司的一批WordPress网站搬家,碰到了不少以前没遇到过的麻烦,总结一下解决问题的经验。WordPress网站搬家除了要把wp-content的文件转移之外,如果碰到数据库设置的变更,就比较麻烦了。在旧空间上,我们的WP是每个站独享一个数据库;在新的主机上由于权限的限制,好几个网站都必须共享一个数据库。解决思路是要在新的空间里给每个WP网站设置不同的prefix,思路很简单,但实际操作的时候还是碰到了不少问题。

第1步 备份wp-content文件夹

先把每个旧网站的wp-content文件夹下载下来,分别上传到新主机每个WP网站对应的wp-content。wp-content文件夹包含了所有的插件(plugins文件夹)、主题(themes)以及附件(uploads)。搬家时为了节约时间和服务器空间,用不到的插件和主题都可以不用搬。

第2步 导出旧网站的数据库

这里有一个比较简单方法,用插件。这次我选的WP数据库插件是BackWPup,这款插件有一个一件导出数据库的功能,可以把当前WP网站的数据库直接导出到sql文件。
BackWPup直接导出数据库
BackWPup的功能其实不止于此,这个插件也稍微有点庞大,不过这次我们就用到这一点,而且只装在旧网站上,新网站不用装,所以不用担心会拖慢速度。

第3步 导入数据库到新的网站上

由于新的空间权限实在有限,我所得到的只有单个数据库的用户名和密码,没有root帐号,也没有更多权限。查了一下WP也没有合适的导入数据库插件,而且由于域名变了,就算能直接导入数据会造成网站无法访问。所以要先给新的空间安装一个PHPMyAdmin,可以让我直接操作到数据库。先去官网下载PHPMyAdmin。下载完毕后解压,打开config.inc.php,找到并且修改以下几个变量:

1
2
3
4
$cfg['Servers'][$i]['host'] = 'domain'; //填入新数据库的URL,对应WP的wp_config.php中的define('DB_HOST', 'domain');
$cfg['Servers'][$i]['auth_type'] = 'cookie'; //确认认证方式为cookie
$cfg['UploadDir'] = 'ImportSQLFile'; //如果没有服务器权限,这行必须设置,否则超过8M的数据库你就不能导入了
$cfg['SaveDir'] = 'ExportSQLFile'; //顺便设置一下导出的数据库存放目录

设置完这几个变量后,把PHPMyAdmin目录整体上传;上传完毕后再在PHPMyAdmin里建立ImportSQLFile和ExportSQLFile两个空文件夹;
把第2步导出的sql文件上传到新建的ImportSQLFile文件夹中;
通过浏览器登录PHPMyAdmin,输入用户名密码,点开要导入的数据库-import,找到如下选项,导入刚刚上传的数据库:
WordPress搬家-导入数据库

数据库导入完毕后,刷新页面,就可以看到已经导入的表了。这些表的前缀(prefix)全都是WP默认的“wp_”,由于在这个数据库中我还要放很多个其他WP网站,所以必须给他们修改前缀,用以区分网站。在Structure中给这些表都打勾,然后选“replace table prefix”,修改完毕后再刷新页面,这些表的前缀就修改完毕(用不着一个一个的重命名)。

修改完表名后,还要给数据库执行一遍以下命令,用来刷新表内数据的的prefix相关内容:

1
2
3
4
//为以防万一,建议先备份数据库
UPDATE `prefix_usermeta` SET `meta_key` = REPLACE( `meta_key` , 'wp_', 'prefix_' );
UPDATE `prefix_options` SET `option_name` = 'prefix_user_roles' WHERE `option_name` ='wp_user_roles';
//注意要替换这两行命令中所有的prefix_为你的实际的前缀

如果不执行这两句SQL命令,登录WP后台会出现这样的提示:You do not have sufficient permissions to access this page.
WordPress搬家-报错You do not have sufficient permissions to access this page

第4步 修改域名

如果新网站的域名和旧网站不同,还需要再登录PHPMyAdmin,找到prefix_opition表(注意前缀是前面修改过的),打开这张表,编辑siteurl和home这两条数据的option_value为新的WP的URL
或者直接执行这两条SQL也可以:

1
2
3
UPDATE `prefix_options` SET `option_value` = 'url' WHERE `option_name` ='siteurl';
UPDATE `prefix_options` SET `option_value` = 'url' WHERE `option_name` ='home';
//注意要替换这两行命令中所有的prefix_为你的实际的前缀,替换url为新网站的实际url(加http://

如果新网站的域名和旧网站相同,则要去域名的控制面板修改DNS到新主机的IP,在主机控制面板加入绑定的域名,等上10分钟,一般就跳转完成了。

第5步 修改所有文章和变量中存在的旧域名(可选)

如果网站旧域名保留的话,这一步可以不做。但如果旧的域名失效,这一步就不能跳过了。运行SQL:

1
2
3
4
UPDATE `prefix_postmeta` SET `meta_value` = REPLACE( `meta_value` , 'oldURL', 'newURL' );
UPDATE `prefix_posts` SET `guid` = REPLACE( `guid` , 'oldURL', 'newURL' );
UPDATE `prefix_posts` SET `post_content` = REPLACE( `post_content` , 'oldURL', 'newURL' );
//注意要替换这两行命令中所有的prefix_为你的实际的前缀,替换oldURL/newURL为旧/新的域名。

2017/7/23更新:
在最近一次搬运网站文件到新服务器的过程中,我偷懒没有新建FTP用户,而是在FTP工具内直接用SSH登录方式上传了所有网站文件。结果发现WordPress后台无法升级插件,也无法上传任何文件,权限出了问题。在搜索了一圈后,原来用SSH上传的文件,并不属于www用户组,因此就没有办法通过网站去修改、上传文件。在putty中执行以下命令解决了问题:

chown -R www:www /网站路径/

本站所有文章均为原创,欢迎转载,请注明文章出处:https://blog.brain1981.com/696.html。百度和各类采集站皆不可信,搜索请谨慎鉴别。技术类文章一般都有时效性,本人习惯不定期对自己的博文进行修正和更新,因此请访问出处以查看本文的最新版本。

如本文对你有用,请在页面右侧栏扫码领取我的支付宝红包,作为打赏吧 (喂到底是我赏你还是你赏我啊-_-!)

关注我们的微信公众号-JennyStudio 本站记录了近几年的工作中遇到的一些技术问题和解决过程,“作品集”还收录了本人的大部分作品展示。除了本博客外,我们的工作室网站 – JennyStudio,内有更多作品回顾和展示。
您也可以扫描左边的二维码,关注我们的微信公众号,在微信上查看我们的案例。

发表评论

电子邮件地址不会被公开。 必填项已用*标注