• Linux下Mysql每天自动备份


    新建目录

    mkdir -p /data/mysqlbak/data
    mkdir -p /data/mysqlbak/scripts
    mkdir -p /data/mysqlbak/logs

    创建备份脚本

    cd /data/mysqlbak/scripts
    vi backup.sh
    
    #!/bin/bash
    
    #备份目录
    BACKUP_ROOT=/data/mysqlbak
    BACKUP_FILEDIR=$BACKUP_ROOT/data
    
    #当前日期
    DATE=$(date +%Y%m%d)
    
    ######备份######
    
    #查询所有数据库
    #-uroot -p123456表示使用root账号执行命令,且root账号的密码为:123456
    DATABASES=$(mysql -uroot -p123456 -e "show databases" | grep -Ev "Database|sys|information_schema|performance_schema|mysql")
    #循环数据库进行备份
    for db in $DATABASES
    do
    echo
    echo ----------$BACKUP_FILEDIR/${db}_$DATE.sql.gz BEGIN----------
    mysqldump -uroot -p123456 --default-character-set=utf8 -q --lock-all-tables --flush-logs -E -R --triggers -B ${db} | gzip > $BACKUP_FILEDIR/${db}_$DATE.sql.gz
    echo ----------$BACKUP_FILEDIR/${db}_$DATE.sql.gz COMPLETE----------
    echo
    done
    
    echo "done"

    设置脚本的执行权限

    chmod 777 backup.sh

    将备份操作加入到定时任务(每天凌晨2点定时执行)

    crontab -e
    
    00 2 * * * /data/mysqlbak/scripts/backup.sh > data/mysqlbak/logs/backup.log 2>&1

    创建删除脚本(定时删除7天前的备份数据)

    vi backup_clean.sh
    
    #!/bin/bash
    echo ----------CLEAN BEGIN----------
    find /data/mysqlbak/data -mtime +7 -name "*.gz" -exec rm -rf {} ;
    echo ----------CLEAN COMPLETE----------

    设置脚本的执行权限

    chmod 777 backup_clean.sh

    将删除操作加入到定时任务(每天凌晨1点定时执行)

    00 1 * * * /data/mysqlbak/scripts/backup_clean.sh > /data/mysqlbak/logs/backup_full_clean.log 2>&1

    查看定时任务

    crontab -l

    如果需要备份到另外一台机器,可以备份完scp到另外一台机器

    首先服务器需要安装export,yum安装:

    yum  install expect

    或者源码安装,参考

    https://www.cnblogs.com/operationhome/p/9154055.html

    脚本修改:

    #!/bin/bash
    
    #备份目录
    BACKUP_ROOT=/data/mysqlbak
    BACKUP_FILEDIR=$BACKUP_ROOT/data
    
    #当前日期
    DATE=$(date +%Y%m%d)
    
    ######备份######
    
    #查询所有数据库
    #-uroot -p123456表示使用root账号执行命令,且root账号的密码为:123456
    DATABASES=$(mysql -uroot -p123456 -e "show databases" | grep -Ev "Database|sys|information_schema|performance_schema|mysql")
    #循环数据库进行备份
    for db in $DATABASES
    do
    echo
    echo ----------$BACKUP_FILEDIR/${db}_$DATE.sql.gz BEGIN----------
    mysqldump -uroot -p123456 --default-character-set=utf8 -q --lock-all-tables --flush-logs -E -R --triggers -B ${db} | gzip > $BACKUP_FILEDIR/${db}_$DATE.sql.gz
    echo ----------$BACKUP_FILEDIR/${db}_$DATE.sql.gz COMPLETE----------
    echo ----------scp 226  begin----------
    expect -c "
        spawn scp -r /data/mysqlbak/data/${db}_$DATE.sql.gz root@xxx.xxx.xxx.226:/data/mysqlbak/data225/
        expect {
            "*assword" {set timeout 300; send "此处是scp的密码
    "; exp_continue;}
            "yes/no" {send "yes
    ";}
        }
    expect eof"
    echo ----------scp 226  end----------
    echo
    done
    
    echo "done"
  • 相关阅读:
    python类库31[正则表达式匹配实例]
    Mysql百万级数据迁移实战笔记
    面试官:一千万数据,怎么快速查询?
    为什么MySQL不建议使用NULL作为列默认值?
    Redis各个数据类型最大存储量
    Rabbitmq延迟队列实现定时任务
    PHPstorm批量修改文件换行符CRLF为LF
    使用SeasLog打造高性能日志系统
    协程编程注意事项
    Rabbitmq 安装过程中常见问题(亲测可行)
  • 原文地址:https://www.cnblogs.com/blazeZzz/p/10881297.html
Copyright © 2020-2023  润新知