MySQL

MySQLダンプスクリプト

 

ログイン用ファイル作成 ※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

 

 

 

 

Amazonおすすめ

iPad 9世代 2021年最新作

iPad 9世代出たから買い替え。安いぞ!🐱 初めてならiPad。Kindleを外で見るならiPad mini。ほとんどの人には通常のiPadをおすすめします><

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)