本地MySQL5.7的WordPress数据库导入MariaDB5.5.68报SQL语法错误
报错根因
- 核心是两端数据库版本存在语法特性差异:本地使用的MySQL 5.7支持时间类型精度定义语法,目标端的MariaDB 5.5.68属于老旧维护版本,不支持该高版本特性,解析SQL时直接失败。
- 具体触发点在
created_at字段的定义行:MariaDB 5.5不支持timestamp(0)、CURRENT_TIMESTAMP(0)这类带精度括号的写法,该语法是MySQL 5.6版本后才引入的,低版本数据库读到括号中的精度参数时无法识别,直接抛出第6行附近的语法错误。 - 该SQL片段里还有两个潜在兼容点,修复完时间精度问题如果还报错可以一并处理:一是部分低版本MariaDB不支持在主键定义末尾加
USING BTREE后缀,二是ROW_FORMAT = Dynamic的定义在MariaDB 5.5的MyISAM引擎下也可能触发兼容报错。
修复方案
方案1:直接修改已导出的SQL文件(适合已经拿到备份文件的场景)
- 用文本编辑器打开导出的.sql备份文件,做全局替换:
- 将所有
timestamp(0)替换为timestamp - 将所有
CURRENT_TIMESTAMP(0)替换为CURRENT_TIMESTAMP
- 将所有
- 替换完成后先尝试导入,如果还报
USING BTREE相关错误,就全局删除主键定义后多余的USING BTREE字段;如果报ROW_FORMAT相关错误,全局删除建表语句末尾的ROW_FORMAT = Dynamic片段即可。 - 示例中
ej_wpmailsmtp_debug_events表修改后可正常执行的建表语句如下:
DROP TABLE IF EXISTS `ej_wpmailsmtp_debug_events`; CREATE TABLE `ej_wpmailsmtp_debug_events` ( `id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT, `content` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL, `initiator` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL, `event_type` tinyint(3) UNSIGNED NOT NULL DEFAULT 0, `created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`id`) ) ENGINE = MyISAM AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
方案2:导出时开启兼容模式(适合还未生成备份文件的场景)
- 重新从本地MySQL 5.7导出数据库时,提前配置兼容低版本的规则,避免手动改文件的麻烦:
- 用
mysqldump命令导出时,追加参数--compatible=mysql5,导出的SQL会自动剥离MySQL 5.5以上版本的特有语法,可直接导入MariaDB 5.5 - 用phpMyAdmin等可视化工具导出时,选择自定义导出模式,在兼容性选项中选择适配
MySQL 5版本,导出的文件无需额外修改即可正常导入。
- 用
方案3:升级目标端数据库版本(长期推荐方案)
- MariaDB 5.5早已停止官方安全维护,WordPress核心、各类主题和插件后续都会逐步提升数据库最低版本要求,长期运行站点建议直接将目标服务器的MariaDB升级到10.3及以上的长期支持版本,后续站点迁移、功能升级都不会再遇到这类低版本兼容问题。
内容的提问来源于stack exchange,提问作者itdoesntmatter1222
相关产品推荐
相关产品推荐

