ツイッターはじめました。

mysqlのバックアップを自動化する

mysqlのバックアップを自動化する

mysqlのバックアップとリストア で、mysqlのバックアップ方法について記述しました。

今回は、そのバックアップを自動化(毎日?毎週?)してみましょう。

まずは、前準備

ここで紹介する事例では、以下のことを確認しておきましょう。

  • シェルが使える環境か確認します。
    #!/bin/sh
     
    touch `date +%Y%m%d`
    上記のファイルを適当なディレクトリへおき、実行権を与えます。( chemod 775 test みたいに ) 実際に実行してみると、(ここでは、testという実行ファイルとして例を記述しています)
    $ ./test
    $ ls -l
    -rw-rw-r-- 1 user user      0  911 11:11 20100911
    正しく動作するなら、上記のように日付だけの空ファイルが作成されるはずです。

    もし、シェルが動作しない環境なら、phpでやってみましょう。
    phpでやる場合は、phpのパス情報を必ず確認しておきましょう。
  • mysqldumpが使える環境か確認します。

    mysqlのバックアップを行うには、mysqldumpのコマンドが動作しないことには、何もできません。 シェルやクーロンで、mysqldumpを動作させるためには、フルパスで記述する必要があります。そのため、パス情報も確認しておきましょう。

  • クーロン(cron)が使える環境か確認します。

    これは、自動化するにあたり、毎日、あるいは毎週など定期的にシェルを起動させるために必要です。

    各レンタルサーバーで、提供の状況は違いますから、機能一覧などから確認しましょう。 もし、クーロン(cron)が提供されているかどうかわからないときは、サポートへ問い合わせて確認しましょう。

準備すること。

  • mysqldumpのパスを確認しておきましょう。
  • バックアップしたいmysqlのユーザ名、パスワード、データベース名を確認しておきましょう。
  • バックアップするファイルを格納するディレクトリを確認しておきましょう。

実例(シェルの場合)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#!/bin/sh
 
DBUSER=db_user_name     # データベースのユーザ名を指定します。
DBNAME=db_name          # データベース名を指定します。
DBPASS=db_password      # データベースのパスワードを指定します。
DBHOST=localhost        # データベースのホスト名を指定します。自分自身の場合は、localhostでOK。
MYSQLPATH=/usr/bin      # mysqldumpがあるパスを指定します。
 
# 出力ファイル名を指定します。
# 以下の例では、/home/user/db_backup/2010_09_11_10_31.sql  のようなファイル名になります。
# 自動的に日時をファイル名にしています。
OUTPUTFILE=/home/user/db_backup/`date +%Y_%m_%d_%H_%M`.sql
 
# バックアップ実行
$MYSQLPATH/mysqldump --default-character-set=utf8 --host="$DBHOST" --user="$DBUSER" --password="$DBPASS"  "$DBNAME"  > "$OUTPUTFILE"
 
# バックアップしたファイルをgzipで圧縮しています。
# 案外、ファイルが大きくなります。ディスク容量に問題なければ、削除しても良いでしょう。
gzip "$OUTPUTFILE"

3行目:db_user_nameを環境に合わせてデータベースのユーザ名を指定します。
4行目:db_nameを環境に合わせてデータベース名を指定します。
5行目:db_passwordを環境に合わせてデータベースのパスワードを指定します。
6行目:localhostを環境に合わせてデータベースのユーザ名を指定します。
7行目:/usr/binを環境に合わせてデータベースのホスト名を指定します。
12行目:/home/user/db_backup/を環境に合わせてバックアップ先ディレクトリを指定します。

設定を終えたら、ファイルに実行権を与えます。

$ chmod 755 exmaple_backup

こんな感じで、exmaple_backupにファイル名を指定してあげます。

ここまでできたら、最後にクーロン(cron)を設定します。

通常、格安レンタルサーバーでは、クーロン(cron)設定用に画面が用意されていると思いますので、その画面に従って設定します。

以下は、crontabを直接設定できる自宅サーバーやroot権限を持つサーバーを借りている方向けの編集イメージです。
$ vi /etc/crontab
       :
       :
       :
 
0  1  * * * root /home/user/exmaple_backup
こんな感じで、exmaple_backupを毎日1時に実行するように指定できます。


ここまで設定できればOK。後は、実際に実行して、うまく動作するかどうか確認しておわりです。

実例(phpの場合)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?php
 
$DBUSER='db_user_name';     # データベースのユーザ名を指定します。
$DBNAME='db_name';          # データベース名を指定します。
$DBPASS='db_password';      # データベースのパスワードを指定します。

$DBHOST='localhost';        # データベースのホスト名を指定します。自分自身の場合は、localhostでOK。
$MYSQLPATH='/usr/bin';      # mysqldumpがあるパスを指定します。

 
# 出力ファイル名を指定します。
# 以下の例では、/home/user/db_backup/2010_09_11_10_31.sql  のようなファイル名になります。
# 自動的に日時をファイル名にしています。
$OUTPUTFILE='/home/user/db_backup/'.date('Y_m_d_H_i').'.sql';
 
# バックアップ実行
system( "$MYSQLPATH/mysqldump --default-character-set=utf8 --host=\"$DBHOST\" --user=\"$DBUSER\" --password=\"$DBPASS\"  \"$DBNAME\"  > \"$OUTPUTFILE\"" );
 
# バックアップしたファイルをgzipで圧縮しています。
# 案外、ファイルが大きくなります。ディスク容量に問題なければ、削除しても良いでしょう。
system( "gzip \"$OUTPUTFILE\"" );
 
