世界を旅して暮らしたい放浪エンジニアブログ

【技術メモ】MySQL5.6でダンプを定期バッチで取得する

cronを利用してMySQLのダンプを取得する際の技術メモです。ダンプはバックアップとして保存しておきます

[ 目次 ]

はじめに

こんにちは、香港に住んでいるWEBデベロッパーのなかむ(@nakanakamu0828)です。

今回は、MySQLのバックアップとしてダンプを取得するバッチを作ったのでメモしていきます。
以前シェルを作成したのですが、そのサーバーが故障してシェルもなくなりました・・・
メモすること大事ですね。

それではシェルを作成していきます。

バックアップシェルを作成

前提としてバックアップは、rootユーザーで取得します。/root/backup_mysql.shというファイルを作成しcronで定期実行する形です。

【前提】

  • rootユーザーでバックアップを実行
  • MySQLのスキーマ毎にバックアップを取得する
    -> スキーマ毎にダンプを取得することで、DBサーバーの移行をスキーマ単位でできるようにする為。
  • --defaults-extra-file=${ROOT_DIR}/.my.cnf を利用して、MySQLへの認証を行う
#!/bin/sh

ROOT_DIR=/root
BACKUP_DIR=${ROOT_DIR}/backup

for schema in schema1 schema2
do
  filepath="${BACKUP_DIR}/dump/${schema}/`date +'%Y%m%d%H'`.sql"
  /usr/bin/mysqldump --defaults-extra-file=${ROOT_DIR}/.my.cnf --single-transaction --quick --set-charset ${schema} > ${filepath}
  /bin/gzip ${filepath}
done

# 2日前のバックアップファイルは削除
/bin/find ${BACKUP_DIR} -mtime +2 -type f  -exec rm -f {} \;

mysqldumpまとめ

mysqldumpのオプションについては、こちらを参考にさせて頂きました。

crontabを設定

横着して /etc/crontabにcronの設定を記述します。

# Example of job definition:
# .---------------- minute (0 - 59)
# |  .------------- hour (0 - 23)
# |  |  .---------- day of month (1 - 31)
# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# |  |  |  |  |
# *  *  *  *  * user-name command to be executed
00  0-23/3  *  *  * root /root/backup_mysql.sh > /dev/null 2>&1

3時間毎にバックアップを取るcloneです。

最後に

実際は別サーバーに転送したりしています。
AWSのS3にバックアップファイルをアップロードするのがいいのですが、利用できる環境を使って一旦バックアップを取得する方法でした。

前のページ

次のページ

Profile

なかむ🇭🇰Webデベロッパー

なかむ🇭🇰Webデベロッパー

香港在住4年目になるWEBエンジニアのなかむです。 現在は、LaravelやRailsを利用したWEB開発を中心にエンジニアをしています。 顧客は全て日本の企業になります。リモート開発にて各企業様の支援を行なっております

プロフィール詳細はこちら

Latest Posts