ログイン用ファイル作成 ※rootパスワード設定時
# vi /root/.my.cnf [mysqladmin] host = localhost user = root password = DBpassword [client] user = root password = DBpassword host = localhost
# chmod 400 /root/.my.cnf # mysql --defaults-extra-file=/root/.my.cnf
もくじ
全データまとめてdump
mysqlalldump.sh
#!/bin/bash ######################################### # 認証情報 DBUSER="root"; #DBPASSWD="パスワード"; # バックアップ先ディレクトリ //backup/database/20120327 みたいな感じになります。 BAKDIR="/database/backup/"; TODAYS_BAKDIR="$BAKDIR`date +%Y%m%d`"; #世代管理(何日分残すか) DAYAGO="7" ######################################## # バックアップ先がなければ作成 [ ! -d $TODAYS_BAKDIR ] && mkdir -p $TODAYS_BAKDIR; #mysqldump -u$DBUSER -p$DBPASSWD --opt --all-databases --single-transaction --master-data=2 | gzip > $TODAYS_BAKDIR/alldump.sql.gz; mysqldump --defaults-extra-file=/root/.my.cnf --opt --all-databases --single-transaction --master-data=2 --flush-logs | gzip > $TODAYS_BAKDIR/alldump.sql.gz; # 7 日より古いバックアップは削除 find $BAKDIR -type d -mtime +${DAYAGO} -print0 | xargs -0 rm -rf;
DB毎にそれぞれdump
# mkdir -p /backup/database/ # mkdir -p /backup/tmp/
mysqlalldump.sh
#!/bin/sh ###################################### #アーカイブ前の一時ディレクトリ BACKDIRTMP=/backup/tmp/ # バックアップ先ディレクトリ BKDIR=/backup/database/ MYPATH=$(cd $(dirname $0);pwd) #世代管理(何日分残すか) DAYAGO="8" # MySQLrootパスワード #ROOTPASS="パスワード" ###################################### #日付・時刻取得し変数に代入 TIMESET=`date +%Y%m%d-%H%I%M` #バックアップ先ファイル名を設定 設定ファイルにあるファイル名+日付.tar.gzする BKFILE=${BKDIR}/mysql.$TIMESET.tar.gz # データベース名取得 DBLIST=`ls -p /var/lib/mysql | grep / | tr -d /` #一時退避先掃除 rm -rf ${BACKDIRTMP}/* # データベースごとに一時退避先にバックアップ for DBNAME in $DBLIST do #mysqldumpによるバックアップ #mysqldump --single-transaction --master-data=2 -u root -p${ROOTPASS} $DBNAME --opt > ${BACKDIRTMP}/${DBNAME}_dump.sql | logger -t mysqldump mysqldump --single-transaction --master-data=2 --flush-logs --defaults-extra-file=/root/.my.cnf $DBNAME --opt > ${BACKDIRTMP}/${DBNAME}_dump.sql | logger -t mysqldump if [ $? = 0 ]; then logger -t mysqldump "Backup OK mysqldump:${DBNAME}" echo "Backup OK mysqldump:${DBNAME}" else #失敗したらその旨を表示かつ、ログに保存、メール送信 logger -t mysqldump "Backup NG mysqldump:${DBNAME}" echo "Backup NG mysqldump:${DBNAME}" ${MYPATH}/mailsend.sh "バックアップ失敗通知" "実行バックアップスクリプト: ${0} バックアップ対象: mysqldump mysqlDB名:${DBNAME} バックアップに失敗しました。" fi done # 退避先のバックアップを処理日名をつけてアーカイブ圧縮(失敗時はメール送信) cd $(dirname ${BACKDIRTMP}) tar vzcf $BKFILE $(basename ${BACKDIRTMP}) || ${MYPATH}/mailsend.sh "バックアップ失敗通知" "実行バックアップスクリプト: ${0} バックアップ対象: mysql一時ファイルのアーカイブ処理に失敗しました。" #-------yyyymmdd形式のファイルから古い物を削除------- # 削除しきい日付(yyyymmdd)を設定。(DAYAGO日前の日付求める) tday=`date -d "${DAYAGO} day ago" +%Y%m%d` # 対象Dir配下のファイル名をwhileに渡し「$list」となる ls $BKDIR|while read list do #ファイル名に「数字x8」が含まれている場合、 if [[ $list =~ [0-9]{8} ]] ; then # $listから、「yyyymmdd」を取り出しepoch時間($fday)にする fday=`expr $list : "mysql\.\([0-9]\{8\}\).*.tar.gz"` #ファイル名から取得した「yyyymmdd」が本日の「yyyymmdd」よりも小さい場合 if [ -n "$fday" ] && [ $fday -lt $tday ]; then # echo する #echo $list #削除する rm -f ${BKDIR}/${list} fi fi done