透過 Crontab 排程備份 Mariadb (Mysql)使用 php + exec + mysqldump + gzip

本教學使用環境介紹
伺服器端:Ubuntu 18.04 LTS
資料庫:Mariadb 10.1.34(Mysql)
語言版本:php 7.3
本機端:MacOS High Sierra

一開始原本是用 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');
date_default_timezone_set('Asia/Taipei');

// 設定保存的資料夾位置
$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

Line ID:ianmac
QQ:1258554508

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章