まずは、前準備
ここで紹介する事例では、以下のことを確認しておきましょう。
- シェルが使える環境か確認します。
上記のファイルを適当なディレクトリへおき、実行権を与えます。( chemod 775 test みたいに )
実際に実行してみると、(ここでは、testという実行ファイルとして例を記述しています)
$ ./test
$ ls -l
-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
|
DBUSER=db_user_name
DBNAME=db_name
DBPASS=db_password
DBHOST=localhost
MYSQLPATH=/usr/bin
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 "$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を追加してあげると、うまくいくでしょう。
口コミ・評判
口コミ・評判を投稿 :