使用Bigdump恢复phpMyAdmin数据库备份时报passworddate默认值无效错误
问题产生原因
- 目标MySQL服务开启了
NO_ZERO_DATESQL模式,该规则禁止将'0000-00-00'这类不符合日期规范的值作为date类型字段的默认值。高版本MySQL(5.7及以上)默认开启该模式。 - 你所导入的SQL备份是从低版本MySQL导出的,旧版本默认未开启
NO_ZERO_DATE限制,因此导出的建表语句中保留了0000-00-00的默认值配置,不符合高版本MySQL的规则。
解决方案
方案1:临时调整导入会话的SQL模式(推荐,无需修改备份文件)
该方案仅临时关闭本次导入会话的日期严格限制,不会影响MySQL全局配置:
编辑Bigdump工具的bigdump.php配置文件,找到$dbpre_query配置项,添加如下内容:
$dbpre_query[] = 'SET sql_mode = "";';
保存配置后重新执行导入即可。
方案2:修改备份文件中的建表语句
直接编辑你要导入的SQL备份文件,找到报错位置对应的passwordhistory表建表语句,调整passworddate字段的默认值为合法配置:
-- 方案A:允许字段为NULL,默认值设为NULL `passworddate` date NULL DEFAULT NULL, -- 方案B:保留非空限制,设置合法的默认日期 `passworddate` date NOT NULL DEFAULT '1970-01-01',
修改完成后保存文件,重新执行导入即可。
方案3:全局修改MySQL配置(不推荐,仅适用于业务必须使用零日期的场景)
编辑MySQL的配置文件(Linux系统为my.cnf,Windows系统为my.ini),找到sql_mode配置项,移除其中的NO_ZERO_DATE和STRICT_TRANS_TABLES参数,重启MySQL服务后再执行导入。该配置会全局降低MySQL的数据校验严格性,非必要不建议使用。
内容的提问来源于stack exchange,提问作者pharma
相关产品推荐
相关产品推荐

