我先把我的问题描述一下:
我的个人博客是使用Wordpress建的站点,站点架设在阿里云ECS服务器上.
昨天早上的时候还是好好的,可以正常评论,审核,然后到了晚上一个同学突然告诉我评论被挂了,界面显示WordPress站点遇到了致命错误.
我感到纳闷,因为我并没有对我的站点做什么大的改动,按理说不可能发生这样的情况.于是今天,我自己去看了看,确实如此,之前所有的评论都没有了,而且无法发送新的评论.
这种感觉真是很难受啊,不明不白地.于是乎第一节课下了,回宿舍赶紧操作.虽然是一头雾水,没有什么思路,搞了很久乃至饭都没吃,对象视频电话也没打,但是我想今天就把它给解决掉,不然复习都复习不进去.
直到下午四点半终于弄好了!很是开心!图为我最后一次测试成功,(但是之前所有的评论都没有了,后来恢复备份又回来了)
一些我踩过的坑我就不说了,直接进入最重要的步骤:
我们知道wordpress数据库默认建有12个表格,如下图:
我记得很清楚的就是有一个数据表是wp_comments,它是用来储存评论信息的.
因为在我刚用博客的时候,我曾经让室友都给我评论,然后我登陆数据库查看这个wp_comments数据表,看看它们发的评论都同步上来了没有.所以我印象比较深刻.
当我进入phpMyadmin准备看看wordpress数据库时候,我很快就发现没有了wp_comments这个数据表.
我的第一反应是可能被SQL注入了,因为这学期刚学这些东西,所以我以为就是黑客通过网站的评论功能,构建一些攻击性的sql语句,然后将我的wp_comments数据表给删掉,这是很有可能的.
但是我比较笨啊,也不知道怎么查看数据库的日志文件,想看看发生了什么操作,如果真是有人通过sql注入删掉了我数据库里面的信息,那么看看能不能再恢复回来.结果网络上搜不到教程,所以这条路堵死了.
之后呢,我就想着,没办法了,赶紧恢复备份吧.大不了把文章重新发一遍.但是,令人惊讶的是,备份也失败了!
报错:Invalid default value for ‘comment_date’.
看到这里,我想,这果然是和wp_comments这个数据表有关.
然后,我就想既然这个表没有了,那么我就再创建一个新的表吧,只要字段,属性什么都相同就好了,虽然会丢掉站点以前的评论(必然丢了呢,因为这个表已经被删掉了,恢复过来很困难).
于是我上网搜了挺久,找到的都是只知道基本的信息,如下图:
没办法,有总比没有强,先试试吧.于是我利用phpMyadmin进行数据表的创建,不知道的属性都不填.
最后把表信息填好了,结果现实很残酷,最后发现还是报错:Invalid default value for ‘comment_date’.
这句话的意思就是:'comment_date’的默认值无效.
所以说我们自行创建的表还是没有解决掉这个问题.那么可不可能是MySQL自身出现了问题呢?
很戏剧,答案就是如此,和之前我遇到的一个问题一样:VSCode升级了C++ extensions之后,突然运行之后没有任何反应.事后发现就是插件升级之后没做好兼容,根本就不是我们自己导致的错误.
大家一定要看一下这篇参考文章:感谢大佬!
同样发现是mysql的问题了,以前我使用的mysql5.6, 前不久刚升级到5.7.
报错信息:Invalid default value for ‘comment_date’
原因出在类似这样的语句,这是MySQL升级时自动执行的命令.所以有一点数据库基础的都能够看懂,如果存在wp_comments这个数据表,那么先把它删掉,之后呢,再次创建一个新的表格.
问题就出在这里,因为5.6版本升级成为5.7版本后,引起的默认值不兼容的问题。comment_date字段, 类型是datetime,想到可能是类型的默认值被限制了, 查看 sql_mode。
`comment_date` datetime(0) NOT NULL DEFAULT '0000-00-00 00:00:00',
`comment_date_gmt` datetime(0) NOT NULL DEFAULT '0000-00-00 00:00:00',
果然:NO_ZERO_IN_DATE,NO_ZERO_DATE这两个参数限制时间不能为0.
所以创建表格这一步就无法成功,但是删除表格这一步已经做了!
真正认识到问题之后,解决起来就很轻松了:
永久修改:
1.直接修改my.cnf文件.(这是MySQL的配置文件):
vim /etc/my.cnf
在[mysqld]下面添加如下列:
sql_mode=ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
2.重启MySQL服务
/bin/systemctl restart mysqld.service
3.在phpMyadmin控制面板中执行用于创建表的SQL语句:
DROP TABLE IF EXISTS `wp_comments`;
CREATE TABLE `wp_comments` (
`comment_ID` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT,
`comment_post_ID` bigint(20) UNSIGNED NOT NULL DEFAULT 0,
`comment_author` tinytext CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_520_ci NOT NULL,
`comment_author_email` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_520_ci NOT NULL DEFAULT '',
`comment_author_url` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_520_ci NOT NULL DEFAULT '',
`comment_author_IP` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_520_ci NOT NULL DEFAULT '',
`comment_date` datetime(0) NOT NULL DEFAULT '0000-00-00 00:00:00',
`comment_date_gmt` datetime(0) NOT NULL DEFAULT '0000-00-00 00:00:00',
`comment_content` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_520_ci NOT NULL,
`comment_karma` int(11) NOT NULL DEFAULT 0,
`comment_approved` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_520_ci NOT NULL DEFAULT '1',
`comment_agent` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_520_ci NOT NULL DEFAULT '',
`comment_type` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_520_ci NOT NULL DEFAULT '',
`comment_parent` bigint(20) UNSIGNED NOT NULL DEFAULT 0,
`user_id` bigint(20) UNSIGNED NOT NULL DEFAULT 0,
PRIMARY KEY (`comment_ID`) USING BTREE,
INDEX `comment_post_ID`(`comment_post_ID`) USING BTREE,
INDEX `comment_approved_date_gmt`(`comment_approved`, `comment_date_gmt`) USING BTREE,
INDEX `comment_date_gmt`(`comment_date_gmt`) USING BTREE,
INDEX `comment_parent`(`comment_parent`) USING BTREE,
INDEX `comment_author_email`(`comment_author_email`(10)) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 35 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_520_ci ROW_FORMAT = Dynamic;
最后可以看到,表格成功创建.
如果没有修改my.cnf文件就创建表格的话,仍旧会报错:Invalid default value for ‘comment_date’.
切记,修改之后重启MySQL服务.
最后建议大家备份网站,而且建议大家使用必应搜索,效率很高,相关度也令人满意.另一个浏览器我就不说了,我要吐了.
切记,修改之后重启MySQL服务.
最后建议大家备份网站,而且建议大家使用必应搜索,效率很高,相关度也令人满意.另一个浏览器我就不说了,我要吐了.
那么到这里问题就完全解决了.如果你觉得本文对你的问题有帮助的话,可以为我点一个赞和关注.更可以访问我的个人博客乔治的编程小屋,相信我们遇到过很多一样的问题,也相信我的博客能够对你有一点点帮助.