シェルスクリプトとCronでデータベースを自動バックアップ&ローテーション
一部のサイトをCoreserverに移動したのを機に、バックアップ用のシェルスクリプトを見直しました。今回は、データベースの自動バックアップ&ローテーションを行うシェルスクリプトをメモを兼ねて紹介します。
ページ下部のようなシェルスクリプトを文字エンコーディングをEUC-JP、改行コードをLFで作成し、外部からアクセスできない場所に転送します。例ではシェルスクリプトを/virtual/ユーザー名/sh/ディレクトリに作成し、バックアップ先を/virtual/ユーザー名/backup/databases/ディレクトリとしています。
あとは、Cronにこのシェルスクリプトを登録し、1日に1回だけ実行されるように設定するだけです。
シェルスクリプトが実行されるたびに、指定したディレクトリにデータベースのダンプファイルを圧縮したtar.gzファイルが蓄積されていきます。「bk_days」で指定した日数分を超えると、自動的に古いバックアップファイルから削除されていきます。
バックアップはサーバー内に蓄積されていくので、定期的にローカルコンピューターにダウンロードしたり、別のサーバーにサーバー間コピーでバックアップのバックアップを作成するようにしましょう。サーバー自体に問題が発生した場合には、バックアップの意味がなくなってしまいます(経験済み)。
Coreserver以外のサーバーでも、大半のサーバーではディレクトリ名を変えるだけでそのまま使えると思います。
- /virtual/ユーザー名/sh/backup_db.sh
#!/bin/sh # ---------- 設定 ---------- # バックアップ元のデータベース db_name=データベース名 db_pass=データベースのパスワード # バックアップ先のディレクトリ・ファイル bk_dir=/virtual/ユーザ名/backup/databases/ bk_file=$db_name # 保存する日数 bk_days=90 # ---------- ファイル名を設定 ---------- # タイムスタンプを取得 ts_now=`date +%Y%m%d` ts_old=`date "-d$bk_days days ago" +%Y%m%d` # ファイル名を設定 file_temp=$bk_file.sql file_backup=$bk_file.$ts_now.tar.gz file_remove=$bk_file.$ts_old.tar.gz # ---------- バックアップ処理 ---------- # バックアップ先のディレクトリに移動 cd $bk_dir if [ $? != 0 ]; then echo "Backup directory does not exist." exit 1 fi # データベースをダンプ /usr/local/mysql/bin/mysqldump $db_name -u $db_name -p$db_pass --opt > $file_temp if [ $? != 0 -o ! -e $file_temp ]; then echo "Cannot dump database." exit 1 fi # アーカイブを作成 tar cfz $file_backup $file_temp if [ $? != 0 -o ! -e $file_backup ]; then echo "Cannot archive files." exit 1 fi # テンポラリファイルを削除 rm -f $file_temp # ローテーション処理 if [ -e $file_remove ]; then rm -f $file_remove fi exit 0
トラックバック (0)
この記事へのトラックバックはまだありません。

コメント (0)
この記事へのコメントはまだありません。