• MySQL备份


    全量备份

    全量备份脚本db_dbname_back_full.sh

    #!/bin/bash
    # mysql数据库全量备份
     
    # ######Database info
    #用户名
    DB_USER=""
    #连接密码
    DB_PASS=""
    #数据库地址
    DB_HOST="localhost"
    #数据库名称
    DB_NAME=""
    #待备份的表,不写表示备份整库
    DB_TABLE="" 
    
    # ######Others info
    #mysql安装目录
    MYSQL_HOME="/usr/local/mysql"
    #mysql bin目录
    BIN_DIR="$MYSQL_HOME/bin"
    #备份文件存放目录
    BACK_DIR="$MYSQL_HOME/backup"
    #按时间格式进行备份
    DATE=`date +%Y%m%d_%H%M%S`
    
    # ######创建相应的文件夹
    if [[ ! -d "$BACK_DIR" ]]; then
      mkdir $BACK_DIR
    fi
    if [[ ! -d "$BACK_DIR/$DB_NAME" ]]; then
      mkdir $BACK_DIR/$DB_NAME
    fi
     
    # ######数据备份
    $BIN_DIR/mysqldump --opt -u$DB_USER -p$DB_PASS -h$DB_HOST $DB_NAME $DB_TABLE > $BACK_DIR/$DB_NAME/db_backup_$DATE.sql
    #删除30天前的备份数据(-mtime +3 表示3天前 -mmin +3 表示3分钟前)
    find $BACK_DIR/$DB_NAME -name "db_backup_*.sql" -type f -mtime +30 -exec rm {} \; > /dev/null 2>&1
    
    # ######数据备份并压缩(为节省空间,可以使用压缩的方式备份)
    #如果该数据库的用户没有分配锁表的权限,则备份会报错 when using LOCK TABLES,需加入--skip-lock-tables
    #$BIN_DIR/mysqldump --opt -u$DB_USER -p$DB_PASS -h$DB_HOST $DB_NAME --skip-lock-tables $DB_TABLE | gzip > $BACK_DIR/$DB_NAME/db_backup_$DATE.sql.gz
    #根据情况与上面这条命令二选一即可
    #$BIN_DIR/mysqldump --opt -u$DB_USER -p$DB_PASS -h$DB_HOST $DB_NAME $DB_TABLE | gzip > $BACK_DIR/$DB_NAME/db_backup_$DATE.sql.gz
    #删除30天前的备份数据(-mtime +3 表示3天前 -mmin +3 表示3分钟前)
    #find $BACK_DIR/$DB_NAME -name "db_backup_*.gz" -type f -mtime +30 -exec rm {} \; > /dev/null 2>&1
    View Code

    1)将脚本中的mysql数据库安装目录,数据库连接用户名、密码和数据库名等换成自己的即可,备份保留时间自行根据需要调整。

    2)将脚本文件上传至linux服务器中并授权chmod +x db_dbname_back.sh,开启定时任务执行此脚本。crontab –e添加执行计划并重启systemctl restart crond.service

    增量备份

    准备工作

    增量备份需要开始binlog日志,修改mysql的配置文件,并重启mysql

    查看是否修改成功,登录mysql输入show variables like ‘%log_bin%’;

    备份工作

    全量备份脚本db_dbname_back_add.sh

    #!/bin/bash
    # mysql数据库增量备份
    
    #用户名
    DB_USER=""
    #连接密码
    DB_PASS=""
    #数据库地址
    DB_HOST="localhost"
    
    #mysql安装目录
    MYSQL_HOME="/usr/local/mysql"
    #二进制的存放路径(在my.conf里指定)
    BIN_DIR="/usr/local/mysql/logs"
    #只要开启二进制,就会在存放二进制的目录里产生,以二进制为名.index文件
    BIN_FILE=$BIN_DIR/mysql-bin.index
    
    #增量备份时复制二进制文件(mysql-bin.00000*到备份的目录里
    BACK_DIR="$MYSQL_HOME/backup"
    #增量备份日志
    LOG_FILE="/$BACK_DIR/backadd.log"
    # ######创建相应的文件夹
    if [[ ! -d "$BACK_DIR" ]]; then
      mkdir $BACK_DIR
    fi
    
    #这个是用于产生新的mysql-bin.00000*文件
    /$MYSQL_HOME/bin/mysqladmin -u$DB_USER -p$DB_PASS -h$DB_HOST flush-logs
    #统计以二进制为名.index文件里的二进制文件
    Counter=`wc -l $BIN_FILE |awk '{print $1}'`
    
    #开始循环,这个for循环用于比对$Counter,$NextNum这两个值来确定文件是不是存在或最新的
    NextNum=0
    for file in `cat $BIN_FILE`
    do
        #basename用于截取mysql-bin.00000*文件名,去掉./mysql-bin.000005前面的./
        base=`basename $file`
        NextNum=`expr $NextNum + 1`
        #如果NextNum 等于 统计的统计的二进制数,就输入跳过
        if [ $NextNum -eq $Counter ]
        then
            echo $base skip! >> $LOG_FILE
        else
            #否则就判断备份目录$BACK_DIR下有没有二进制文件$dase
            dest=$BACK_DIR/$base
    
            if(test -e $dest)
            #test -e用于检测目标文件是否存在,存在就写存在到$LOG_FILE去
            then
                echo $base exist! >> $LOG_FILE
            else
                #如果没有就复制二进制到备份目录$BACK_DIR里
                cp $BIN_DIR/$base $BACK_DIR
                echo $base copying >> $LOG_FILE
             fi
         fi
    done
    #最后将结束时间追加到 备份日志里
    echo `date +"%Y年%m月%d日 %H:%M:%S"` $Next Bakup succ! >> $LOG_FILE
    View Code

    1) 将脚本中的mysql数据库安装目录,二进制文件存放目录,数据库连接用户名、密码和数据库名等换成自己的即可。

    2) 跟全量脚本一样添加定时任务即可。

    注:一般全量脚本可以设置一周一次,增量脚本每天一次,具体看业务需要。

    #每个星期日凌晨2:00全量备份
    0 2 * * 0 /bin/bash -x /全量脚本路径/xx_full.sh >/dev/null 2>&1

    #周一到周六凌晨2:00增量备份
    0 2 * * 1-6 /bin/bash -x /增量脚本路径/xx_add.sh >/dev/null 2>&1

    数据恢复

    1、 先恢复全量备份数据

    mysql –uroot –p --database=数据库名 < 全量备份文件.sql

    2、 追加增量备份数据

    mysqlbinlog /xx/mysql-bin.00000*) | mysql -uroot -p;

  • 相关阅读:
    Python学习笔记(四)多进程的使用
    Python学习笔记(三)多线程的使用
    windows无法安装msi文件
    标签传播算法
    信息论基础
    模块度Q
    HTTPS开发(SSL--用Tomcat服务器配置https双向认证)
    oracle 优化
    eclipse 界面开发--windowbuilder
    vba 读取数据库
  • 原文地址:https://www.cnblogs.com/54hsh/p/15918387.html
Copyright © 2020-2023  润新知