さくらVPS【CentOS7】MySQLデータをダンプしてInfiniCLOUDにバックアップする方法
はじめに
このブログはさくらVPSを借りてCentOS7上にアプリケーションを構築していますが、バックアップは自分で行う必要があります。人為的なミスや運営会社で火災や障害が発生したときにデータが消失するリスクが0ではないわけです。そこでリスクを分散するために、以下の3つをバックアップして冗長化を図ることにしました。
- MySQL
- アプリケーションのフォルダ・ファイル
- OS
今回はそのうちMySQLのバックアップを行いCRONTABにスケジュールして日次バックアップとして稼働させるところまでやってみます。
使用するクラウドの選定
今回使用するクラウドはInfiniCLOUDです。以下の理由からこのクラウドを選びました。
- 大容量クラウドストレージで20GBの無料枠
- WebDAV*をサポートしている
WebDAVはHTTPプロトコルをベースとしたファイル管理のための拡張プロトコルであり、Webサーバーやクラウドストレージなどのリモートサーバー上のファイルを直接操作できます。InfiniCLOUDはWebDAVクライアントで容易にファイルのやり取りができるため、今回のバックアップに適しています。
今なら(2023年06年05日時点)紹介コード:「3GMMM」をマイページで入力することで+5GBのストレージを獲得できるのでどうぞご活用ください。
登録すると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
コマンド実行時にユーザー名とパスワードの入力を求められますので、適切に入力してください。
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です。
次にInfiniCLOUDのマイページからファイルブラウザーを開いて、マウントされていることを確認します(少し時間差がある場合があります)。
こちらにもSQLファイルが存在すればOKです
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に保存する手順は完了です。