如何用phpMyAdmin 3.x老版本完成核心业务数据库的导出?

作者:袖梨 2026-07-15
phpMyAdmin 3.x导出需调高post_max_size等参数、选自定义导出并勾选CREATE DATABASE和DROP语句、显式设字符集为utf8mb4、大库改用mysqldump命令导出,并导出后校验SQL文件头和INSERT行数。

phpmyadmin 3.x 虽已停止维护,但在老旧生产环境(如 centos 6、php 5.4 环境)中仍常见。它能完成基本导出,但必须绕开几个关键限制才能保住核心业务数据的完整性。

导出前必须确认 max_allowed_packetpost_max_size 是否够用

3.x 版本默认通过 HTTP POST 提交导出请求,整个 SQL 内容拼在表单里发出去。一旦数据库超过 2–3 MB,大概率触发 413 Request Entity Too Large 或页面空白——这不是 phpMyAdmin 崩了,是 Web 服务器(Nginx/Apache)或 PHP 拦截了超大请求体。

  • 检查 php.inipost_max_size 至少设为 128Mupload_max_filesize 同步调高(即使不上传,导出逻辑也复用该配置)
  • Apache 用户需同步调整 LimitRequestBody;Nginx 用户检查 client_max_body_size
  • 改完必须重启 Web 服务,仅 reload 不生效

务必选“自定义”导出并勾选 CREATE DATABASEDROP TABLE

3.x 的“快速导出”会跳过数据库创建语句,导出的 .sql 文件不含 CREATE DATABASE IF NOT EXISTS `xxx`USE `xxx`。直接导入到新环境时,容易因目标库不存在或当前库非目标库而报错 No database selected

  • 进入导出页后,切勿点“快速”,强制选“自定义”
  • 在“对象创建选项”区域,勾选 ADD CREATE DATABASE / USE statementADD DROP TABLE / VIEW / PROCEDURE / FUNCTION / EVENT statement
  • 若业务依赖存储过程或事件,还要手动勾选 ROUTINESEVENTS —— 它们默认不导出

字符集必须显式指定为 utf8mb4,不能依赖默认

phpMyAdmin 3.x 默认使用 utf8(即 MySQL 的 utf8,实际只支持 3 字节 UTF-8),遇到 emoji 或四字节生僻汉字会截断或转成问号。而现代业务库普遍用 utf8mb4,导出时不声明就会丢数据。

  • 在“自定义导出”页,“导出”区域找到 Export method,选 Custom 后展开“格式-specific options”
  • Character set of the file 显式改为 utf8mb4
  • 同时确认“数据创建选项”中 Enclose table and column names with backquotes 已勾选,避免关键字冲突

大库(>50MB)别硬扛,改用 mysqldump 配合 phpMyAdmin 生成命令

即使调高所有限制,phpMyAdmin 3.x 在导出百兆级库时仍常因 PHP max_execution_time 超时、内存溢出或浏览器中断连接而失败。此时它唯一可靠的作用,是帮你生成一条安全可用的 mysqldump 命令。

立即学习“PHP免费学习笔记(深入)”;

  • 在 phpMyAdmin 3.x 导出页填好所有选项(含字符集、结构+数据、ROUTINES 等),但先不点执行
  • 滚动到底部,找到灰色小字提示:Command to be executed:,后面是一整行 mysqldump 命令
  • 复制该命令,SSH 登录服务器,在终端中粘贴执行,重定向输出到文件,例如:mysqldump -hlocalhost -uuser -p'pass' --routines --triggers --events dbname > backup.sql
  • 这样导出的文件可直接用于恢复,且无超时风险

真正麻烦的不是操作步骤,而是 3.x 不报错地静默丢数据:比如没勾 ROUTINES 就真不导,字符集写错就默默截断。导出后务必用 head -n 20 backup.sql 看开头是否有 CREATE DATABASEDEFAULT CHARSET = utf8mb4,再用 grep -c 'INSERT INTO 确认数据行数是否合理——别等导入失败才回头查。

相关文章

精彩推荐