zoukankan      html  css  js  c++  java
  • 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"
  • 相关阅读:
    Ansible 详细用法说明(一)
    Puppet基于Master/Agent模式实现LNMP平台部署
    推荐-zabbix原理篇
    Centos 6.x 安装Nagios及WEB管理nagiosql实现windows及linux监控指南
    CentOS 7下安装Logstash ELK Stack 日志管理系统(下)
    【Python基础学习二】定义变量、判断、循环、函数基本语法
    【Python基础学习一】在OSX系统下搭建Python语言集成开发环境 附激活码
    内联函数
    2016 科大讯飞校招研发一面二面 10.13
    hiho #1151 : 骨牌覆盖问题·二 (递推,数论)
  • 原文地址:https://www.cnblogs.com/blazeZzz/p/10881297.html
Copyright © 2011-2022 走看看