• 【MySQL系列】- MySQL自动备份详解


    【MySQL系列】- MySQL自动备份详解


    在这里插入图片描述

    一、需求背景

    数据库在一个系统中处于非常重要的地位,是整个系统底层也是核心,当数据库被误删会造成非常严重的失误,所有数据库备份可以说是重中之重。本文将梳理Mysql在windows与Liunx中的备份方法。

    二、Windows mysql自动备份方法

    2.1 复制date文件夹备份

    • 实验备份环境
    1. MySQL 安装位置:D:\Program Files\MySQL
    2. 数据库名称为:GoyeerDB
    3. 数据库备份目的地:F:\Mysql\db_bak\
    • 创建bat直接备份脚本
    *******************************Code Start*****************************
    net stop mysql
    xcopy D:\Program Files\MySQL\data\GoyeerDB\*.* F:\Mysql\db_bak\goyeerdb_bak\%date:~0,10%\ /S /I
    net start mysql
    *******************************Code End *****************************
    
    • 1
    • 2
    • 3
    • 4
    • 5

    然后使用Windows的“计划任务”定时执行该批处理脚本即可。(例如:每天凌晨1点执行back_db.bat)
    解释:备份和恢复的操作都比较简单,完整性比较高,控制备份周期比较灵活,例如,用%date:0,10%。此方法适合有独立主机但对mysql没有管理经验的用户。缺点是占用空间比较多,备份期间mysql会短时间断开(例如:针对30M左右的数据库耗时5s左右),针对%date:0,10%的用法参考 .

    2 .2 mysqldump备份成sql文件

    • 创建mysqldump备份脚本
    rem *******************************Code Start*****************************
    @echo off
    set "Ymd=%date:~,4%%date:~5,2%%date:~8,2%"
    D:\Program Files\MySQL\bin\mysqldump --opt -u root --password=123456 GoyeerDB > F:\Mysql\goyeerdb_bak\goyeerdb_%Ymd%.sql
    @echo on
    rem *******************************Code End*******************************
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    将以上代码保存为backup_db.bat
    然后使用Windows的“计划任务”定时执行该脚本即可。(例如:每天凌晨2点执行back_db.bat)

    说明:此方法可以不用关闭数据库,并且可以按每一天的时间来名称备份文件。

    通过%date:5,2%来组合得出当前日期,组合的效果为yyyymmdd,date命令得到的日期格式默认为yyyy-mm-dd(如果不是此格式可以通过pause命令来暂停命令行窗口看通过%date:,20%得到的当前计算机日期格式),所以通过%date:5,2%即可得到日期中的第五个字符开始的两个字符,例如今天为2009-02-05,通过%date:5,2%则可以得到02。(日期的字符串的下标是从0开始的)

    2 .3 利用WinRAR对MySQL数据库进行定时备份

    对于MySQL的备份,最好的方法就是直接备份MySQL数据库的Data目录。下面提供了一个利用WinRAR来对Data目录进行定时备份的方法。

    首先当然要把WinRAR安装到计算机上。

    创建WinRAR备份脚本

    *******************************Code Start***************************
    net stop mysql
    c:\Program Files\winrar\winrar a -ag -k -r -s F:\Mysql\goyeerdb_bak\goyeerdb_%Ymd%.rar   D:\Program Files\MySQL\data\GoyeerDB\
    net start mysql
    *******************************Code End*****************************
    
    • 1
    • 2
    • 3
    • 4
    • 5

    保存,然后将文本文件的扩展名修改成CMD。进入控制面版,打开计划任务,双击“添加计划任务”。在计划任务向导中找到刚才的CMD文件,接着为这个任务指定一个运行时间和运行时使用的账号密码就可以了。 这种方法缺点是占用时间比较多,备份期间压缩需要时间,mysql断开比第一种方法更多的时间,但是对于文件命名很好。

    三、Linux Mysql自动备份

    3.1 查看磁盘空间情况

    既然是定时备份,就要选择一个空间充足的磁盘空间,避免出现因空间不足导致备份失败,数据丢失的恶果,推荐使用NAS做为备份存储。

    df -h  #查看磁盘空间
    
    • 1

    3.2 创建备份目录

    在有磁盘空间的目录上创建文件夹,下面例子已在/home文件夹下创建目录

    cd /home     #切换目录到home下
    mkdir backup #常见目录并进入backup
    cd backup
    
    • 1
    • 2
    • 3

    3.3 编写备份shell脚本

    语法:mysqldump -u数据库用户名 -p密码 数据库名称 > /路径/备份文件名.sql

    #!/bin/bash
    mysqldump -uroot -p123456 demo > /home/backup/demo_$(date +%Y%m%d_%H%M%S).sql  #按日期时间备份
    
    • 1
    • 2

    database_name_ ( d a t e + (date +%Y%m%d%H%M%S)为生成的备份文件名称,可自定义,这里文件名是数据库名 + 下划线 + 具体时间, (date+(date +%Y%m%d%H%M%S)可获取到当前日期,%Y %m %d %H %M %S 分别对应年、月、日、时、分、秒

    3.4 Shell压缩备份

    语法:mysqldump -u数据库用户名 -p密码 数据库名称 | gzip > /路径/备份文件名.sql.gz

    #!/bin/bash
    mysqldump -uusername -ppassword DatabaseName | gzip > /home/backup/DatabaseName_$(date +%Y%m%d_%H%M%S).sql.gz
    
    • 1
    • 2

    3.5 清除历史备份文件

    #!/bin/sh
    
    find /usr/local/backups -mtime +10 -name "*DatabaseName_*" -exec rm -rf {} \;
    
    • 1
    • 2
    • 3

    #删除七天之前的备份
    find $backup_dir -name $db_name".sql.gz" -type f -mtime +7 -exec rm -rf {} ; > /dev/null 2>&1
    #删除一分钟之前的备份
    find $backup_dir -name $db_name".sql.gz" -type f -mmin +1 -exec rm -rf {} ; > /dev/null 2>&1

    关键字说明

    -type f 表示查找普通类型的文件,f 表示普通文件,可不写
    -mtime +7 按照文件的更改时间来查找文件,+7表示文件更改时间距现在7天以前;如果是-mmin +7表示文件更改时间距现在7分钟以前
    -exec rm {} ; 表示执行一段shell命令,exec选项后面跟随着所要执行的命令或脚本,然后是一对{ },一个空格和一个\,最后是一个分号;
    /dev/null 2>&1 把标准出错重定向到标准输出,然后扔到/DEV/NULL下面去。通俗的说,就是把所有标准输出和标准出错都扔到垃圾桶里面;其中的& 表示让该命令在后台执行。

    3.6 添加计划任务

    执行命令:crontab -e

    */1 * * * * /home/backup/bkDatabaseName.sh
    
    • 1

    分 时 日 月 周 执行命令
    第 1 列 分钟 1~59,每分钟用 或者/1表示,整点分钟数为00或0
    第 2 列 小时 1~23(0 表示 0 点)
    第 3 列 日 1~31
    第 4 列 月 1~12
    第 5 列 星期 0~6(0 表示星期天)
    第 6 列 要运行的命令
    例子 :0 3 * * * /backup.sh,此命令表示在每天的凌晨三点执行一次脚本,可自行调整时间

    3.7 测试任务是否执行

    如果任务执行失败了,可以通过以下命令查看任务日志:

    tail -f /var/log/cron
    
    • 1

    四、参考链接

    1. https://blog.csdn.net/qq_32684319/article/details/86996369
    2. https://www.jianshu.com/p/be1e581acb8e
    3. https://www.cnblogs.com/taomylife/p/8022253.html
    4. https://blog.csdn.net/stonexmx/article/details/72974500
  • 相关阅读:
    学信息系统项目管理师第4版系列14_沟通管理
    HTML+CSS大作业【传统文化艺术耍牙15页】学生个人网页设计作品
    Magisk V26.3卡刷包APK最新版下载-支持payload.bin自动维补ROOT
    R语言-如何读写带分隔符的文件
    Spring Boot 配置多数据源
    最大似然估计和最小二乘法 含代码
    简单返回封装实体类(RespBean)
    bp利率最新消息是多少,bps利率是什么意思
    Service Worker原理
    python中的小tips
  • 原文地址:https://blog.csdn.net/songjianlong/article/details/133048006