[Ubuntu] mysql dump ファイル作成・リストアスクリプト

mysql のデータベースバックアップ・リストアスクリプトを作成しました。
root でスクリプト作成・修正し実行して下さい。

#!/bin/bash

### このスクリプトは root で作成・修正し実行してください ###
# nano mysql_bakcup.sh
# chmod +x mysql_bakcup.sh
# ./mysql_bakcup.sh

### mysql dump ファイル作成・リストアスクリプト ###

### 動作確認 ###
# lsb_release -a
# No LSB modules are available.
# Distributor ID:	Ubuntu
# Description:	Ubuntu 22.04.1 LTS
# Release:	22.04
# Codename:	jammy

### 環境に合わせた修正箇所ここから ###
# dump ファイルを保存する日数
PERIOD="1"

# dump ファイル保存ディレクトリ
BKP_DIR="backup/mysql"

# dump ファイル名を定義
FILEPREFIX="mysql-dump"

# mysql root パスワード
MYS_PASS="mysql_root_password"
### 環境に合わせた修正箇所ここまで ###

### ----------- 処理ここから ----------- ###
cd

FILEDATE=$(date +%Y-%m-%d_%H:%M:%S)
FILENAME=$FILEPREFIX"-"$FILEDATE

# dump ファイル保存ディレクトリがなければディレクトリ作成
if [ ! -d ~/$BKP_DIR ]; then
	mkdir -p $BKP_DIR
	echo $BKP_DIR "作成しました"
fi

# mysqldumpを実行しdumpファイルを出力
mysqldump -uroot -p$MYS_PASS --single-transaction --all-databases --events > $BKP_DIR/$FILENAME.sql
cp ~/$BKP_DIR/$FILENAME.sql ~/$BKP_DIR/$FILEPREFIX"_"last.sql

# dump ファイルでのリストア
if [ -f ~/$BKP_DIR/$FILEPREFIX"_"last.sql ]; then
	mysql -uroot -p$MYS_PASS < ~/$BKP_DIR/$FILEPREFIX"_"last.sql
	echo "RESTORED "$BKP_DIR"/"$FILEPREFIX"_last.sql"
fi

# 出力されたdumpファイルのパーミション変更
chmod 0700 ~/$BKP_DIR/$FILENAME.sql
chmod 0700 ~/$BKP_DIR/$FILEPREFIX"_"last.sql

# 削除対象年月日を取得
DELDATE=$(date --date="$PERIOD days ago" +%Y-%m-%d)

# 削除対象ファイル名を生成
DELFILE=$FILEPREFIX"-"$DELDATE

if [ -f ~/$BKP_DIR/$DELFILE* ]; then
	# 削除実行
	rm -f ~/$BKP_DIR/$DELFILE*.sql
	echo "DELETED "$BKP_DIR"/"$DELFILE"*.sql"
fi
### ----------- 処理ここまで ----------- ###

### cron 設定例 ###
# crontab -e
# 以下1行追加 行頭の # は除きます 20時にスクリプト実行します
#00 20 * * * /path/to/mysql_bakcup.sh

### 参考にさせていただいたサイト ###
# https://leben.mobi/blog/mysql_auto_backup/linux/
タイトルとURLをコピーしました