MySQLのデータを定期実行でバックアップ

サービス運用してるとバックアップ取ると思うのですが、
毎回調べるので自分のブログにメモ。

backup_db.shとかで。 このシェルスクリプトをcronで定期実行するイメージです。

#!/bin/bash

TODAY=`date +%Y%m%d`
BACKUP_DIR=/data/backup/db
BACKUP_INTERVAL='+3'

for database in `mysql -uroot -N -s -e"show databases"`; do
    if [ $database == 'DB名' ]; then
        nice mysqldump -uroot --single-transaction --no-autocommit ${database} | pbzip2 -cv -p4 > ${BACKUP_DIR}/${database}-${TODAY}.sql.bz2
    fi
done

find ${BACKUP_DIR} -type f -name "*.bz2" -mtime ${BACKUP_INTERVAL} | xargs rm -Rf

 

ちなみにcronはこんな感じ

0  4 * * * root sh /path/to/backup_db.sh   > /dev/null 2>&1