thinkphp在linux部署时,数据库备份与恢复核心是使用mysqldump或内置php think db:backup命令导出sql,严禁依赖框架模型拼接;恢复须先清空目标库并禁用外键检查,备份文件必须存于web不可访问路径且权限严格限制。

Linux部署ThinkPHP时,备份与恢复的核心是数据库+运行时文件+配置安全协同,不能只盯SQL。下面分三块讲清楚怎么做、为什么这么做、容易踩哪些坑。
数据库备份与恢复(最常用也最易出错)
ThinkPHP本身不接管数据库物理备份,靠系统级工具或扩展完成:
Linux AI 服务器 — 将 Linux 服务器转换为本地 AI 推理集群。使用 systemd、NVIDIA CUDA 实现无头 Linux AI,零 GUI 开销。
- 用
mysqldump导出(推荐):在项目服务器执行mysqldump -u root -p myapp_db > /backup/myapp_$(date +%Y%m%d).sql
注意:-p后不加空格直接跟密码不安全,建议交互式输;路径/backup/需提前创建并限制权限(如chmod 700 /backup)。 - 用
php think db:backup(TP6.1+内置):
先确认命令可用:php think list | grep db;再执行php think db:backup --name=prod_20260827
生成文件默认在runtime/backup/,记得同步到异地或挂载盘,别只留在runtime里。 - 恢复时优先用
mysql命令而非phpMyAdmin:mysql -u root -p myapp_db <br>若提示“Access denied for user”,说明用户没该库的INSERT权限,需先<code>GRANT INSERT,UPDATE,DELETE ON myapp_db.* TO 'root'@'localhost'; FLUSH PRIVILEGES;。
运行时目录(runtime)必须整体备份
很多人只备数据库,上线后报“模板缓存写入失败”或“模型缓存路径不存在”,其实是runtime/里缺了cache/、log/、model/这些子目录结构,或权限不对:
- 备份命令示例:
tar -czf runtime_$(date +%Y%m%d).tar.gz runtime/ --exclude='*.log' --exclude='temp/*'
排除日志和临时文件减小体积,但保留目录骨架和权限位。 - 恢复前检查Web用户权限:
ps aux | grep php-fpm看到是www-data,就执行sudo chown -R www-data:www-data runtime/ && sudo chmod -R 755 runtime/
特别注意:runtime目录本身必须有x权限(即至少755),否则PHP无法chdir进去创建子目录。 - 若用Redis作缓存,备份时不用动Redis数据——恢复后执行
php think clear --all自动刷新即可,比手动flush更安全(不误删session等其他业务key)。
配置与代码同步要分层处理
ThinkPHP项目从开发机推到Linux服务器,config/下的文件不能直接覆盖,得按环境区分:
- 把敏感配置(数据库账号、API密钥)抽到
.env文件,git ignore掉;部署时单独上传,并设权限chmod 600 .env防止Web可读。 - 公共配置如
app.php、cache.php可纳入版本管理,但Linux上要检查路径是否大小写敏感——Windows不区分Config/和config/,Linux会报Class not found。 - 更新框架版本后,务必检查
config/app.php里的'default_timezone'、'middleware'结构是否兼容;TP6.3起路由中间件写法有变化,旧配置会导致404。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!










