Docker部署Azerothcore启动报ERROR 1060 重复列名'artkit0'
错误根因
该报错触发逻辑为:AzerothCore启动时自动执行世界库更新SQL2022_06_14_01.sql时,尝试新增artkit0列,但目标表中该列已存在,触发MySQL 1060重复列错误。绝大多数场景为数据库更新逻辑冲突导致,常见诱因包括:
- 手动导入过包含该字段的SQL文件,同时开启了容器自带的自动更新机制
- 旧版本残留的数据库持久化数据和新版本镜像的更新逻辑不匹配
- 本地仓库代码和运行的Docker镜像版本不一致,导致更新文件重复执行
解决方法
按操作难度从低到高排序,新手优先选第一种:
- 方案1:全量清理旧数据重新初始化(无自定义数据首选)
- 停止所有运行中的AzerothCore容器:
docker compose down - 删除数据库持久化目录,默认路径为部署目录下的
docker/database-data,该操作会清空所有旧游戏数据,首次部署无自定义内容可直接操作。 - 同步最新版本资源:
docker compose pull # 本地clone仓库部署需额外执行 git pull - 重新启动容器等待初始化完成:
docker compose up -d
- 停止所有运行中的AzerothCore容器:
- 方案2:手动删除冲突字段(保留已有数据首选)
- 进入MySQL容器连接
acore_world数据库。 - 打开报错路径下的
2022_06_14_01.sql文件,查看第3行ALTER TABLE语句操作的目标表(通常为creature_template表)。 - 执行SQL删除已存在的冲突字段:
ALTER TABLE 你查到的目标表名 DROP COLUMN artkit0; - 重启AzerothCore服务,自动更新会重新执行该SQL完成更新。
- 进入MySQL容器连接
- 方案3:标记更新为已执行(仅临时应急用)
向acore_world库的updates表插入对应SQL文件的执行记录,让自动更新程序跳过该文件,该方法可能引发后续版本连锁冲突,不推荐新手使用。
注意事项
- 自动更新和手动导入SQL两种更新方式只能选一种,新手全程使用容器自动更新即可,不要手动往库中导入仓库自带的更新SQL
- 跨大版本升级不要直接复用旧的持久化数据,建议按方案1清库初始化
- 部署时保证本地仓库代码和Docker镜像版本完全一致,避免更新文件错位
内容的提问来源于stack exchange,提问作者Sam Brown
相关产品推荐
相关产品推荐

