Help us understand the problem. What is going on with this article?

mysql の定期的なバックアップ

More than 3 years have passed since last update.
  • 解説が不十分な部分ついては、補足(コピペで本文に取り込める体裁だとありがたい)を頂けると助かります!
  • mysqlのバックアップ手法に関しては様々な方法がありますので随時追記していきたいと思います!
  • サーバー構成に関しても様々なパターンがありますので、随時追記していきたいと思います。

mysql-server 5.1.8以降では、以前の手法ではWarningが発生するようになったため、
それ回避した上での手法を公開したいと思います。

まずmysql5.1.8以前のバージョンでのバックアップ手法

mysqldump --opt --all-databases --default-character-set=binary -u root > /root/backup/mysql/all_db.sql

以前はこれで問題なかったのですが、5.1.8以降では上記コマンドを実行すると下記のWaningが
発生するようになりました。

-- Warning: Skipping the data of table mysql.event. Specify the --events option explicitly.

これはバージョン5.1.8からmysqlデータベースにeventsテーブルが追加されたことが原因です。

mysqldump コマンドに対して全てのデータベース内容をdumpする「--all-databases」のオプションを付与している場合、
これまでの手法では上記のeventsテーブルのみが対象外となってしまっているために発生しているWaningです。

この回避策としては、mysqldum コマンドに対して「--all-databases」のオプションを付与している場合は
さらに「--events」 のオプションを追加する必要があります。

これらの内容を反映した上での、バックアップ取得スクリプトを作成してみました。

/bin/sh + mysqldump バージョン

事前準備(バックアップ保存用ディレクトリの作成)

sudo mkdir /root/backup/mysql


スクリプト作成開始

sudo vim /root/backup4mysql.sh


backup4mysql.sh
#!/bin/sh

# 他のユーザからバックアップを読み込めないようにする
umask 077

# バックアップファイルを何日分残しておくか(一ヶ月分)
period=31
# バックアップファイルを保存するディレクトリ
dirpath='/root/backup/mysql'

# ファイル名を定義(※ファイル名で日付がわかるようにしておきます)
filename=`date +%y%m%d`

# mysqldump実行(ファイルサイズ圧縮の為gzで圧縮しておきます。)
mysqldump --opt --all-databases --events --default-character-set=binary -u root --password=パスワード | gzip > $dirpath/$filename.sql.gz

# 古いバックアップファイルを削除
oldfile=`date --date "$period days ago" +%y%m%d`
rm -f $dirpath/$oldfile.sql.gz

アクセス権限設定変更

このshellにはmysqlのrootのパスワードが丸々記載されているため、rootユーザ以外は内容を閲覧できなくしておく必要があります。

sudo chmod 0700 /root/backup4mysql.sh


cron設定

最後にこのスクリプトをcronで定期実行することにより、定期的に全データベースのバックアップを取得することが可能となります。

su -
echo "0 3 * * * root /root/backup4mysql.sh" > /etc/cron.d/backup4mysql

以上、ご参考になれば幸いです。

crimson_21
freelance engineer
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした