■ FC2~FC6 / Fedora7 / Fedora8 / Fedora9
サーバーのデータを tar コマンドを使い、同じサーバー内に圧縮バックアップが出来るようにする。
■ サーバー側でのバックアップ設定
1.バックアップスクリプト作成
[root@server ~]# vi backup.sh #!/bin/bash LANG=C # バックアップ対象ファイルリスト名 BACKUPLIST=/root/backuplist [ ! -s $BACKUPLIST ] && echo "$BACKUPLIST is not found" && exit 1 # バックアップ対象外ファイルリスト名 BACKUPNOLIST=/root/backupnolist # バックアップ先ディレクトリ名 BACKUPDIR=/backup mkdir -p $BACKUPDIR # バックアップの保存世代数 BACKUPGEN=12 # バックアップのログファイル名 BACKUPLOG=/var/log/backup.log # バックアップ先ディレクトリをバックアップ対象外ファイルリストに追加 TMPBACKUPNOLIST=`mktemp` [ -s $BACKUPNOLIST ] && cat $BACKUPNOLIST > $TMPBACKUPNOLIST echo $BACKUPDIR >> $TMPBACKUPNOLIST # 前回バックアップしたファイル名変更 cd $BACKUPDIR OLDBACKUPFILE=`ls backup.tar.bz2* 2>/dev/null` if [ -f $OLDBACKUPFILE ]; then TIMESTAMP=`ls --full-time $OLDBACKUPFILE|awk '{print $6}'|tr -d -` mv $BACKUPDIR/$OLDBACKUPFILE $BACKUPDIR/${TIMESTAMP}$OLDBACKUPFILE > /dev/null 2>&1 fi # バックアップのログファイル作成 rm -f $BACKUPLOG touch $BACKUPLOG chmod 400 $BACKUPLOG # バックアップの実行 echo "`date` backup start" >> $BACKUPLOG tar cjvfP $BACKUPDIR/backup.tar.bz2 -T $BACKUPLIST -X $TMPBACKUPNOLIST >> $BACKUPLOG 2>&1 [ $? -ne 0 ] && cat $BACKUPLOG | mail -s "BACKUP NG" root && exit 1 echo "`date` backup end" >> $BACKUPLOG # バックアップの保存世代を超えた古いバックアップファイルを削除 if [ $(ls /backup/|wc -l) -gt $BACKUPGEN ]; then OLDBACKUPCNT=`expr $(ls /backup/|wc -l) - $BACKUPGEN` for file in `ls -t $BACKUPDIR|tail -n $OLDBACKUPCNT` do rm -f $BACKUPDIR/$file done fi # バックアップ対象外ファイルを削除 rm -f $TMPBACKUPNOLIST
バックアップスクリプトへ実行権限付加
[root@server ~]# chmod 700 backup.sh
2.バックアップ対象ファイルリストの作成
バックアップ対象ファイルリストに/var/www/htmlディレクトリを追加
[root@server ~]# echo "/var/www/html" >> backuplist
3.バックアップ対象外ファイルリストの作成
例としてバックアップ対象外ファイルリストに/var/www/errorディレクトリを追加
[root@server ~]# echo "/var/www/error" >> backupnolist
4.バックアップスクリプトの確認
[root@server ~]# ./backup.sh ← バックアップスクリプトの実行 [root@server ~]# ls -lh /backup ← バックアップ先ディレクトリの照会 合計 754M -rw-r--r-- 1 root root 753M 10月 27 20:15 backup.tar.bz2 ↑ backup.tar.bz2というバックアップファイルが出来ている
5.バックアップディレクトリ、ファイルの確認
[root@server ~]# tar tjvf /backup/backup.tar.bz2 バックアップしたディレクトリ、ファイルが一覧表示される
6.バックアップ定期自動実行設定
[root@server ~]# crontab -e 00 05 * * * /root/backup.sh ← 追加(毎日05:00にバックアップを実行する)
■MySQLのデータベースのバックアップ
MySQLのバックアップにも色々な方法があるが、もっとも簡単な方法はmysqldumpを利用して自サーバー内の/backupディレクトリーにバックアップすることだと思う。
1.mysqldumpによるバックアップ
たとえば、全データベースを/backupディレクトリーにalldump.sqlという名前でバックアップするのなら次のようにする。linuxではこれをcronから起動させれば深夜に無人バックアップさせることが出来る。
[root@server ~]# mysqldump -A -uroot -pパスワード -Q --opt -r/backup/alldump.sql
個別のデータベースを/backupディレクトリーにデータベース名.sqlという名前でバックアップしたい場合は以下のようにする。
[root@server ~]# mysqldump mysql -uroot -pパスワード -Q --opt -r/backup/mysqldump.sql [root@server ~]# mysqldump fc -uroot -pパスワード -Q --opt -r/backup/fcdump.sql [root@server ~]# mysqldump ss1129 -uroot -pパスワード -Q --opt -r/backup/ss1129dump.sql [root@server ~]# mysqldump nucleus -uroot -pパスワード -Q --opt -r/backup/nucleusdump.sql [root@server ~]# mysqldump taka -uroot -pパスワード -Q --opt -r/backup/takadump.sql
2.MySQLのデータベースの自動バックアップ
MySQLの個別のデータベースを/backupにバックアップするスクリプトを作成。 [root@server ~]# vi mysqldump.sh #! /bin/sh mysqldump mysql -uroot -pパスワード -Q --opt -r/backup/mysqldump.sql mysqldump fc -uroot -pパスワード -Q --opt -r/backup/fcdump.sql mysqldump ss1129 -uroot -pパスワード -Q --opt -r/backup/ss1129dump.sql mysqldump nucleus -uroot -pパスワード -Q --opt -r/backup/nucleusdump.sql mysqldump taka -uroot -pパスワード -Q --opt -r/backup/takadump.sql 実行権限を与える [root@server ~]# chmod 700 mysqldump.sh バックアップスクリプトを実行 [root@server ~]# ./mysqldump.sh バックアップされてるか確認 [root@linux ~]# ls -lh /backup 合計 1.2G -rw-r--r-- 1 root root 753M 10月 28 05:16 backup.tar.bz2 -rw-r--r-- 1 root root 377K 10月 28 05:00 fcdump.sql -rw-r--r-- 1 root root 150K 10月 28 05:00 ss1129dump.sql -rw-r--r-- 1 root root 285K 10月 28 05:00 mysqldump.sql -rw-r--r-- 1 root root 12M 10月 28 05:00 nucleusdump.sql -rw-r--r-- 1 root root 234K 10月 28 05:00 takadump.sql
3.自動実行
すでに毎日5:00にデータベース以外のバックアップを自動実行させているのでデータベースも連携してバックアップする。
先にデータベースをバックアップして次に他のバックアップを実行するように/root/backup.shの前に/root/mysqldump.shを入れる。
[root@server ~]# crontab -e 00 05 * * * /root/mysqldump.sh ; /root/backup.sh
4.復元
バックアップファイルをサーバーへ復元する必要が出てきた場合は、以下のコマンドを実行することで、パーミッション、所有者も含めて元のメインサーバーにリストア出来る。
[root@server ~]# tar jxvfP /backup/backup.tar.bz2 個別にパーミッション、所有者も含めて復元する場合は [root@server ~]# tar jxvfP /backup/backup.tar.bz2 /var/www/html/ファイル名
mysqldumpでバックアップしたファイルをリストアするにはmysqlコマンドを使う。
全てをバックアップした場合のリストア [root@server ~]# mysql -uroot -pパスワード < /backup/alldump.sql 個別のデータベースをバックアップした場合のリストア [root@server ~]# mysql -uroot -pパスワード mysql < /backup/mysqldump.sql [root@server ~]# mysql -uroot -pパスワード fc < /backup/fcdump.sql [root@server ~]# mysql -uroot -pパスワード ss1129 < /backup/ss1129dump.sql [root@server ~]# mysql -uroot -pパスワード nucleus < /backup/nucleusdump.sql [root@server ~]# mysql -uroot -pパスワード taka < /backup/takadump.sql mysqlをリストアした場合や全てをリストアした場合はmysqlを再起動が必要 [root@server ~]# /etc/init.d/mysql restart