mysqldumpを使ってデータベースの30日分をバックアップする
mysqlのデータベースをバックアップする1つの方法は、mysqldumpコマンドを使うことです。
単純にmysqldumpするのは、いくらでも記事があるので、ここでは、30日間のデータベースをバックアップするシェルスクリプトを考えてみましょう。
30日分のデータベースをバックアップするシェルスクリプト
Linux、FreeBSD上で記述する場合、30日分のデータベースをバックアップするのは簡単に書けます。
以下は、その例です。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
| #!/bin/sh
# -- PATH ---
BINPATH=/bin
MYSQLPATH=/usr/bin
# -- MYSQL ---
DBNAME=mysql_database_name
DBUSER=mysql_user_name
DBPASS=mysql_user_password
DBHOST=localhost
OUTPUTDIR=/var/log/temp
OUTPUTFILE_PREFIX=sqldump_
OUTPUTFILE=`date +%Y_%m_%d`.sql
# -- BACKUP ---
OLDDATEFILE=`date -d "-30 day" +%Y_%m_%d`
# remove old backup DB files.
$BINPATH/rm -f $OUTPUTDIR/$OUTPUTFILE_PREFIX$OLDDATEFILE*.*
# create new backup DB files.
$MYSQLPATH/mysqldump --default-character-set=utf8 --host="$DBHOST" --user="$DBUSER" --password="$DBPASS" --skip-lock-tables "$DBNAME" > "$OUTPUTDIR/$OUTPUTFILE_PREFIX$OUTPUTFILE" | $BINPATH/gzip -f "$OUTPUTDIR/$OUTPUTFILE_PREFIX$OUTPUTFILE"
|
一応、簡単に解説しておきます。
- 4行目 : rm,gzipコマンドのパスになります。 パスは、which rm などで簡単に調べることができます。
- 5行目 : mysqldumpコマンドのパスになります。 パスは、which mysqldump で簡単に調べることができます。
mysqldump のパスは、各OSやインストール状況によって異なるかもしれません。各環境にて which コマンドなどで確認の上、編集してください。
$ which mysqldump
/usr/bin/mysqldump
|
- 8-11行目 : mysqlの環境設定です。
- 8行目 : ダンプするデータベース名を設定します。
- 9行目 : ダンプするデータベースへアクセス可能なユーザ名を設定します。
- 10行目 : ダンプするデータベースへアクセス可能なユーザのパスワードを設定します。
- 11行目 : ダンプするデータベースのホスト名を設定します。自ホストの場合は、”localhost”で可。
- 13-15行目 : バックアップファイルの環境設定です。
- 13行目 : バックアップするファイルを置くためのディレクトリ名を設定します。
- 14行目 : バックアップするファイル名のプレフィックス名を設定します。
- 15行目 : バックアップするファイル名を設定します。
例)
上記の設定例では、実行する日付が2010年12月13日だとします。
この場合、バックアップするファイル名は、
/var/log/temp/sqldump_2010_12_13.sql
となります。
- 18行目 : 古くなったバックアップファイル名を設定します。
ここで指定したファイル名が削除対象となります。
- 21行目 : 古くなったバックアップファイルを無条件に削除しています。
例)
上記の設定例では、実行する日付が2010年12月13日だとします。
この場合、削除するバックアップするファイル名は、
/var/log/temp/sqldump_2010_11_13*.*
となります。
一応、ワイルドカードを使って拡張子が何であれ、削除できるようにしています。
- 24行目 : 最新のバックアップファイルを作成しています。
同時にgzipで圧縮しています。
mysqldumpのパラメータ
–default-character-set=utf8 : デフォルト文字列を
UTF8とします。
–skip-lock-tables : LOCK TABLEをスキップします。(mysqldump中のLOCK TABLEを行いません)
注意
–skip-lock-tables を利用する場合は、mysqldump中にデータベースの更新を行わないように注意する必要があるでしょう。
本来は、このパラメータなしでmysqldumpを実行すべきでしょうね。このパラメータを指定することで、mysqldumpは、table lockしないので、その間に更新作業できるようになります。
そうすると、mysqldumpを実施しても、データベースの中で論理矛盾が発生することがあります。
但し、もしこのパラメータを指定しない場合、他のプロセスでtable lockされている場合は、mysqldumpで以下のようなエラーを出力し、ダンプできないことがあります。
mysqldump: Got error: 1016: Can't open file: './databease/tablelock.frm' (errno: 24) when using LOCK TABLES
|
シェルスクリプトを毎日実行する
上記のように作成したシェルスクリプトを毎日実行するようにcronに設定します。
以下の例では、上記で作成したシェルスクリプトのファイル名を/var/dbbackupとしています。
$ chmod +x /var/dbbackup
$ vi /etc/crontab
...
0 4 * * * root /var/dbbackup
|
まず、スクリプトファイルに実行権を与えて、一番アクセスの少ない時間帯の午前4時に実行するようにcronに設定してみています。
これで、毎日、データベースのバックアップがとれますね。
まずは、こんなところでしょうか。
いろんな方法がありますが、簡単なシェルスクリプトでのバックアップです。これであれば、30日分のデータベースを常に採取できるので良いですよね。
※さくらインターネットVPSを試してみたい方は、こちらの
さくらのVPSページ からどうぞ。
ご利用のブラウザは、広告ブロック(AdBlockなど) が適用となっていませんか?
このサイトでは、コンテンツの一部が非表示、あるいは、コメント、お問い合わせの投稿ができない、検索ができないことがあります。
関連記事 :
コメントを投稿 :