Ubuntuのcron.dでMySQLのバックアップ

cronとは

「あの機能を定期実行したい!」という時に使用するOS搭載のアプリケーションです。

1日に1回!や1時間ごとに1回!など任意の時間にプログラムを動かすことができるので非常に便利なcron様です。。。

cron.dを使う理由

Ubuntuにはcrontabとcron.dの2種類のcronが存在しているのですが、圧倒的にcron.dの方が管理しやすいです。

ディレクトリ構造が以下になっているのですが、cron.dはディレクトリ配下に機能ごとのファイルを設置できるのに対してcrontabは1ファイルの中に定期実行の記述を行います。

ファイル単位で実施したい定期実行を記述できるので、mysqlならmysqlのphpならphpのファイルを作成し、用途に合わせて作成管理ができちゃいます。

--cron.d
  ├──任意のファイルA
  ├──任意のファイルB
  ├──任意のファイルC

--crontab

※上記の「任意のファイル*」というファイル名には拡張子は含めないでください。
仕様上拡張子なしのファイル名で作成しなければいけません。

 

以下のような形でファイル作れます。

--cron.d
  ├──Cerbot
  ├──MySQL
  ├──PHP

定期実行の作成

cronの作成

今回はMySQLのバックアップを取りたいので、「/etc/cron.d/mysql」を作成する。

作成したファイル内に指定したファイルを実行させ、実行結果を指定のディレクトリに出力する。

##作成シェル
##分 時 日 月 年 所有者 実行ファイル 結果出力先
00 00 * * * root /var/mysql_backup/mysql-backup.sh > /var/mysql_backup/mysql-dump

シェルの作成

やりたいこととしてはmysql-dumpを使ってDBのバックアップを取得することになります。

まずはバックアップファイルを保管するディレクトリを作成します。

mkdir /var/mysql_backup

 

次にシェルを作成します。

touch /var/mysql_backup/mysql-backup.sh
nano /var/mysql_backup/mysql-backup.sh

 

次にバックアップの設定を行います。

#保管日
storagedate=14

#ディレクトリ指定
basedir='/var/mysql_backup/'

#ファイル名定義
fileprefix="mysql-dump-"
filedate=`date+%y%m$d`
filename=$fileprefix$filedate

#dumpコマンド
mysqldump --single-transaction --skip-lock-tables --no-tablespaces --password='password' -u 'user' -B 'DB_name' > $basedir/$filename.sql

#出力ファイル名のパーミッション(任意)
chmod 775 $basedir/$filename.sql

#削除対象日
deletedate=`date --date="$ days ago"+%y%m%d`

#削除ファイル名の指定
deletefile=$basedir/$deletedate.sql

#削除
rm -f $basedir/$deletefile

 

上記記述できたらcronを再実行して完了です。

うまく行かない場合はlogを確認して何が上手く行っていないのか確認してください。

 

Twitterでフォローしよう

読んでみーな
おすすめの記事