Linux下ThinkPHP备份实操指南
一 备份策略与准备
二 数据库备份
方式一 命令行 mysqldump(最通用)
mysqldump -h 127.0.0.1 -u 用户名 -p 数据库名 > /opt/backups/your_project/db_$(date +%F_%H-%M-%S).sql
mysqldump -h 127.0.0.1 -u 用户名 -p'密码' 数据库名 > /opt/backups/your_project/db_$(date +%F_%H-%M-%S).sql
--single-transaction --routines --triggers --hex-blob --set-gtid-purged=OFF
mysql -h 127.0.0.1 -u 用户名 -p 数据库名 < /opt/backups/your_project/db_2025-12-04_10-00-00.sql
方式二 在ThinkPHP中编程生成SQL备份(便于集成到后台)
use think\Db;
$tables = Db::query('SHOW TABLES');
$backup = "SET FOREIGN_KEY_CHECKS=0;\n\n";
foreach ($tables as $row) {
$table = current($row);
$ddl = Db::query("SHOW CREATE TABLE `$table`")[0]['Create Table'];
$backup .= "$ddl;\n\n";
$data = Db::table($table)->select();
foreach ($data as $row) {
$cols = array_map(fn($c) => "`$c`", array_keys($row));
$vals = array_map(fn($v) => is_null($v) ? 'NULL' : "'".addslashes($v)."'", $row);
$backup .= "INSERT INTO `$table` (".implode(',', $cols).") VALUES (".implode(',', $vals).");\n";
}
}
$backup .= "SET FOREIGN_KEY_CHECKS=1;\n";
file_put_contents('/opt/backups/your_project/db_'.date('YmdHis').'.sql', $backup);
三 项目代码与上传目录备份
tar --exclude='runtime' --exclude='.git' --exclude='*.log' \
-czvf /opt/backups/your_project/code_$(date +%F_%H-%M-%S).tar.gz \
-C /var/www your_project
tar -czvf /opt/backups/your_project/config_upload_$(date +%F).tar.gz \
/var/www/your_project/config /var/www/your_project/public/uploads
四 自动化与保留策略
0 2 * * * /usr/bin/mysqldump -h127.0.0.1 -u用户名 -p'密码' 数据库名 > /opt/backups/your_project/db_$(date +\%F).sql
30 2 * * * tar --exclude='runtime' --exclude='.git' -czvf /opt/backups/your_project/code_$(date +\%F).tar.gz -C /var/www your_project
# 每天清理7天前的数据库与代码备份
0 3 * * * find /opt/backups/your_project -name "db_*.sql" -mtime +7 -delete
0 3 * * * find /opt/backups/your_project -name "code_*.tar.gz" -mtime +7 -delete
五 恢复与校验
mysql -h 127.0.0.1 -u 用户名 -p 数据库名 < /opt/backups/your_project/db_2025-12-04_10-00-00.sql
mysql -h 127.0.0.1 -u 用户名 -p --default-character-set=utf8mb4 数据库名 < backup.sql
tar -xzvf /opt/backups/your_project/code_2025-12-04.tar.gz -C /var/www