取り方が分からないという人のためにシェルスクリプトをうまい具合に使って一元バックアップ管理する方法を紹介させて頂きます。バックアップのシェルスクリプト自体は既に作っている人がいて大変助かりました。
- シェルスクリプトとCronでCSSclipのデータベースを自動バックアップ化アンドバキューム化してみました » WDclip*Resources | web design resources
- <シェルスクリプトとCronでデータベースを自動バックアップ&ローテーション – (DxD)∞/li>
データベースのバックアップをする方法
先ほど紹介させて頂きましたサイトにシェルスクリプトが公開されていたと思いますが、これを持ってきて以下のようにバックアップ元のデータベースとバックアップ先のディレクトリ・ファイルをしっかり設定してあげれば後は example.sh といったファイル名で保存すれば良いです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 | #!/bin/sh # ---------- 設定 ---------- # バックアップ元のデータベース db_host=mysql00.heteml.jp db_name=_dbname db_user=_dbname db_pass=password # バックアップ先のディレクトリ・ファイル bk_dir=/home/sites/heteml/users/e/x/s/example/backup/mysql/example/ bk_file=$db_name # 保存する日数 bk_days=30 # ---------- ファイル名を設定 ---------- # タイムスタンプを取得 ts_now=`date +%Y%m%d` ts_old=`date "-d$bk_days days ago" +%Y%m%d` # ファイル名を設定 file_temp=$bk_file.sql file_backup=$bk_file.$ts_now.tar.gz file_remove=$bk_file.$ts_old.tar.gz # ---------- バックアップ処理 ---------- # バックアップ先のディレクトリに移動 cd $bk_dir if [ $? != 0 ]; then echo "Backup directory does not exist." exit 1 fi # データベースをダンプ mysqldump -h$db_host $db_name -u$db_name -p$db_pass --opt > $file_temp if [ $? != 0 -o ! -e $file_temp ]; then echo "Cannot dump database." exit 1 fi # アーカイブを作成 tar cfz $file_backup $file_temp if [ $? != 0 -o ! -e $file_backup ]; then echo "Cannot archive files." exit 1 fi # テンポラリファイルを削除 rm -f $file_temp # ローテーション処理 if [ -e $file_remove ]; then rm -f $file_remove fi # ---------- 最適化処理 ---------- mysqlcheck -o -h$db_host -u$db_user -p$db_pass $db_name exit 0 |
以上のファイルで指定したデータベースのバックアップができます。ヘテムルでは mysqldump が cron 実行時でしか動作しないため、直接スクリプトを起動しても失敗しますので注意が必要です。
データベースのバックアップをまとめて行う
これをひとつずつ作って、ひとつずつ cron を設定しても良いのですが、それでは貴重な cron の設定数が無駄になりますし、いちいちデータベース作るたびに設定するのがとても面倒ですよね。そのため、ひとつのファイルから複数のバックアップファイルを起動して一元管理しましょう。
まず、以下のようなディレクトリ構成をおすすめします。~/sh ディレクトリを作成して、そこにシェルスクリプトを今後入れていくことにします。今回は MySQL のバックアップを取るスクリプトを置くため、mysqlbackup というディレクトリを作成しました。
1 2 3 4 5 6 | └── sh └── mysqlbackup ├── backup.sh ├── example.sh ├── example2.sh └── example3.sh |
仕組みとしては backup.sh が複数のバックアップスクリプトを起動します。backup.sh の内容は以下のような感じですのでパスなどを変更して使ってください。
1 2 3 4 5 | #!/bin/bash sh /home/sites/heteml/users/e/x/s/example/sh/mysqlbackup/example.sh sh /home/sites/heteml/users/e/x/s/example/sh/mysqlbackup/example2.sh sh /home/sites/heteml/users/e/x/s/example/sh/mysqlbackup/example3.sh |
ちなみにバックアップファイルの保存場所を以下のようにすると綺麗です。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | └── backup └── mysql ├── _example │ ├── _example.20110301.tar.gz │ ├── _example.20110302.tar.gz │ ├── _example.20110303.tar.gz │ └── _example.sql ├── _example2 │ ├── _example2.20110301.tar.gz │ ├── _example2.20110302.tar.gz │ ├── _example2.20110303.tar.gz │ └── _example2.sql └── _example3 ├── _example3.20110301.tar.gz ├── _example3.20110302.tar.gz ├── _example3.20110303.tar.gz └── _example3.sql |
PONYさんのコメント
参考にさせていただきました、ありがとうございます!
ただ現在のヘテムルの仕様だとcronでrmは実行出来ないようです。
ですので古いファイルの削除を自動化できないため手動で行わなければいけなさそうですね。
http://heteml.jp/support/faq/2085.html
同様にmysqlcheckも使用出来ませんでした。