• 使用shell脚本实现定时备份mysql数据库


    mysql本身可以从日志文件恢复数据,其原理是日志文件会记录指定时间段的sql操作记录。但我们不可能存储从数据库安装到当前的日志文件,日志早爆炸了,后面的日志会覆盖之前的日志,所以,想从日志恢复完整数据,那是不可能的。而通过自己备份数据库,再从日志中找到备份时间到当前时间的更改记录,就可以恢复所有数据。

    本地备份与异地备份

    下面的脚本生成指定数据库备份,打包压缩,并删除10天前备份。XXX_backup.sh

    #创建脚本
    touch XXX_backup.sh
    
    #增加可执行权限
    chmod +x XXX_backup.sh
    

    XXX_backup.sh:

    #mysql 备份XXX数据库脚本
    #保留最近10天备份
    #备份目录
    backupDir=/home/backup/database
    #mysqlDump
    mysqldump=mysqldump
    #ip
    host=MYSQL服务端IP
    #用户名
    username=root
    #密码
    password=MYSQL数据库密码
    #今天日期
    today=`date +%Y%m%d`
    #十backupDir=天前的日期
    timeTenDayAgo=`date -d -10day +%Y%m%d`
    #备份的数据库
    database=XXX
    
    #如果文件夹不存在则创建
    if [ ! -d $backupDir ];
    then
        mkdir -p $backupDir;
    fi
    
    echo '开始备份'$database
    $mysqldump -h$host -u$username -p$password $database | gzip > $backupDir/$database-$today.sql.gz
    echo '成功备份'$database'到'$backupDir/$database-$today.sql.gz
    if [ ! -f "$backupDir/$database-$timeTenDayAgo.sql.gz" ];
    then
            echo '10天前备份不存在,无需删除'
    else
            rm -f $backupDir/$database-$timeTenDayAgo.sql.gz
            echo '删除10天前备份文件'$backupDir/$database-$timeTenDayAgo.sql.gz
    fi
    

    shell脚本加到crontab任务调度:

    加入定时任务: crontab -e,每天1点半执行一次:
    30 1 * * * /home/backup/XXX_backup.sh
    
    最后再重载cron服务,cd到对应的目录:
    service cron reload
    

    其中crontab是linux系统的定时任务调度器,以下是一些常用的命令:

    编辑crontab
    crontab -e
    
    列出crontab任务
    crontab -l
    
    清空crontab
    crontab -r
    
    查看或者启动重载crontab服务
    --启动crontab服务
    service crond(或cron) start
    
    --重启crontab服务
    service crond(或cron) restart
    
    --关闭crontab服务
    service crond(或cron) stop
    
    --重载crontab文件
    service crond(或cron) reload
    
    --查看crontab状态
    service crond(或cron) status
    

    异地备份配置

    mysql服务器ip:192.168.0.10
    
    备份服务器ip:192.168.0.11
    
    数据库名称:db_product
    
    思路:在mysql服务器A上创建一个用户分配权限专门用于数据库备份,A服务器可以是数据库集群中的slave之一。找一个磁盘宽裕的服务器B,安装mysql的客户端。
    
    在服务器B上执行mysqldump命令备份数据库。
    
    只安装mysql客户端的教程:https://www.cnblogs.com/xxoome/p/8313453.html
    
    #创建用户,用户名为【backupuser】并限制客户端连接ip,【192.168.0.11】为B服务器的ip
    CREATE USER 'backupuser'@'192.168.0.11' IDENTIFIED BY 'pwd';
    
    #授予用户权限,限制了可以访问的数据库
    GRANT ALL ON db_product.* TO 'backupuser'@'192.168.0.11';
    flush privileges;
    
    #其他同理
    

    参考以下原文:
    https://www.cnblogs.com/xxoome/p/10027945.html

    https://www.pocketdigi.com/20170113/1547.html

  • 相关阅读:
    xpath 获取表单的值
    更改Linux语言环境
    推送证书p12文件转换成pem的命令
    隐藏响应的server,X-Powered-By
    多维数组自定义排序
    Docker:Windows7下使用docker toolbox(1)
    FluentScheduler:开源轻量级定时任务调度架构
    IdentityServer3:.NET开源OpenID和OAuth2架构
    .NET拾忆:FormData文件上传
    正则表达式:各类数值
  • 原文地址:https://www.cnblogs.com/hong01072/p/14884932.html
Copyright © 2020-2023  润新知