zoukankan      html  css  js  c++  java
  • centos7 mysql自动备份

    MySQL自动备份shell脚本

     

    在数据库的日常维护工作中,除了保证业务的正常运行以外,就是要对数据库进行备份,以免造成数据库的丢失,从而给企业带来重大经济损失。通常备份可以按照备份时数据库状态分为热备和冷备,按照备份数据库文件的大小分为增量备份、差异备份和全量备份.一种全量备份的方法,来实现定时备份数据到mysql脚本文件,并且支持过期删除。

     

    1、新建shell脚本

    复制代码
    vi /opt/mysqlBackup.sh
    
    #!/bin/bash
     
    # 以下配置信息请自己修改
    mysql_user="USER" #MySQL备份用户
    mysql_password="PASSWORD" #MySQL备份用户的密码
    mysql_host="localhost"
    mysql_port="3306"
    mysql_charset="utf8" #MySQL编码
    backup_db_arr=("db1" "db2") #要备份的数据库名称,多个用空格分开隔开 如("db1" "db2" "db3")
    backup_location=/opt/mysql #备份数据存放位置,末尾请不要带"/",此项可以保持默认,程序会自动创建文件夹
    expire_backup_delete="ON" #是否开启过期备份删除 ON为开启 OFF为关闭
    expire_days=3 #过期时间天数 默认为三天,此项只有在expire_backup_delete开启时有效
     
    # 本行开始以下不需要修改
    backup_time=`date +%Y%m%d%H%M` #定义备份详细时间
    backup_Ymd=`date +%Y-%m-%d` #定义备份目录中的年月日时间
    backup_3ago=`date -d '3 days ago' +%Y-%m-%d` #3天之前的日期
    backup_dir=$backup_location/$backup_Ymd #备份文件夹全路径
    welcome_msg="Welcome to use MySQL backup tools!" #欢迎语
     
    # 判断MYSQL是否启动,mysql没有启动则备份退出
    mysql_ps=`ps -ef |grep mysql |wc -l`
    mysql_listen=`netstat -an |grep LISTEN |grep $mysql_port|wc -l`
    if [ [$mysql_ps == 0] -o [$mysql_listen == 0] ]; then
    echo "ERROR:MySQL is not running! backup stop!"
    exit
    else
    echo $welcome_msg
    fi
     
    # 连接到mysql数据库,无法连接则备份退出
    mysql -h$mysql_host -P$mysql_port -u$mysql_user -p$mysql_password <<end
    use mysql;
    select host,user from user where user='root' and host='localhost';
    exit
    end
     
    flag=`echo $?`
    if [ $flag != "0" ]; then
    echo "ERROR:Can't connect mysql server! backup stop!"
    exit
    else
    echo "MySQL connect ok! Please wait......"
    # 判断有没有定义备份的数据库,如果定义则开始备份,否则退出备份
    if [ "$backup_db_arr" != "" ];then
    #dbnames=$(cut -d ',' -f1-5 $backup_database)
    #echo "arr is (${backup_db_arr[@]})"
    for dbname in ${backup_db_arr[@]}
    do
    echo "database $dbname backup start..."
    `mkdir -p $backup_dir`
    `mysqldump -h$mysql_host -P$mysql_port -u$mysql_user -p$mysql_password $dbname --default-character-set=$mysql_charset | gzip > $backup_dir/$dbname-$backup_time.sql.gz`
    flag=`echo $?`
    if [ $flag == "0" ];then
    echo "database $dbname success backup to $backup_dir/$dbname-$backup_time.sql.gz"
    else
    echo "database $dbname backup fail!"
    fi
     
    done
    else
    echo "ERROR:No database to backup! backup stop"
    exit
    fi
    # 如果开启了删除过期备份,则进行删除操作
    if [ "$expire_backup_delete" == "ON" -a "$backup_location" != "" ];then
    #`find $backup_location/ -type d -o -type f -ctime +$expire_days -exec rm -rf {} ;`
    `find $backup_location/ -type d -mtime +$expire_days | xargs rm -rf`
    echo "Expired backup data delete complete!"
    fi
    echo "All database backup success! Thank you!"
    exit
    fi
    复制代码

    2、修改shell脚本属性,赋予执行权限

    chmod 600 /opt/mysqlBackup.sh
    chmod +x /opt/mysqlBackup.sh

    3、定时执行脚本

    ================方法1============================

    Crontab命令的格式为:crontab –l|-r|-e|-i [username],

    其参数含义如表一: 参数名称   含义    示例
    -l 显示用户的Crontab文件的内容
    crontabl –l 

    -i 删除用户的Crontab文件前给提示
    crontabl -ri 

    -r 
    从Crontab目录中删除用户的Crontab文件

    crontabl -r 
    -e 

    编辑用户的Crontab文件
    crontabl -e 

    01   *   *   *   *     root run-parts /etc/cron.hourly         //每小时执行/etc/cron.hourly内的脚本  
    02   4   *   *   *     root run-parts /etc/cron.daily           //每天执行/etc/cron.daily内的脚本  
    22   4   *   *   0     root run-parts /etc/cron.weekly         //每星期执行 /etc/cron.weekly内的脚本  
    42   4   1   *   *     root run-parts /etc/cron.monthly       //每月去执行/etc/cron.monthly内的脚本  


    =====================方法2=============================================
    vi /etc/crontab

    添加

    00 03 * * * /root/mysqlBackup.sh

    分 时

     修改重新载入配置

    安装crontab
    yum install crontabs

    说明:
    /sbin/service crond start //启动服务
    /sbin/service crond stop //关闭服务
    /sbin/service crond restart //重启服务
    /sbin/service crond reload //重新载入配置
    查看crontab服务状态:service crond status
    手动启动crontab服务:service crond start
    查看crontab服务是否已设置为开机启动,执行命令:ntsysv
    加入开机自动启动:
    chkconfig crond on


    vi /var/spool/mail/root 可查看脚本执行日志

    4、MySQL恢复


    mysql -u username -p databse < backup.sql

                   用户名           数据库名    备份sql

  • 相关阅读:
    tyvj 1031 热浪 最短路
    【bzoj2005】 [Noi2010]能量采集 数学结论(gcd)
    hdu 1394 Minimum Inversion Number 逆序数/树状数组
    HDU 1698 just a hook 线段树,区间定值,求和
    ZeptoLab Code Rush 2015 C. Om Nom and Candies 暴力
    ZeptoLab Code Rush 2015 B. Om Nom and Dark Park DFS
    ZeptoLab Code Rush 2015 A. King of Thieves 暴力
    hdoj 5199 Gunner map
    hdoj 5198 Strange Class 水题
    vijos 1659 河蟹王国 线段树区间加、区间查询最大值
  • 原文地址:https://www.cnblogs.com/mrcln/p/10177461.html
Copyright © 2011-2022 走看看