phpmyadmin仅备份数据库数据,不备份磁盘上的图片文件;若图片存于文件系统(如uploads/目录),需手动同步备份数据库和对应文件目录;若图片以blob形式存储,则导出时须选自定义设置、不限制最大长度、勾选导出blob为十六进制。
phpmyadmin 本身不备份图片文件,只备份数据库里的数据——如果图片是存放在磁盘上的(比如 uploads/ 目录),而数据库里只存路径(如 /images/cat.jpg),那么导出 sql 时根本不会包含那些 jpg、png 文件。必须手动同步备份数据库 + 对应的文件目录。
确认图片到底存在哪儿
这是最关键的一步,错这里后面全白忙。打开 phpMyAdmin,查一下存图片的表(比如 products 或 users),看对应字段(比如 avatar、photo_path)里存的是什么:
- 如果是完整 URL 或相对路径(如
uploads/2024/10/cat.jpg),说明图片在服务器文件系统里 —— 数据库导出不带它 - 如果是
BLOB或MEDIUMBLOB类型,且字段值看起来像乱码(十六进制或 base64 片段),那图片确实存进了数据库 —— 这种能随 SQL 一起导出,但体积大、查询慢、不推荐
用 phpMyAdmin 正确导出含 BLOB 图片的数据库
只有图片真存成 BLOB,才需要这步。默认导出设置会截断大字段,导致图片损坏:
- 进入 phpMyAdmin → 选中数据库 → 点 导出
- 方法选 自定义(别用快速导出)
- 在 格式选项 展开区,把
最大长度改成0(表示不限制) - 勾选
导出 BLOB 作为十六进制(避免文本编码污染二进制内容) - 编码选
utf8mb4,格式选SQL,点执行
生成的 SQL 文件里,INSERT 语句中的图片数据会是类似 0xFFD8FFE00010... 的十六进制串,导入时能还原。
备份图片文件目录(绝大多数情况适用)
95% 的网站把图片放文件系统,靠数据库存路径。这时候你得自己打包对应目录:
- 登录服务器(SSH 或 FTP),找到 web 根目录下图片所在路径,比如
/var/www/html/uploads/或./public/images/ - 用
tar -czf uploads_backup_202410.tar.gz uploads/打包(Linux);Windows 用户可用 7-Zip 压缩整个文件夹 - 确保压缩包和 phpMyAdmin 导出的 SQL 文件保存在同一备份命名下(如
db_202410.sql+files_202410.tar.gz),避免恢复时搞混版本 - 注意权限:备份后的文件夹权限(如
755)和所有者(如www-data)要记下来,还原时需复原,否则图片 403
还原时顺序不能错
先导入 SQL,再上传文件 —— 反过来会导致数据库里路径指向不存在的文件,页面显示空白或占位符:
- phpMyAdmin 导入 SQL 文件(注意
max_allowed_packet和upload_max_filesize要够大,否则大 SQL 会失败) - 用 FTP/SCP 把图片压缩包解压到原路径,检查文件层级是否完全一致(比如
uploads/2024/10/不能少一层) - 最后运行一条 SQL 确认路径有效性:
SELECT COUNT(*) FROM `posts` WHERE `image_path` NOT LIKE 'http%' AND NOT EXISTS (SELECT 1 FROM DUAL WHERE 0=0);—— 实际得靠应用层校验,phpMyAdmin 没法直接查文件是否存在
路径拼错、大小写差异(Linux 区分大小写)、.htaccess 限制访问,都是常见断图原因,比数据库备份本身更容易出问题。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











