zoukankan      html  css  js  c++  java
  • MySQL 5.7.10 自动备份、自动清理旧备份集(转)

    1,mysqldump备份脚本

    备份脚本为,里面有几个需要注意的参数:

    (1)--master-data=2 :这个参数可以在搭建从库的时候,记录当前备份的复制点信息。

    (2)--extended-insert=false:这个在形成sql语句的时候,一条记录一个insert语句

    (3)--single-transaction:来保证备份的一致性,实际上它的工作原理是设定本次会话的隔离级别为:REPEATABLE READ,以确保本次会话(dump)时,不会看到其他会话已经提交了的数据。

    备份脚本为:backup_full.sh

    date=`date "+%Y%m%d%H%M%S"`

    back_path=/data/mysql/backup/data

    mysqldump=/usr/local/mysql/bin/mysqldump

    cd ${back_path}

    ${mysqldump} -uroot --password="xs_pys@7y895b"  -R -E -h localhost --socket=/usr/local/mysql/mysql.sock --skip-opt --single-transaction --flush-logs --master-data=2 --add-drop-table --create-option --quic

    k --extended-insert=false --set-charset --disable-keys --databases user_db  |gzip > user_db.${date}.sql.gz

    ${mysqldump} -uroot --password=" xs_pys@7y895b "  -R -E -h localhost --socket=/usr/local/mysql/mysql.sock --skip-opt --single-transaction --flush-logs --master-data=2 --add-drop-table --create-option --quic

    k --extended-insert=false --set-charset --disable-keys --databases plocc_system  |gzip > plocc_system.${date}.sql.gz

    2,清理多余备份的脚本

    清除旧的备份脚本为:clear_old_backup.sh,大概思路为:

    (1)      一年前,保存每个月的1号和16号的备份集合,其它的删除掉(# 1 for one years ago, save 1/16 on every month, else clear )。

    (2)      六个月前,保存1号和11号和21号的备份集合,其它的删除掉(# 2 for 6 months ago, save 1/11/21 in a month)

    (3)      一个月前,每天保存6点钟的备份集合,其它的删除掉(# 3 for a month ago,save *063001.sq.gz on a day)

    (4)      三天前,保存6点钟和18点钟的备份集合,其它的删除掉(# 4 for 3 days ago, save 063001.sql.gz  and 183001.sql.gz)

    脚本clear_old_backup.sh为:

    d3=`date '+%Y-%m-%d %H:%M:%S'`

    d2=`date '+%Y-%m-%d'`

    logfile=/data/mysql/backup/scripts/clear_old_backup.log

    old_backupfile=/data/mysql/backup/scripts/old_backupfile_$d2.csv

    cd /data/mysql/backup/data

    echo "" >> $logfile

    echo "-- $d3 begin... --" >>  $logfile

    # 1 for one years ago, save 1/16 on every month, else clear ,

    find . -mtime +360 -name "*.sql.gz" |grep -v "01063001.sql.gz" >> $old_backupfile;

    # 2 for 6 months ago, save 1/11/21 in a month

    find . -mtime +180 -name "*.sql.gz" |grep -v "1063001.sql.gz"   >> $old_backupfile;

    # 3 for a month ago,save *063001.sq.gz on a day

    find . -mtime +30 -name "*.sql.gz" |grep -v "063001.sql.gz"   >> $old_backupfile;

    # 4 for 3 days ago, save 063001.sql.gz  and 183001.sql.gz

    find . -mtime +3 -name "*.sql.gz" |grep -v "063001.sql.gz" |grep -v "183001.sql.gz"  >> $old_backupfile;                                      

    # 5 begin clear

    find /mnt/resource -mtime +5 -name "*.sql.gz" -exec rm -rf {}  ;

    #6 save the clear sql.gz to a temp directory

    for i in `cat $old_backupfile`; do

             echo "-- $i -- is cleared."

             mv $i /mnt/resource/

    done

    d4=`date '+%Y-%m-%d %H:%M:%S'`

    echo "-- $d4 end... --" >>  $logfile

    echo "" >> $logfile

    PS:本来这里是准备采用find . -mtime +180 -name "*.sql.gz" |grep -v "1063001.sql.gz"-exec  rm -rf {}  ;检索完后直接rm删除掉的,但是由于find后使用grep报错不识别{},所以折衷采用了一个方案,将检索到的文件保存在一个临时文件old_backupfile_$d2.csv里面,然后遍历old_backupfile_$d2.csv文件去mv或者rm操作等,find grep exec报错如下:

    [root@db1 ~]# find . -mtime +180 -name "*.sql.gz" |grep -v "1063001.sql.gz" -exec  rm -rf {}  ;                                      

    grep: {}: No such file or directory

    [root@db1 ~]#

    3,crontab定时任务

    使用crontab 建立定时任务,每天进行备份和清理工作,让db服务器自动进行。

    [root@db_master_2 ~]# crontab -l

    20 1 * * * sh /data/mysql/backup/scripts/clear_old_backup.sh                                       

    30 */6 * * * sh /data/mysql/backup/scripts/backup_full.sh

    [root@db_master_2 ~]#

    4,后续扩展问题

    简单的备份做好了,简单的旧备份集合清理也搞定了,但是后续还可以再多做些事情,更加完善一些:

    (1)      email通知,备份成功或者失败后,邮件通知

    (2)      将备份集合copy一份到文件服务器

    (3)      自动检查数据库备份的有效性

     
     
  • 相关阅读:
    NSPredicate的用法、数组去重、比较...
    CocoaPods安装和使用教程
    UITableView学习笔记
    Linux dpkg 命令
    Linux rpm 软件包管理命令
    Linux chmod 文件权限命令
    Linux vi 命令
    分库分表背后那些事儿
    Spring Cloud Feign原理及性能
    linux "No space left on device" 磁盘空间解决办法
  • 原文地址:https://www.cnblogs.com/moss_tan_jun/p/5745991.html
Copyright © 2011-2022 走看看