导出mediawiki数据库必须使用标准sql格式:仅含insert语句、禁用结构定义与事务控制、匹配目标表前缀、跳过触发器/事件及二进制字段,并清理set语句与注释。
导出时必须选中 select 语句而非 insert
mediawiki 的 maintenance/importdump.php 和安装脚本只认标准 sql 格式:每行一个 insert into `table` values (...),且不能含 create table 或 drop 语句。phpmyadmin 默认导出包含结构定义和事务控制,直接导入会报错 unknown table 'mw_tag' 或 cannot execute queries while other unbuffered queries are active。
实操建议:
- 进入 phpMyAdmin → 选择你的 MediaWiki 数据库 → 点击「导出」标签页
- 「导出方法」选
自定义,滚动到底部找到「格式特定选项」→ 勾选禁用外键检查(避免导入时约束冲突) - 在「SQL」格式设置中,取消勾选:
添加 DROP TABLE / VIEW / PROCEDURE / FUNCTION / EVENT / TRIGGER 语句、添加 CREATE TABLE 语句、添加 IF NOT EXISTS -
务必勾选:
使用列名插入(确保字段顺序与 MediaWiki 表结构一致)、扩展插入(提升导入速度,但若遇到内存溢出可临时关闭)
表名前缀必须匹配目标 MediaWiki 配置
如果你的 MediaWiki $wgDBprefix 设为 mw_,但导出的 SQL 里是 mywiki_ 或无前缀,importDump.php 会找不到表。phpMyAdmin 不会自动重写表名,得手动处理。
实操建议:
- 导出前确认目标环境的
$wgDBprefix值(查LocalSettings.php) - 若当前数据库表名不含前缀(如
page),而目标需要mw_page,导出后需用文本编辑器全局替换:`page` → `mw_page`、`revision` → `mw_revision` 等(注意反引号包裹,避免误替换单词) - 若已有前缀但不一致(如导出的是
old_mw_,目标是mw_),同样做精准替换:`old_mw_page` → `mw_page` - 跳过
user表的前缀替换(MediaWiki 6.0+ 已弃用该表,改用mw_user;旧版本请核对表存在性)
避开 TRIGGERS、EVENTS 和二进制字段导出
MediaWiki 不依赖触发器或事件,且 page_content(或旧版 text 表的 old_text 字段)可能含 gzip 压缩内容。phpMyAdmin 默认导出这些字段为十六进制(如 0x1F8B...),而 MediaWiki 导入脚本只接受明文或 base64 编码的压缩数据,直接导入会导致页面空白或解析失败。
实操建议:
- 导出前,在「表」列表中取消勾选所有
TRIGGER和EVENT对象(它们通常不显示在主表列表,需点开「更多»」查看) - 对于
text表(MW ≤ 1.34)或content表(MW ≥ 1.35),在导出设置中找到「列」选项 → 取消勾选old_text或content_blob字段(这些字段应通过dumpBackup.php单独导出 XML) - 如果必须保留正文内容,改用命令行导出:
mysqldump --skip-triggers --no-create-info --compact wiki_db text > text.sql,再手动清理十六进制输出
导入前要删掉 SET NAMES 和时间戳注释
phpMyAdmin 导出的 SQL 开头常有 SET NAMES utf8mb4; 和类似 -- Dump completed on 2024-05-20 14:23:01 的注释行。MediaWiki 的 SQL 执行器(DatabaseMysqlBase::doQuery)不支持 SET 语句,会中断执行并报错 Unknown system variable 'NAMES'。
实操建议:
- 用文本编辑器打开导出的 .sql 文件,删除开头所有以
--或SET开头的行,直到第一个INSERT INTO出现为止 - 检查文件末尾是否有多余的
COMMIT;或UNLOCK TABLES;—— 这些也得删掉,MediaWiki 导入过程自行管理事务 - 保存为 UTF-8 无 BOM 编码,Windows 记事本易加 BOM,推荐用 VS Code 或 Notepad++ 确认编码
最麻烦的不是导出步骤,而是表前缀和二进制字段的隐式依赖——它们不会报错,但会让导入后的 wiki 页面打不开或搜索失效,调试时容易绕远路。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











