备份ThinkPHP项目需兼顾项目文件(代码、配置)与数据库(数据)两部分,以下是具体步骤:
项目文件通常位于/var/www/html/your_project(默认Web目录)或自定义目录,使用tar命令打包压缩,排除无需备份的临时文件(如runtime目录中的缓存、日志):
# 进入项目父目录
cd /var/www/html
# 打包项目目录(排除runtime目录),生成压缩文件
sudo tar -czvf your_project_backup.tar.gz --exclude='your_project/runtime' your_project
-c创建新归档,-z用gzip压缩,-v显示详细过程,--exclude排除指定目录。/mnt/backup或远程服务器),避免与项目目录在同一磁盘:sudo mv your_project_backup.tar.gz /mnt/backup/
ThinkPHP项目依赖MySQL/MariaDB数据库,使用mysqldump命令导出数据库结构和数据:
# 登录MySQL(需替换为实际用户名)
mysql -u root -p
# 选择要备份的数据库(如项目数据库名为`your_db`)
USE your_db;
# 导出数据库到SQL文件(输出到指定路径)
mysqldump -u root -p your_db > /mnt/backup/your_db_backup.sql
-u指定用户名,-p提示输入密码(密码与-p之间无空格)。mysqldump -u root -p your_db | gzip > /mnt/backup/your_db_backup.sql.gz
cron定时执行备份脚本(如每天凌晨2点):# 编辑当前用户的cron任务
crontab -e
# 添加以下内容(每天凌晨2点备份)
0 2 * * * /bin/bash -c 'tar -czvf /mnt/backup/your_project_$(date +\%F).tar.gz --exclude="your_project/runtime" /var/www/html/your_project && mysqldump -u root -p your_db > /mnt/backup/your_db_$(date +\%F).sql'
注:
date +\%F生成当前日期(如2025-09-30),\%需转义。
备份完成后,检查文件大小(非零)和压缩格式是否正确:
# 检查项目备份文件
ls -lh /mnt/backup/your_project_backup.tar.gz
# 检查数据库备份文件(若压缩)
gunzip -c /mnt/backup/your_db_backup.sql.gz | head -n 5 # 查看前5行是否为SQL语句
恢复项目需先停止Web服务(避免文件冲突),再按数据库→项目文件的顺序恢复:
使用mysql命令将备份的SQL文件导入目标数据库(需确保数据库已存在):
# 登录MySQL
mysql -u root -p
# 创建目标数据库(若不存在)
CREATE DATABASE your_db;
# 退出MySQL
exit;
# 导入备份的SQL文件(若为压缩文件,先解压)
gunzip < /mnt/backup/your_db_backup.sql.gz | mysql -u root -p your_db
CREATE DATABASE用于创建数据库(若已存在可跳过),gunzip < file.sql.gz | mysql ...直接解压并导入。使用tar命令解压项目备份文件到原目录:
# 停止Web服务(如Apache/Nginx)
sudo systemctl stop httpd # Apache
# 或
sudo systemctl stop nginx # Nginx
# 解压项目备份文件到目标目录
sudo tar -xzvf /mnt/backup/your_project_backup.tar.gz -C /var/www/html/
# 启动Web服务
sudo systemctl start httpd # Apache
# 或
sudo systemctl start nginx # Nginx
mysql -u root -p -e "USE your_db; SHOW TABLES; SELECT COUNT(*) FROM your_table;"
http://your_server_ip/your_project),确认页面加载正常。权限问题:
sudo确保对项目目录和数据库有足够权限。runtime目录需可写):sudo chown -R apache:apache /var/www/html/your_project # Apache用户
# 或
sudo chown -R nginx:nginx /var/www/html/your_project # Nginx用户
sudo chmod -R 755 /var/www/html/your_project/runtime
安全性:
/var/www/html),防止未授权下载。自动化与监控:
cron任务是否执行成功(查看/var/log/cron日志)。# 在备份脚本中添加以下命令(删除7天前的.tar.gz文件)
find /mnt/backup -name "your_project_*.tar.gz" -mtime +7 -exec rm -f {} \;
数据库恢复测试:
通过以上步骤,可实现ThinkPHP项目在CentOS上的安全备份与快速恢复,保障项目数据安全。