セールス採用 / グシャッてからが本当の自分だった
セールス採用 / グシャッてからが本当の自分だった
2018.03.26

【ディレクターでもプログラミングを学ぼう】DBバックアップ用のシェルスクリプトを書いてみた

Jack

こんにちは。ディレクターのJackです。

「ディレクターでもプログラミングを学ぼう」シリーズですが、本日はシェルスクリプトに関してお話しできればと思います。

シェルスクリプトとは?

まず、そもそもシェルスクリプトとは何なのか? からお話しできればと思います。

シェルスクリプトとは、オペレーティングシステム(OS)のシェル向けに書かれたスクリプトの事を指します。シェルとは、OSのユーザーのためにインタフェースを提供するソフトウェアの事です。

bashやzshなどがあります。エンジニアがよく黒い画面(ターミナル)で操作している呪文(コマンド)をアプリケーションに中継する役割を担うのがシェルというソフトウェアです。そのシェル上で動作するプログラミング言語が「シェルスクリプト」なのです。

シェルスクリプトは、主にバッチ処理などに使われ、「filename.sh」といったテキストファイルに記述された命令を順次実行します。これだけでは「???」となる方も多いかと思いますので、まずは簡単なシェルスクリプトを書いて説明させていただきます。

サンプルスクリプト

今回のサンプルスクリプトですが、現在時刻を表示した後に、home配下にsample.txtファイルを生成するシェルスクリプトです。

#!/bin/sh

# 現在時刻を表示するコマンドを実行
date

# sample.txt を home 配下に作成する
touch ~/sample.txt
ls ~/sample.txt

実行結果は下記のようになります。

% ./sample.sh
2018年 2月16日 金曜日 19時53分32秒 JST
/Users/username/sample.txt

まずはじめに、dateコマンドが実行され、その次にtouchコマンドが実行されsample.txtファイルが生成されている事が分かります。

dateコマンド→ touchコマンドの順で、コマンド(命令)が順次実行されている事が分かります。

DBバックアップ用のシェルスクリプトを書いてみる

早速、DBバックアップ用のシェルスクリプトを下記に記載します。

#!/bin/sh

# STEP.1
# バックアップファイルを保存する期間を指定
# 本スクリプトでは、5日間を保存期間とする
PERIOD=5

# STEP.2
# バックアップ先のディレクトリを指定
DIRPATH='/home/username/bk'

# STEP.3
# バックアップファイル名を指定
FILENAME=`date +%y%m%d`

# STEP.4
# バックアップするデータベース名を指定
DB='database_name'

# STEP.5
# バックアップ実行
mysqldump --defaults-extra-file=./my.conf $DB > $DIRPATH/$FILENAME.sql

# STEP.6
# バックアップファイルの権限変更
chmod 700 $DIRPATH/$FILENAME.sql

# STEP.7
# 旧バックアップファイルの削除
OLDFILE=`date --date "$PERIOD days ago" +%y%m%d`
rm -f $DIRPATH/$OLDFILE.sql

STEP.1 保存期間を指定する

定数PERIODにバックアップファイルを保存する期間を指定します。5日間バックアップファイルを保存したい場合は、「5」を指定します。必要に応じて、この数値は変更していただいても構いません。

STEP.2 バックアップ先のディレクトリを指定する

定数DIRPATHには、バックアップ先のディレクトリを指定してください。今回は、homeディレクトリ配下にbkというディレクトリを作成しています。こちらも必要に応じて任意に設定していただいて構いません。

STEP.3 バックアップファイル名を指定する

定数FILENAMEには、バックアップファイル名が定義されています。今回は、dateコマンドを利用し、「yymmdd.sql」といったように日付が付与されたファイル名となります。

STEP.4 バックアップするデータベース名を指定する

定数DBには、バックアップするデータベース名を指定してください。

STEP.5 バックアップを実行する

mysqldumpコマンドを利用して、データベースのバックアップ作業を行います。MySQLユーザ名とパスワードは、my.confにて定義し、--defaults-extra-fileオプションを指定してmy.confファイルを読み込みます。

STEP.6 バックアップファイルの権限を変更する

chmodコマンドを利用し、バックアップファイルを所有者にしか読み取れないようにします。

STEP.7 旧バックアップファイルの削除

定数OLDFILEにて、削除するバックアップファイル名を指定します。5日前のバックアップファイルを削除対象とし、rmコマンドを実行してバックアップファイルの削除を行います。

おわりに

本日は、シェルスクリプトの簡単な紹介と、DBバックアップ用のシェルスクリプトに関して説明させていただきました。

サクッと自動化ツールを開発したいときに、便利なスクリプトですね! それでは、良いシェルスクリプトライフを!