ブログ さくらVPS【CentOS7】MySQLデータをダンプしてInfiniCLOUDにバックアップする方法のサムネイル

さくらVPS【CentOS7】MySQLデータをダンプしてInfiniCLOUDにバックアップする方法

Created at Modified at

はじめに

このブログはさくらVPSを借りてCentOS7上にアプリケーションを構築していますが、バックアップは自分で行う必要があります。人為的なミスや運営会社で火災や障害が発生したときにデータが消失するリスクが0ではないわけです。そこでリスクを分散するために、以下の3つをバックアップして冗長化を図ることにしました。

  • MySQL
  • アプリケーションのフォルダ・ファイル
  • OS

今回はそのうちMySQLのバックアップを行いCRONTABにスケジュールして日次バックアップとして稼働させるところまでやってみます。

使用するクラウドの選定

今回使用するクラウドはInfiniCLOUDです。以下の理由からこのクラウドを選びました。

  • 大容量クラウドストレージで20GBの無料枠
  • WebDAV*をサポートしている

WebDAVはHTTPプロトコルをベースとしたファイル管理のための拡張プロトコルであり、Webサーバーやクラウドストレージなどのリモートサーバー上のファイルを直接操作できます。InfiniCLOUDはWebDAVクライアントで容易にファイルのやり取りができるため、今回のバックアップに適しています。

今なら(2023年06年05日時点)紹介コード:「3GMMM」をマイページで入力することで+5GBのストレージを獲得できるのでどうぞご活用ください。

InfiniCLOUDのマイページでユーザーIDとパスワードを確認

登録するとInfiniCLOUDのストレージのエンドポイントURLとパスワードが発行されるので控えておきましょう。

WebDAVクライアント

CentOS7でWebDAVを使ってアップロードするためには、いくつかの方法があります。

私は以下の2つを試した結果、davfsが簡単で使いやすかったため、この方法を紹介します。

  • cadaver
  • davfs

davfsのインストール

davfsをインストールするには、以下のコマンドを使用します。

sudo yum -y install davfs2

保存先の作成

バックアップファイルの保存先となるディレクトリを作成します。

sudo mkdir /backup

バックアップ用ディレクトリをマウント

以下のコマンドを使用して、InfiniCLOUDのストレージをマウントします。

mount -t davfs https://yura.teracloud.jp/dav/ /backup

コマンド実行時にユーザー名とパスワードの入力を求められますので、適切に入力してください。

InfiniCLOUDのストレージをマウント

mysqldumpの保存先を作成

以下のコマンドを使用して、mysqldumpのバックアップファイル保存用のディレクトリを作成します。

sudo mkdir /backup/db

MySQL認証情報

MySQLの接続情報を設定するために、/home/USERNAME/.my.cnfファイルを作成します。

.my.cnfファイルには以下のようにMySQLの接続情報を設定します。

[client]
user=your_username
password=your_password

注意: パスワードを平文で保存することはセキュリティ上好ましくありませんが、コマンドラインで--default-fileオプションを使用してパスワードを含めずに実行することで、.my.cnfファイルに接続情報を設定しました。また、.my.cnfファイルのパーミッションを600に設定してください。

スクリプト保存ディレクトリ作成

バックアップスクリプトを保存するディレクトリを作成します。

sudo mkdir /backup/sh

スクリプト作成

以下のコマンドを使用して、バックアップスクリプトを作成します。

sudo vim /backup/sh/backup_mysql.sh

エディタが開いたら、以下の内容をコピーアンドペーストし、保存します。

BACKUP_DATE=$(date +"%Y%m%d")
BACKUP_FILE="${BACKUP_DATE}.sql"
MYSQL_CMD='/usr/bin/mysqldump'
BACKUP_DIR='/backup/db'
DB_NAME='devil_code'
$MYSQL_CMD --defaults-file='/home/taka/.my.cnf' $DB_NAME > "$BACKUP_DIR/$BACKUP_FILE"
find $BACKUP_DIR -type f -name "*.sql" -mtime +7 -exec rm {} \;

スクリプトの内容は、MySQLのバックアップを実行し、バックアップファイルを指定のディレクトリに保存するものです。

手動でスクリプトを実行して、バックアップファイルが正しく作成されるか確認してみましょう。

sudo /backup/sh/backup_mysql.sh
sudo ls /backup/db

SQLファイルが存在すればOKです。

コマンドラインでMySQLダンプデータの存在確認

次にInfiniCLOUDのマイページからファイルブラウザーを開いて、マウントされていることを確認します(少し時間差がある場合があります)。

InfiniCLOUDのマイページでファイルブラウザーをクリック

こちらにもSQLファイルが存在すればOKです

InfiniCLOUDのファイルブラウザーでMySQLダンプデータの存在確認

CRONTABにスケジュール

スクリプトの権限を変更します。

sudo chmod +x /backup/sh/backup_mysql.sh

CRONTABファイルを編集します。

sudo vim /etc/crontab

ファイルが開いたら、以下の行を追加し、保存します。

3 3 * * * root /backup/sh/backup_mysql.sh

これにより、毎日3時3分にMySQLのバックアップが実行されるようにスケジュールされます。

以上で、MySQLのバックアップを定期的に実行し、InfiniCLOUDに保存する手順は完了です。

参考にさせていただいたサイト

さくらのVPSに無料の外部自動バックアップ機能を追加する方法