mysqlバックアップ_メモ(引用)

qiita.com

からの引用です。自分用メモです

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

最終更新日 投稿日 2013年10月16日
  • 解説が不十分な部分ついては、補足(コピペで本文に取り込める体裁だとありがたい)を頂けると助かります!
  • 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

自分の場合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 
 
 
sudo chmod 0700 /root/backup4mysql.sh 

 cron設定

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

 

su -  #root権限にすでにrootなら不要
echo "0 3 * * * root /root/backup4mysql.sh" > /etc/cron.d/backup4mysql
上入力でファイル自動作成された

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