mysql數據庫定時分庫備份(本地+異地)

簡介-邱月濤
公司新項目上線,今天建立全網備份,現在這記錄的是mysql部分
備份方式:全備+binlog
備份地點:本地+異地
備份時間:每日0點,切割binlog日誌

1,環境介紹:

[root@jm1j-node1 scripts]# cat /etc/redhat-release 
CentOS release 6.8 (Final)
[root@jm1j-node1 scripts]# mysql -V
mysql  Ver 14.14 Distrib 5.6.35, for linux-glibc2.5 (x86_64) using  EditLine wrapper

2,規範腳本存放目錄

 mkdir -p /server/scripts

3,編寫腳本內容如下

#!/bin/bash
#---------------------------------------------------------
# $Name:         mysqlbackup.sh
# $Version:      v1.0
# $Author:       qiuyuetao
# $organization: http://blog.51cto.com/qiuyt
# $Create Date:  2017-12-13
# $Description:  Mysql backup script
#---------------------------------------------------------

#source /etc/init.d/functions
DAY=`date +%Y-%m-%d\-%H-%M`
BACK_DIR="/data/backup/mysql/dump"
DBUSER="root"   #數據用戶
DBPASSWD="***數據庫密碼"  
BIN_PATH="/application/mysql/bin" #全局變量,可以使用which獲取
LOG="/var/log/mysqlback.log" #備份日誌
CKLOG="/var/log/bkmd5-"$DAY".log" #md5加密日誌,後期發送郵件

## Close all tables and refresh log ####
"$BIN_PATH"/mysql -u "$DBUSER" -p"$DBPASSWD" -e "flush logs"

#"$BIN_PATH"/mysql -u "$DBUSER" -p"$DBPASSWD" -e "flush tables with read lock"

echo "mysqldump start `date +%F\ %H\:%M\:%S`" >> "$LOG"

## Each backup database to the target location ####
for i in `"$BIN_PATH"/mysql -u "$DBUSER" -p"$DBPASSWD" -e "show databases" |grep -vE "Database|information_schema|performance_schema"`
  do
        if [ ! -d "$BACK_DIR"/"$i" ]; then
                mkdir -p  "$BACK_DIR"/"$i"
           fi
"$BIN_PATH"/mysqldump -u "$DBUSER" -p"$DBPASSWD" --default-character-set=utf8  --events --master-data=2 --lock-all-tables -f --log-error="$LOG" -B "$i"|gzip > "$BACK_DIR"/"$i"/"$DAY".sql.gz
md5sum "$BACK_DIR"/"$i"/"$(date +%F --date='0 days ago')"-*.sql.gz  >>$CKLOG
   done

echo "mysqldump stop `date +%F\ %H\:%M\:%S`" >> "$LOG"
echo "" >>"$LOG"

## Delete old 10day backup files 保留最近10天的數據####
for RM in `"$BIN_PATH"/mysql -u "$DBUSER" -p"$DBPASSWD" -e "show databases" |grep -vE "Database|information_schema|performance_schema"`
   do

rm -rf "$BACK_DIR"/"$RM"/$(date +%F --date='10 days ago')*.sql.gz
    done

echo 生產數據庫備份完整性MD5初始值 |mail -s 備份校驗 -a  "$CKLOG"  qiuyt@*****.com  ##自己的郵箱

4,添加執行權限

[root@jm1j-node1 scripts]# chmod +x mysqlbackup.sh `

5,在命令行手動測試

查看備份結果,
mysql數據庫定時分庫備份(本地+異地)

#如果沒有發送郵件,請檢查服務是否安裝,啓動,25端口是否啓用等等,然後手動發送郵件測試
6,配置郵箱
1)查看是否安裝mailx

[root@jm1j-node1 scripts]# rpm -qa|grep mailx
mailx-12.4-8.el6_6.x86_64

2)修改mail配置

[root@yilonghc-m01 ~]# tail /etc/mail.rc   ##t添加如下內容
set bsdcompat
set [email protected]
set smtp=smtp.163.com
set smtp-auth-user=*****@163.com  #自己的郵箱
set smtp-auth-password=***** ##授權碼
set smtp-auth=login

6,定時備份 (正常可以加入crontab定時任務,每天0點執行)

mysql數據庫定時分庫備份(本地+異地)
上面沒有找到,下面命令安裝

yum install -y vixie-cron

添加定時任務

crontab -e
#mysqlbackup by qyt at 2017-12-13
00 00 * * * /bin/sh  /server/scripts/mysqlbackup.sh >/dev/null 2>&1

##異地備份,有多重方式,爲了減少服務器壓力,我使用rsync 客戶端拉取方式

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章