不能用 ZIP 打包+通用 SQL 文件实现跨发行版无损搬家,因 ZIP 丢失权限/链接/SELinux 上下文,SQL 文件受 MySQL 版本、字符集、sql_mode、认证插件等限制,需用宝塔原生 tar.gz+SQL 备份并手动校验权限、路径、字符集与连接。

不能用 ZIP 打包 + 通用 SQL 文件实现跨不同 Linux 发行版的“无损”搬家。宝塔面板本身不生成 ZIP 包,也不保证 SQL 文件在跨系统时自动适配权限、路径、字符集或 MySQL 认证方式——这些恰恰是迁移失败的高发点。
为什么 zip 不适合宝塔网站文件迁移
宝塔默认使用 tar.gz 打包,因为 tar 能保留 Linux 文件权限、所有者、软链接和 SELinux 上下文;而 zip 在解压时会丢失 www 目录的 755 权限、.user.ini 的只读属性,甚至把 nginx.conf 里带符号链接的 SSL 路径变成普通文件。
- 手动用
zip -r site.zip /www/wwwroot/example.com后,在新服务器unzip解压,chown -R www:www和chmod -R 755必须重做,否则 403 错误频发 - 如果旧站用了宝塔的“防跨站攻击”(open_basedir),其配置写在
.user.ini里,zip解压后该文件可能被忽略或权限错乱 -
zip不支持排除日志目录,access.log占几个 GB 时,打包/传输/解压全程卡死
mysqldump 导出的 SQL 文件不是“通用”的
所谓“通用 SQL”,只在 MySQL 版本兼容、字符集一致、SQL 模式(sql_mode)相同的情况下才成立。宝塔还原脚本默认调用 mysql 命令导入,但以下问题不会自动修复:
- 从 CentOS 7(MySQL 5.7)导出的 SQL,在 Ubuntu 22.04(MySQL 8.0)上执行会报错:
Unknown system variable 'query_cache_size',因为 8.0 已移除查询缓存 - 导出时没加
--default-character-set=utf8mb4,导入后中文变问号,尤其 WordPress 的wp_options表最敏感 - 含
LOAD DATA INFILE的备份(常见于大型电商导出),目标服务器若未开启local_infile=ON,直接报错退出
真正能降低跨发行版风险的操作组合
放弃“ZIP + 通用 SQL”幻想,改用宝塔原生机制 + 手动校验关键项:
- 在旧服务器用宝塔【网站】→【备份】生成
.tar.gz包,【数据库】→【备份】生成.sql,**不要重命名、不要解压、不要用第三方工具再压缩** - 新服务器安装同版本宝塔(如都用 6.0.x),PHP 版本不低于旧站(例:旧站 PHP 7.4 → 新站可选 7.4 或 8.0,但需测试 CMS 兼容性)
- 导入前先执行:
mysql -u root -p -e "SET GLOBAL local_infile = ON;",并确认my.cnf中secure_file_priv不为空值 - SSL 证书路径必须手动核对:
ssl_certificate和ssl_certificate_key在新服务器的nginx.conf里是否指向/www/wwwroot/example.com/ssl/,而不是旧路径
跨发行版迁移最易被忽略的,是 MySQL 用户认证插件差异——哪怕你导出导入都成功,PHP 连不上数据库,大概率是 caching_sha2_password 插件惹的祸。别信“SQL 文件通用”,得动手验证连接、权限、字符集三件事。
















