php导出mysql数据库需用exec()调用mysqldump命令,通过--defaults-extra-file安全传参,确保路径权限、捕获错误码,并及时清理临时文件与添加时间戳。

导出 MySQL 数据库到本地文件夹的正确姿势
PHP 本身不直接“导出数据库”,它只能执行 SQL 查询或调用系统命令;真正导出数据库结构和数据的是 mysqldump 命令。想让 PHP 把数据库保存成 .sql 文件到指定文件夹,核心是安全、可控地调用 mysqldump 并写入目标路径。
为什么 exec() + mysqldump 是最常用且可靠的方式
PHP 的 PDO 或 mysqli 只能读写数据,没法导出建表语句、存储过程、字符集设置等完整元信息。mysqldump 是 MySQL 官方工具,支持全量导出(含 --routines、--events、--single-transaction 等关键选项),PHP 只需拼好命令并执行。
- 确保服务器已安装
mysqldump,且 PHP 进程有权限执行(Linux 下常被禁用,需检查disable_functions是否包含exec、shell_exec) - 导出路径必须由 PHP 进程有写权限(比如
/var/www/html/backups/,不能写到/root/或未授权目录) - 敏感信息(密码)不要硬编码进命令字符串,用
--defaults-extra-file方式更安全(见下条)
避免密码明文泄露:用配置文件代替 -p 参数
直接在命令里写 -p'yourpass' 会被进程列表暴露(ps aux 可见),也容易被日志记录。正确做法是创建一个仅限当前用户读取的临时配置文件,让 mysqldump 自动读取。
m18麦考林整站 for Ecshop v2.7.3 安装方法: 1,解压rar包上传到网站根目录 2,导入sql数据库文件,到你的数据库里,可以phpmyadmin等软件 3,修改data里config.php里面的数据库 用户名 密码等信息 为你自己的数据库信息 4,安装完毕之后的后台用户名密码为: 后台地址:域名/admin 用户名:admin 密码:admin123 模板使用教程: htt
- 用
tempnam()创建临时文件,如/tmp/mysqldump_abc123.cnf - 写入内容格式严格:
[client] user = "db_user" password = "db_pass" host = "localhost"
- 执行命令时用
--defaults-extra-file=<code>/tmp/mysqldump_abc123.cnf,并记得unlink()掉该文件 - 注意:Windows 下路径分隔符和权限逻辑不同,此法主要适用于 Linux/macOS 生产环境
导出失败常见原因和对应检查点
运行后没生成文件?或者报错但没提示?重点看这几点:
立即学习“PHP免费学习笔记(深入)”;
-
exec()返回空字符串 ≠ 成功,一定要捕获第二参数(错误输出):exec($cmd, $output, $return_code),$return_code !== 0就代表mysqldump出错了 - 典型错误信息:
mysqldump: Got error: 1045: Access denied for user...→ 检查配置文件用户名密码、MySQL 用户是否允许从 localhost 登录 -
mysqldump: Couldn't execute 'SHOW FIELDS FROM `table`': SELECT command denied to user...→ MySQL 用户缺少SELECT或LOCK TABLES权限 - 导出文件为空?可能是数据库名拼错、表不存在,或
mysqldump被 PHP 的open_basedir限制了可访问路径










