diff --git a/backend/app/Console/Kernel.php b/backend/app/Console/Kernel.php index 0f923f19..8f47767f 100644 --- a/backend/app/Console/Kernel.php +++ b/backend/app/Console/Kernel.php @@ -39,41 +39,6 @@ class Kernel extends ConsoleKernel } } })->everyMinute(); - $schedule->call(function () { - $dbbckp = '/work/storage/backup/mysql/'; - $flbckp = '/work/storage/backup/file/'; - $week = 604800; // 1週間 - $fname = date('Ymd').date('H'); // 日付+時 - - // DBのバックアップ - exec('/usr/bin/mysqldump --no-tablespaces --user='.config('database.connections.mysql.username').' --host='.config('database.connections.mysql.host').' --password='.config('database.connections.mysql.password').' --databases '.config('database.connections.mysql.database').' > '.$dbbckp.$fname.'_mysql.sql'); - - // GZIPでDBを圧縮する(ストレージ為) - exec('/bin/gzip '.$dbbckp.$fname.'_mysql.sql'); - - // ファイルのバックアップ - exec('/bin/tar zcfv '.$flbckp.$fname.'.tar.gz /work/storage/app/private/*'); - - // 全てのSQLファイルを読み込むと、古いやつを削除する。 - foreach (scandir($dbbckp) as $s) { - if ($s == '.' || $s == '..') continue; - $t = str_replace('_mysql.sql.gz', '', $s); // extの削除 - $t = preg_replace('/[\w\d]{2}$/', '', $t); // 時間の削除 - if (strtotime($t) < time()-604800) { - exec('/bin/rm -rf '.$dbbckp.$s); - } - } - - // 全てのTARファイルを読み込むと、古いやつを削除する。 - foreach (scandir($flbckp) as $s) { - if ($s == '.' || $s == '..') continue; - $t = str_replace('.tar.gz', '', $s); // extの削除 - $t = preg_replace('/[\w\d]{2}$/', '', $t); // 時間の削除 - if (strtotime($t) < time()-604800) { - exec('/bin/rm -rf '.$flbckp.$s); - } - } - })->twiceDaily(0, 12); // $schedule->command('inspire')->hourly(); } diff --git a/backup.sh b/backup.sh new file mode 100755 index 00000000..a4a7a9e1 --- /dev/null +++ b/backup.sh @@ -0,0 +1,44 @@ +#!/bin/bash + +BCKPDIR=`cd backup && pwd` +BACKEND=`cd backend && pwd` +source ${BACKEND}/.env +TIME=`date '+%Y%m%d%H'` + +echo "バックアップフォルダ=${BCKPDIR}" +echo "バックエンドフォルダ=${BACKEND}" +echo "${TIME} MYSQLバックアップ開始" + +# DBコンテナ +DBCONTID=`docker ps -q -f status=running -f name=db` +if [ -z "$DBCONTID" ]; then + echo "db は起動されていません。" + exit 0 +fi + +# アプリコンテナ +FLCONTID=`docker ps -q -f status=running -f name=app` +if [ -z "$FLCONTID" ]; then + echo "app は起動されていません。" + exit 0 +fi + +# DBバックアップ +echo "${BACKEND} MYSQLバックアップ開始" +DNAME="${TIME}_mysql.sql" +echo "ファイル名=${DNAME}" +docker exec $DBCONTID mysqldump --no-tablespaces --user=$DB_USERNAME --host=$DB_HOST --password=$DB_PASSWORD --databases $DB_DATABASE > "${BCKPDIR}/mysql/${DNAME}" + +gzip "$BCKPDIR/mysql/$DNAME" + +# ファイルバックアップ +echo "${BACKEND} ファイルバックアップ開始" +FNAME="${TIME}.tar.gz" +echo "ファイル名=${FNAME}" +docker exec $FLCONTID tar zcf $FNAME -C / work/storage/app/private +mv ${BACKEND}/${FNAME} ${BCKPDIR}/file + +# 7日より古いファイルを削除 +echo "7日より古いファイルを削除" +find ${BCKPDIR}/mysql -type f -name "${TIME}_mysql.sql.gz" -mtime +7 | xargs rm -f; +find ${BCKPDIR}/file -type f -name "${TIME}.tar.gz" -mtime +7 | xargs rm -f; diff --git a/crontab.txt b/crontab.txt index adc8f8bf..fd33efac 100644 --- a/crontab.txt +++ b/crontab.txt @@ -4,4 +4,4 @@ mkdir -p storage/backup/{file,mysql} 【docker外】 「crontab -e」を実行すると、下記の行列を追加して下さい。 -0 0,12 * * * /usr/bin/docker cp 3463d3554a6f:/work/storage/backup/mysql/ /var/www/html/kikikanri/backup +0 0,12 * * * /var/www/html/kikikanri/backup.sh