phpとmysql が使える
レンタルサーバー
ドメイン
選び
phpとmysql が使えるレンタルサーバー・ドメイン選びのポイント
サーバー情報

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

mysql

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

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


まずは、前準備

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

  • シェルが使える環境か確認します。
    #!/bin/sh
    
    touch `date +%Y%m%d`
    

    上記のファイルを適当なディレクトリへおき、実行権を与えます。( chemod 775 test みたいに ) 実際に実行してみると、(ここでは、testという実行ファイルとして例を記述しています)

    $ ./testreturn
    $ ls -lreturn
    -rw-rw-r-- 1 user user      0  9月 11 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
20
#!/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_backupreturn

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

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

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

以下は、crontabを直接設定できる自宅サーバーやroot権限を持つサーバーを借りている方向けの編集イメージです。
$ vi /etc/crontabreturn
       :
       :
       :

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/crontabreturn
       :
       :
       :

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を追加してあげると、うまくいくでしょう。



関連記事


口コミ・評判



口コミ・評判を投稿 :

お名前 *

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

サイトアドレス



新型コンピュータウィルス「JSRedir-R(通称:Gumblar・GENOウィルス)」の亜種が、2009年末より猛威を振るっており、 現在もウィルスによって、FTP接続パスワードが抜き取られる事象が多発しております。

このサイトでは、ランキング情報には、すべてのレンタルサーバーの情報が表示されますが、 おすすめ情報には、SFTP/FTPSに対応していないレンタルサーバーをおすすめはしないようにしております。

phpとmysql が使えるおすすめ格安レンタルサーバーをご紹介します。もちろん、Joomla!,WordPress,Mobile Typeなどの有名なCMSも使える格安、割安感のあるレンタルサーバーを厳選して、比較紹介します。

  • はてなブックマークへ追加する
  • Facebookでシェアする
  • twitter でつぶやく
  • Google Plusでシェアする
  • Pocketでシェアする
ページトップへ