MySQLを使用したデータベースのバックアップ方法

ブログメインビジュアル

PHPプログラマーの松永です。

今回は、データベースの1つであるMySQLを使用しているデータベースのデータをバックアップする方法を紹介します。

目次

MySQLとは

MySQL

https://www.mysql.com/jp/

数種類あるデータベースの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のデータをバックアップしたい」という方の参考になれば幸いです。

この記事を書いた人 matsunaga 自宅に音楽スタジオがあるとこを夢見るPHPエンジニア
TOP