?>

phpでもシェルと同じように設定していきます。

3行目:db_user_nameを環境に合わせてデータベースのユーザ名を指定します。
4行目:db_nameを環境に合わせてデータベース名を指定します。
5行目:db_passwordを環境に合わせてデータベースのパスワードを指定します。
6行目:localhostを環境に合わせてデータベースのユーザ名を指定します。
7行目:/usr/binを環境に合わせてデータベースのホスト名を指定します。
12行目:/home/user/db_backup/を環境に合わせてバックアップ先ディレクトリを指定します。

ここまでできたら、最後にクーロン(cron)を設定します。

通常、格安レンタルサーバーでは、クーロン(cron)設定用に画面が用意されていると思いますので、その画面に従って設定します。

以下は、crontabを直接設定できる自宅サーバーやroot権限を持つサーバーを借りている方向けの編集イメージです。
$ vi /etc/crontab
       :
       :
       :
 
0  1  * * * root /user/bin/php /home/user/exmaple_backup.php
こんな感じで、exmaple_backup.phpを毎日1時に実行するように指定できます。
※ここでは、シェルと違って、phpの実行コマンドにバックアップの処理を記述したexmaple_backup.phpを引数で渡すことに注意します。


ここまで設定できればOK。後は、実際に実行して、うまく動作するかどうか確認しておわりです。

mysqldumpコマンドで、以下のようなエラーが表示されることがあります。
mysqldump: Got error: 1016: Can't open file: './xxxxx.frm' (errno: 24) when using LOCK TABLES
これは、基本的に、バックアップしたい情報量が大きすぎることが原因のようです。 単純に実行したいのであれば、テーブルロックをしないように指定するとOKです。
mysqldump --default-character-set=utf8 --host="hostname" --user="db_user" --password="$db_password"  "db_name"  --lock-tables=false
最後の–lock-tables=falseを追加してあげると、うまくいくでしょう。

この記事を読んだ人は次の記事も読んでいます:



口コミ・評判



口コミ・評判を投稿 :

お名前 *

メールアドレス *
(口コミ・評判欄には、表示されませんが入力が必要です。)

サイトアドレス

*


お名前.com VPS(KVM) vs さくらのVPS新プラン!!


vs

(メモリ2G/仮想 3コア 比較)

    ディスク(GB)   CPU Power   月額
お名前.com VPS(KVM) 200 2,962 1,380
さくらのVPS 新プラン 200   2,716   1,480
※CPU PowerはUnixBecnhによる数値です。(自分で調べたものです)
※メモリをCPUのコア数は同じプランでの比較です。
  • お名前.com VPS(KVM) 2Gプラン(3コア)
  • さくらのVPS 2Gプラン(3コア)

各プランの比較詳細は、さくらのVPS 新プラン と お名前.com レンタルサーバーVPS 新KVM プランと KDDI クラウドコア(CloudCore) を比較してみたをご覧ください。

メモリ2GBプラン : 初期設定費無料 キャンペーン
さくらのVPS新プラン: →2012/7/2 12:00 まで
お名前.com VPS(KVM): →2012/5/31 12:00 まで

お名前.com VPS(KVM)の詳細については、 こちらのお名前.com VPS(KVM)のサイト お名前.com VPS(KVM)のサイトへへどうぞ。(お試し期間が15日あります。)
さくらのVPSの詳細については、 こちらのさくらのVPSのサイト さくらのVPSのサイトへへどうぞ。(お試し期間が14日あります。)

さくらインターネットでデータベース機能強化!!


さくらインターネット
データベース大幅機能アップ実施!!
もちろん既に利用している方もこれから借りる方も全ての利用者対象です。 :)

  • データベース作成数を大幅に増量
    スタンダード 1個 → 20個
    プレミアム  1個 → 50個
    ビジネス   2個 → 100個
    ビジネスプロ 3個 → 200個
  • ストレージエンジン「InnoDB」の追加提供
  • データベースサーバのスペック増強 (従来比5倍のパフォーマンスを実現)

さくらインターネットのお申し込みは、 こちらのさくらインターネット サイト さくらインターネットのサイトへからどうぞ。(お試し期間が14日あります。)

サイトメニュー(カテゴリ)




一押し!!キャンペーン情報

  • 共有サーバー
  • VPS
  • マネージド
  • ドメイン

その他のキャンペーン情報は、こちらをご確認ください。





主なラインキング

共有レンタルサーバー& みんなの評価

みんなの評価は、このサイトを利用されている方の評価平均でランキングされています。

各レンタルサーバーの機能概要一覧は、 こちらからどうぞ


VPS& みんなの評価

みんなの評価は、このサイトを利用されている方の評価平均でランキングされています。

各VPS機能概要一覧は、 こちらからどうぞ


マネージドサーバー& みんなの評価

みんなの評価は、このサイトを利用されている方の評価平均でランキングされています。

各マネージドサーバー機能概要一覧は、 こちらからどうぞ


ドメインレジスタ& みんなの評価

みんなの評価は、このサイトを利用されている方の評価平均でランキングされています。

各ドメインレジスタの主要ドメイン価格一覧は、 こちらからどうぞ

: この表示がある価格は、キャンペーン価格になります。

Valid XHTML 1.0 Transitional


  • はてなブックマークへ追加するはてな登録数
  • Yahoo!
  • Livedoor Clip
  • FC2
  • Nifty Clip
  • POOKMARK. Airlines
  • Buzzurl(バザール)
  • Choix
  • newsing
  • del.icio.us
ページトップへ