Posted at

MySQLのバックアップ関連で最低限やるべき項目

More than 5 years have passed since last update.

MySQLのバックアップにて最低限やるべき項目をまとめました。


MySQL version


  • MySQL 5.6.16


To Do


  1. mysqldump + cronによる自動バックアップ

  2. バイナリログ設定(基本設定、定期削除、etc...)

上記2点について、以下で解説します。


1. mysqldump + cronによる自動バックアップ


シェルスクリプトの作成

rootディレクトリへ移動し、バックアップ保存用のディレクトリを作成します。

~ cd /root

~ mkdir mysql && mkdir mysql/backup

続いてバックアップを作成するためのシェルスクリプトを作成します。

~ vi backupmysql.sh


backupmysql.sh

#!/bin/sh

# バックアップの保存期間(days)
period=3

# バックアップ保存用ディレクトリの指定
dirpath='/root/mysql/backup'

# ファイル名を指定する(※ファイル名で日付がわかるようにしておきます)
filename=`date +%y%m%d`

# 指定したDBのスキーマおよびデータをすべて吐き出す
mysqldump -u[ユーザ名] -p[パスワード] -h[ホスト名] [データベース名] > $dirpath/$filename.sql

# パーミッション変更
chmod 700 $dirpath/$filename.sql

# 保存期間を過ぎたバックアップを削除
oldfile=`date --date "$period days ago" +%y%m%d`
rm -f $dirpath/$oldfile.sql


mysqlbackup.shにはDBの接続情報に関するデータが書いてあるため、rootユーザー以外の閲覧を禁止にする。

~ chmod 0755 /root/backupmysql.sh

ここで作成したシェルスクリプトが実行できるか確認します。

これで指定したディレクトリに、.sqlのファイルが作成されていれば、正常に実行できています。

~ ./backupmysql.sh


cronの設定

cronの設定をします。設定については以下のページが分かりやすいかと。

http://www.server-memo.net/tips/crontab.html

echo "0 3 * * * root /root/backupmysql.sh" > /etc/cron.d/backupmysql

以上が定期的にSQLを吐き出しバックアップを取る方法です。

これだけでも事足りますが、実際には次に説明するバイナリログの設定まで行った方が何かと便利かと思います。


2. バイナリログ設定

/etc/my.cnfにて、バイナリログの有効化および有効期限の設定を行います。

~ vim /etc/my.cnf


my.cnf

[mysqld]

# バイナリログ有効化
log-bin=mysql-bin

# 有効期限の設定(day)
expire_logs_days=3


ここまできましたら、MySQLの再起動をします。

これでバイナリログの設定は完了です。


まとめ

以上2点がMySQLのバックアップを設定する際に押さえておきたい項目です。

これが抜けてる等々ありましたら気軽にコメント頂けますと助かります。

以下が今回の設定をする際に参考にしたURLとなります。


参考ページ


  1. http://qiita.com/crimson_21/items/6171a95f8ddb2861e2e6

  2. http://www.machiiro.jp/machiblog/blog/mysql_purge_binarylog/

  3. http://www.mogumagu.com/wp/wordpress/?p=1048

  4. http://dev.classmethod.jp/cloud/aws/ec2_mysqldump/

  5. http://blog.jicoman.info/2013/08/mysqldump_restore/