タグ: cron

Daily Backup を取っておく

MySQLのデータを日毎にバックアップとっておくことになった。
sqldumpで書き出しておけば、自分じゃなくても戻せるだろう……という理由のもとに、
書き出し方法はシェルとcrontabでいいんじゃないかなぁと妄想しつつ、書いてみる。

#!/bin/sh

date_digit=`date +%Y%m%d`
week_ago_digit=`date -d '-7 days' +%Y%m%d`
for db_name in `mysql -u root -p'00000000' -N -s -e"show databases;"`; do
    mysqldump -u root -p'00000000' --single-transaction ${db_name} > /home/mysql_daily_backup/${date
_digit}_${db_name}.sql
    scp -Cqpi /root/.ssh/id_rsa /home/mysql_daily_backup/${date_digit}_${db_name}.sql root@111.222.333.444:/var/www/html/mysql_daily_backup
    cd /home/mysql_daily_backup
    if [ -e ${week_ago_digit}_${db_name}.sql ]; then
        rm -rf /home/mysql_daily_backup/${week_ago_digit}_${db_name}.sql
    fi
done;

これでいいのかな?
動いてるからいいかな?

あ、事前に秘密鍵公開鍵の設定は済ませておくこと。

crontab で rsync をまわす

バックアップサーバからcrontabで毎日昼間にrsyncをかける。
事前にバックアップから本番にアクセスできるよう公開鍵を事前に本番サーバに仕込んでおく。

0 10 0 0 0 rsync --delete -auz root@192.168.1.12:/mnt/D/ /mnt/F/
0 12 0 0 0 rsync --delete -auz root@192.168.1.12:/mnt/E1/ /mnt/G/
0 14 0 0 0 rsync --delete -auz root@192.168.1.12:/mnt/E2/ /mnt/H/

こんなカンジかな?

logrotate を hourly でまわす

なんでこんな事しなきゃいけないかというと、MySQLでクエリログをちょっと長時間で取る必要があったから。
1時間で100M越えるんだもんなー

と、愚痴ってもしょうがないのでサクサク進める。
やってることは簡単。「/etc/cron/daily/logrotate」を「/etc/cron/hourly/logrotate」にコピーする。
それだけ。

cp /etc/cron.daily/logrotate /etc/cron.hourly/logrotate

以上。