一开始原本是用 php 去备份资料库,但是发现会有一些问题,于是改成这种方式,直接透过 mysql 去备份,出来的格式也不会有什么问题。

$ crontab -e

设定每天凌晨00:00 执行

0 0 * * * php /var/www/backup.php

backup.php 脚本记得开头一定要 「<?php」,即便你有启用缩写

<?php
// 设定环境
header('Content-Type: text/html; charset=utf-8');

// 设定保存的资料夹位置
$dir = "/var/www/db/";

// 设定档名
$filename = "dev-" . date("Y-m-d-H-i-s") . ".sql.gz";

// 设定资料库
$db_host = "localhost";
$db_username = "root";
$db_password = "password";
$db_database = "db";

// 准备 cmd
$cmd = "mysqldump -h {$db_host} -u {$db_username} --password={$db_password} {$db_database} | gzip > {$dir}{$filename}";

// 执行 cmd
exec($cmd);

header("Content-type: application/octet-stream");
header("Content-Disposition: attachment; filename=\"$filename\"");

passthru("cat {$dir}{$filename}");
?>

输出时会经过 gzip 解压缩
实验过原本 150MB 的 sql 压缩后为 28MB

參考
https://ianakaberlin.medium.c...


五条悟
2.8k 声望111 粉丝