PHPプログラマーの松永です。
今回は、データベースの1つであるMySQLを使用しているデータベースのデータをバックアップする方法を紹介します。
目次
MySQLとは
MySQL
数種類あるデータベースの1つで、オープンソースのリレーショナルデータベース管理システム(RDBMS)です。
ストレージエンジンにはInnoDBというMySQL独自のものが使用されています。
MySQLは、レプリケーションに対応しており、データをマスターとスレーブに分けることができます。
データを分けることで、負荷分散を行うことができます。
また、スレーブをバックアップとして利用することや、データ解析などにも使用することができます。
「紹介するバックアップ方法」と「レプリケーションによるバックアップ」の使い所
先程、「MySQLのレプリケーションを使用し、スレーブをバックアップとして利用することができる」と記載しましたが、
スタートアップのサービスやプロジェクトの規模などによりレプリケーションするよりも、
サービスの利用ユーザーを意識した施策を優先するような場合があります。
今回の紹介するバックアップ方法は、そのような場合に有効です。
レプリケーションを行う必要がなく、すぐにバックアップを実施することができます。
一方、レプリケーションを使用し、スレーブをバックアップとして使用する方法は、
当然ですが、負荷分散やデータ解析など、
マスターとスレーブを分ける必要があるようなプロジェクトの場合に有効です。
バックアップ方法
バックアップを行う方法として、シェルスクリプトを使用します。
注意点
今回は、 バックアップを行うシェルスクリプトが記述されたファイルにデータベースにアクセスするユーザー情報を直接記述する方法を紹介しています。安全性を考慮し、テストを行う際でも必ずドキュメントルート配下以外に格納してください。
補足
データベースにアクセスするユーザー情報は、サーバーの環境変数などで設定し、ファイルに直接記述しない方法もあります。プロジェクトやセキュリティポリシーに合わせ、適宜変更してください。
バックアップデータとシェルスクリプトファイルを格納するディレクトリの作成
では、シェルスクリプトを作成していきます。
今回はdb-backups
というディレクトリをドキュメントルート配下以外に作成します。
このディレクトリにバックアップデータのSQLファイルが格納されます。
シェルスクリプトファイルの作成
先程作成したdb-backups
にシェルスクリプトファイルを作成します。
今回は、backup.sh
を作成します。
この時点で
/var/www/[サーバーパス]/ドキュメントルート
/var/www/[サーバーパス]/db-backups
/var/www/[サーバーパス]/db-backups/backup.sh
という状態になります。
シェルスクリプト
先程作成したbackup.sh
にシェルスクリプトを記述していきます。
今回はデータベースを丸っとバックアップします。
#!/bin/sh
# バックアップファイルを何世代残しておくか
period=7
# バックアップファイルを保存するディレクトリ
dirpath='/var/www/[サーバーパス]/db-backups'
# バックアップファイルのファイル名
filename=`date +%y%m%d`
# バックアップの実行
mysqldump –single-transaction -u [データベースユーザー名] [データベースユーザーパスワード] [データベース名] > $dirpath/$filename.sql
# パーミッションの変更
chmod 700 $dirpath/$filename.sql
# 7世代よりも古いバックアップファイルを削除
oldfile=`date –date "$period days ago" +%y%m%d`
rm -f $dirpath/$oldfile.sql
確認
ファイル指定の前に/bin/sh
とすることでシェルファイルを実行することができます。
/bin/sh /var/www/[サーバーパス]/db-backups/backup.sh
正常に処理が完了すると/var/www/[サーバーパス]/db-backups
配下に200721.sql
が生成されます。
※200721.sqlというファイルのファイル名は、backup.shを実行した日付が設定されます。
以上でございます。
まとめ
今回紹介したバックアップ方法は、データベースを丸っとバックアップしました。
シェルスクリプトと変更することで任意のデータのみバックアップを行うことも可能ですし、バッチ処理としてサーバーに設定し、自動化することも可能です。
「簡単にMySQLのデータをバックアップしたい」という方の参考になれば幸いです。