从MariaDB 10.1迁移至10.4时遇ERROR 1054错误,求解决方案
解决MariaDB 10.4迁移时ERROR 1054 Unknown column 'pusername'的问题
听你描述的情况,这个问题确实有点棘手——毕竟在10.3上完全正常,跨到10.4就出问题,大概率是两个版本的默认配置或导出/导入行为差异导致的。下面是我整理的几个排查和解决方向,你可以一步步试:
1. 先确认表结构是否真的在10.4中正确创建
首先别着急导入全量数据,先单独把表结构导入到10.4服务器里,然后用DESCRIBE your_table_name;命令查看对应表是否存在pusername字段。
- 如果表结构导入后就没有这个字段,说明备份文件里的表结构本身有问题,或者导入时因为版本兼容问题丢失了字段。这时候你可以从10.3服务器里导出纯表结构(用
mysqldump -d database_name > structure.sql),再导入10.4试试。
2. 检查sql_mode的差异
MariaDB 10.4的默认sql_mode比10.3更严格,比如默认开启了ONLY_FULL_GROUP_BY、STRICT_TRANS_TABLES等,可能会影响某些隐式字段引用的解析。你可以做这两步:
- 在10.3服务器上执行
SELECT @@sql_mode;,复制得到的模式值; - 在10.4服务器上临时设置相同的模式:
SET GLOBAL sql_mode = '复制过来的模式值';,然后再尝试导入备份文件。
如果导入成功了,说明是sql_mode的问题,你可以修改10.4的my.cnf(或my.ini)文件,把sql_mode配置成和10.3一致,重启MariaDB后永久生效。
3. 调整mysqldump的导出参数
从10.3导出备份时,试试加上这些兼容性参数,再导入10.4:
mysqldump --compatible=mysql57 --no-tablespaces -u username -p database_name > backup.sql
--compatible=mysql57:让导出的SQL兼容更通用的语法,避免10.4对某些新语法的严格校验;--no-tablespaces:跳过表空间相关的语句,有些版本间的表空间格式差异会间接引发字段找不到的错误。
4. 排查触发器或视图的依赖
如果出错的表关联了触发器或视图,可能是触发器/视图的定义里引用了pusername字段,但在10.4中因为权限或语法问题,触发器创建时没有正确关联表结构。你可以:
- 从10.3导出时,单独导出触发器和视图(用
mysqldump -t -d -R database_name > triggers_views.sql); - 先在10.4中创建好所有表结构,再手动导入触发器和视图,最后导入数据。
5. 手动修复SQL文件中的问题
如果前面的方法都不行,你可以打开备份的SQL文件,搜索pusername字段出现的位置:
- 看看是不是在
INSERT或SELECT语句里引用了这个字段,但对应的表创建语句里没有定义它; - 或者是不是因为SQL文件里的某些注释、特殊字符导致字段名被截断,这种情况可以手动补全字段定义或者修正语句。
内容的提问来源于stack exchange,提问作者Gagan Pal
相关产品推荐
相关产品推荐

