之前在腾讯云上买过一个云主机用LNMP搭建了wordpress网站。后来有一天被我搞坏了(最低级配置装了一个Gnome桌面),网站打不开了。当时我就备份了数据库和wp-content目录,重装了操作系统(仍然是Ubuntu 16.04LTS 64位)。但之后一直有事情没有把网站重新搭建起来。
这两天想着换一个服务器,正好闲下来了就把这个网站的事情重新搞起来。
基本的Wordpress环境搭建按照这个博客的方法进行的:
http://www.cnblogs.com/qshow/p/mukuangling.html
步骤在这里就不重复了,但在这个过程中遇到几个问题:
1. 导入之前的sql数据库内容出现DATE不能为0的错误
我在mysql中新建了一个database,然后把之前备份好的sql文件导入进去。但是导入失败,提示说“Invalid default value for 'comment_date”。这其实是由于当前的mysql和版本和之前用的不同了,现在在sql_mode中含有“NO_ZERO_IN_DATE, NO_ZERO_DATE”也就是日期不能为0,而以前的数据库中就是把日期的初始值设为0。
解决方法:
查看当前sql_mode:
mysql> select @@sql_mode
如果在这里修改sql_mode,只能在当前session下生效,若想永久修改,则应修改my.cnf文件,它在/etc/mysql/my.cnf
在其中自行加入如下代码:
[mysqld]
sql_mode=ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
之后重启mysql就可以继续导入了
2. 导入原来的sql文件出现"Incorrect string value: '\xF0\x9F\x98\xAD",...' for column 'commentContent' at row xxx "
这是因为我们的数据库中存在emoji表情,这些表情是按照四个字节为一个进行编码的,而mysql默认是以三个字节为一个进行编码。所以要修改一下设置:
还是修改之前的my.ini,然后只要加入如下代码即可:
[mysqld]
character-set-server=utf8mb4
[mysql]
default-character-set=utf8mb4
之后同样需要重启MySQL3. 修改nginx根目录后打开网站出现"No input file specified"
这是由于/etc/php/7.0/fpm/php.ini中的doc_root设置错误造成的,这里一定要换成你的网站根目录。
此外只要在nginx.conf中修改相应位置就可以了。
4. 导入了wp-content和原来数据库后,只能打开主页,文章都显示404
这是由于数据库部分字段错误。具体是什么错误我还不太清楚。
不过我的解决方法是:
1) 新建一个数据库,重新安装wordpress
2)进行相应设置(尤其是文章的固定链接要改成和之前一样)
3)在nginx.conf中的的/location段中加入如下代码:
try_files $uri $uri/ /index.php?q=$uri&$args;
4)导出新的数据库内容,将其中的wp_options字段全部复制,替换原来备份的sql文件中的该字段所有内容。
5)重新导入修改好的数据库文件
这个方法不太完美,会造成部分设置丢失,但网站的基本内容可以恢复。
搞了一个晚上加一个上午,终于将网站搬过来了。