由于腾讯云有学生计划,每个月可以有50块的代金券,于是我就愉快地用上了腾讯云的服务器。本来迁移一个wordpress应该是很简单的事情,居然被我折腾了一天!!!整整一天!!所以,还是记录一下吧。
想象中的迁移其实相当简单啊,由于先前已经把apache、php模块、mysql都装好了,只要把数据库和网站文件复制过来,然后改一下wp-config.php就行啦。但没想到的是,由于版本的不一致和权限的问题,我踩了不少坑。
第一坑:mysql版本不一致
在腾讯云,我的系统是centos6.7,mysql是通过yum安装的,看看版本:
rpm -qa | grep mysql
5.1版本的,而我在另外在另外一台服务器上面的mysql是5.6版本的,所以,当我想愉快的用navicat-for-mysql来进行数据传输的时候,出现了编码错误,无法传输。高版本的mysql有这样的排序规则:utf8mb4_unicode_ci
,低版本的没有。
所以,我只能去踩第二个坑了。
第二坑:不能直接把数据库搬过来
踩完第一坑,想着说,既然不能这么传输数据库,那我就直接导出sql,然后在新的数据库执行就好了。
导出、导入完毕,然后上传wordpress文件到服务器,更改wp-config.php中的数据库配置。然后配置虚拟主机,重启apache,一切正常。
浏览器输入ip来访问。居然重定向到apache的默认页面去了。很明显,数据库根本连接不了。。
最后的解决方法是,老老实实的,先不导入数据库,让wordpress自己完成安装,把默认的表都建齐了,然后把默认的数据给删掉,最后把之前导出的sql文件里的insert语句重新执行一遍,相当于重新写数据了。
第三坑:固定链接与.htaccess文件
网站的url设计用的是域名+文章名,这个可以在wordpress后台的“固定链接”里面设置。但是我设置了之后,发现居然只有“朴素”模式可以用,采用别的固定链接,都会404。
搜索引擎和wordpress都告诉我,是.htaccess
文件的问题。
于是我在网站根目录下新建了一个.htaccess
文件,把它告诉我要填写的内容写进去了,保存。
vim .htaccess
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ – [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
然后,在apache的virtual host配置里,加了以下设置,使.htaccess
生效:
<Directory “/mypath/wordpress”>
AllowOverride ALL
Order allow,deny
Allow from all
</Directory>
其中,AllowOverride ALL
是一定要加的,这个代表使用.htaccess
的策略。
但是,问题出现了,加了这个配置之后,图片、css、js等静态文件访问不了了。
经过好久好久的测试,千言万语可以通过以下一行命令解决:
将路径先切换到wordpress网站根目录,然后
chown -R apache:apache ./*
把所有文件的拥有者改成apache,把所属的组改成apache,这样apache就有权限了。这也直接能解决第四个坑
第四坑:在线更新wordpress出错
无论是升级wordpress还是升级插件,总是会出现权限错误,都不成功。
都是权限不足!如果你够暴力,直接全部777权限,解决,但不建议这么做。我最终还是选择了把网站的owner和group都改成了apache,正如坑三所提到的那样。
总结
权限问题!权限问题!权限问题!
这个问题在我配置网站的时候经常有,次次有,所以一定要把系统的各种权限搞懂,不要每次都用root去倒腾一些东西,得不偿失!要建立起良好的权限管理的习惯。
这篇写的思路比较混乱,之后再把之前配置整个服务器的过程记录一下。
我目前也是,打算迁移博客,。但感觉啥都不懂,好困难
慢慢折腾呗,有啥需要帮助的留言问我