升级 PHP 7.2 与 MySQL 5.7.25
洞中方一日,世上已千年
wordpress 的升级提示看的我心烦,然而因为虚拟主机不支持最新版的 PHP 7.2 ,所以一直点不了升级,升级主机又肉疼,因此也更新疲懒
今日惊觉阿里云的共享虚拟主机(没错,我就是穷扣扣的用的这个)支持 PHP 7.2 了
美滋滋升级,根据提示稍后2-5分钟,wordpress 终于提示我可以升级了
然而…
升级失败,网关超时,网上提到了一些修改服务器和数据库sql的操作,随后我注意到 mysql 提供了 5.7.25 的升级,因此打算把 mysql 也升级一番,不用新版不舒服斯基
由于升级 mysql 过程中将会重置数据库,所以去阿里云的DMS里进行了数据库导出,保险起见也去 wordpress 里进行了导出操作
随后去后台变更了数据库
几次确认后,成功变更数据库,数据库的地址、用户名都变了,密码重置,然后在导入中,报了一个错误
1 |
错误信息:Invalid default value for 'comment_date' |
根据查询,原来包括 comment_date 在内的多个 datetime 数据的默认值被设置为了 ‘0000-00-00 00:00:00’ ,而 mysql 5.7 中 sql_mode 参数中包含 NO_ZERO_IN_DATE 和 NO_ZERO_DATE
NO_ZERO_IN_DATE 意为日期和月份不能为零(但是支持年月日都为零)
NO_ZERO_DATE 意为不能插入全零日期(即支持年月日中任意一位不为零)
由上,应当去掉 NO_ZERO_DATE 即可,然而阿里云的虚拟主机并没有给SUPER权限,所以不能使用 set global ,只能在导入的sql文件的第一行,插入一句
1 |
set sql_mode='ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'; |
来临时修改sql_mode的配置,这个配置将只在当前会话生效
随后即可导入成功,最后去 wordpress 的 wp-config.php 文件中修改数据库的地址、用户名、密码,这次升级就算完成了
当然,事后测试发现还是不能升级,再继续排查问题吧。
最后使用覆盖方法离线升级,搞定收工