mysql實現定時全量備份

定時備份邏輯:

1:定義備份的數據庫

2:使用mysqldump備份

3:壓縮備份sql腳本

4:刪除10天前的備份數據

5:通過rsync同步到備份服務器

新增文件 mysql_backup.sh

#!/bin/bash
# mysql_backup.sh: backup mysql databases and keep newest 5 days backup.
#
# ${db_user} is mysql username
# ${db_password} is mysql password
# ${db_host} is mysql host
# ${db_port} is mysql port
# —————————–
#/root/mysql_backup.sh
# everyday 3:00 AM execute database backup
# 0 3 * * * /root/mysql_backup.sh
#/etc/cron.daily

db_user="root"
db_password="123456"
db_host="47.106.111.110"
db_port="3306"
# the directory for story your backup file.  #
backup_dir="/Host/backup/mysql/"
# 要備份的數據庫名 #
#all_db="$(${mysql} -u ${db_user} -h ${db_host} -p${db_password} -Bse 'show databases')" #
all_db="test"

# 要保留的備份天數 #
backup_day=10

#數據庫備份日誌文件存儲的路徑
logfile="/Host/backup/mysql_backup.log"

###ssh端口號###
ssh_port=22
###定義ssh auto key的文件###
id_rsa=/root/auth_key/id_rsa_153.141.rsa
###定義ssh auto username###
id_rsa_user=rsync
###定義要同步的遠程服務器的目錄路徑(必須是絕對路徑)###
clientPath="/home/backup/mysql"
###定義要鏡像的本地文件目錄路徑 源服務器(必須是絕對路徑)###
serverPath=${backup_dir}
###定義生產環境的ip###
web_ip="192.168.0.2"

# date format for backup file (dd-mm-yyyy)  #
time="$(date +"%Y-%m-%d")"

# mysql, ${mysqldump} and some other bin's path  #
mysql="/usr/bin/mysql "
mysqldump="/usr/bin/mysqldump"

# the directory for story the newest backup  #
test ! -d ${backup_dir} && mkdir -p ${backup_dir}

#備份數據庫函數#
mysql_backup()
{
    # 取所有的數據庫名 #
    for db in ${all_db}
    do
        echo "開始備份: "${db}
        backname=${db}.${time}
        dumpfile=${backup_dir}${backname}

        #將備份的時間、數據庫名存入日誌
        echo "------"$(date +'%Y-%m-%d %T')" Beginning database "${db}" backup--------" >>${logfile}
        ${mysqldump} -F -u${db_user} -h${db_host} -P${db_port} -p${db_password} ${db} > ${dumpfile}.sql 2>>${logfile} 2>&1
        #開始將壓縮數據日誌寫入log
        echo $(date +'%Y-%m-%d %T')" Beginning zip ${dumpfile}.sql" >>${logfile}
        #將備份數據庫文件庫壓成ZIP文件,並刪除先前的SQL文件. #
        tar -czvf ${backname}.tar.gz ${backname}.sql 2>&1 && rm ${dumpfile}.sql 2>>${logfile} 2>&1

        #將壓縮後的文件名存入日誌。
        echo "backup file name:"${dumpfile}".tar.gz" >>${logfile}
        echo -e "-------"$(date +'%Y-%m-%d %T')" Ending database "${db}" backup-------\n" >>${logfile}
    done
}

delete_old_backup()
{
    echo "delete backup file:" >>${logfile}
    # 刪除舊的備份 查找出當前目錄下七天前生成的文件,並將之刪除
    find ${backup_dir} -type f -mtime +${backup_day} | tee delete_list.log | xargs rm -rf
    cat delete_list.log >>${logfile}
}

rsync_mysql_backup()
{
    # rsync 同步到其他Server中 #
    for j in ${web_ip}
    do
        echo "mysql_backup_rsync to ${j} begin at "$(date +'%Y-%m-%d %T') >>${logfile}
        ### 同步 ###
        rsync -avz --progress --delete $serverPath -e "ssh -p "${ssh_port}" -i "${id_rsa} ${id_rsa_user}@${j}:$clientPath >>${logfile} 2>&1
        echo "mysql_backup_rsync to ${j} done at "$(date +'%Y-%m-%d %T') >>${logfile}
    done
}

#進入數據庫備份文件目錄
cd ${backup_dir}

mysql_backup
delete_old_backup
# rsync_mysql_backup

echo -e "========================mysql backup && rsync done at "$(date +'%Y-%m-%d %T')"============================\n\n">>${logfile}
cat ${logfile}

通過 crontab 實現定時:

0 3 * * * /home/tioncico/mysql_backup.sh

每天3點0分進行備份

 

ps:

// 安裝rsync工具(備份服務器和遠程服務器都需要安裝)

yum -y install rsync

// id_ras.pub 用於遠程服務器,id_rsa用於本地備份服務器

// 生成密鑰 (ssh-keygen - jack088的個人頁面 - OSCHINA - 中文開源技術交流社區

ssh-keygen -t rsa -b 1024 -f yourkeyname -C "備註"

touch ~/.ssh/authorized_keys

cat id_rsa.pub >> ~/.ssh/authorized_keys

chmod 600 ~/.ssh/authorized_keys

chmod 700 ~/.ssh

// cron服務(https://blog.csdn.net/u012569217/article/details/78909309)

systemctl start crond
啓動cron服務
systemctl stop crond
停止cron服務
systemctl restart crond
重啓cron服務
systemctl enable crond.service

設置cron開機啓動


查看當前crontab,輸入 crontab -l

編輯當前crontab,輸入 crontab -e

刪除當前crontab,輸入 crontab  -r

 

添加定時任務

crontab -e
0 */1 * * * command
0 */2 * * * command
查詢任務是否添加:

crontab -l -u root 
#查看root用戶

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