zoukankan      html  css  js  c++  java
  • 12-2 MySQL数据库备份(分表)

    #!/bin/bash
    source /etc/profile
    
    DATE="$(date +%F_%H-%M-%S)"
    DB_IP="172.16.1.122"
    HOST="localhost"
    PORT="3306"
    USER="root"
    PASS="Liuchang@2020"
    BACKUP_DIR="/data/db_backup"
    [ ! -d $BACKUP_DIR ] && mkdir -p $BACKUP_DIR
    
    MYSQL_DUMP="mysqldump -h${HOST} -P${PORT} -u${USER} -p${PASS}"
    MYSQL_COMMAND="mysql -h${HOST} -P${PORT} -u${USER} -p${PASS}"
    DB_LIST="`$MYSQL_COMMAND -s -e "show databases;" 2>/dev/null |egrep -v "information_schema|performance_schema|sys|mysql"`"
    
    for DB in $DB_LIST; do
        BACKUP_DB_DIR="${BACKUP_DIR}/${DB}_${DATE}"
        [ ! -d $BACKUP_DB_DIR ] && mkdir -p $BACKUP_DB_DIR
        TABLE_LIST="$($MYSQL_COMMAND -s -e "use $DB;show tables;" 2>/dev/null)"
        for TABLE in $TABLE_LIST; do
            BACKUP_NAME="${BACKUP_DB_DIR}/${TABLE}.sql"
            if ! $MYSQL_DUMP $DB $TABLE -R --single-transaction --events --hex-blob --triggers --flush-privileges > $BACKUP_NAME 2>/dev/null; then
                echo "MySQL $DB_IP DATABASE $DB TABLE $BACKUP_NAME BACKUP FAILD" |mail -s "MySQL $DB_IP DATABASE $DB TABLE $TABLE BACKUP FAILD" 2504164765@qq.com
            fi
        done
    done
    
    
    ##############补充说明##########################
    # 主从复制时全备主库的命令
    # mysqldump -uroot -p'Liuchang@2020' -A -F -R --single-transaction --master-data=1 --events --hex-blob --triggers --flush-privileges | gzip > /tmp/mysql_master_20200821.sql.bak.gz
    
    # 普通备份参数:
    # -R: 转储存储的例程(功能和过程);
    # -E: --events:转储事件;
    # -A: 转储所有数据库, 这将与--databases以及所有已选择的数据库相同;
    # -B: 转储多个数据库,增加建库语句和use连接库的语句;
    # --hex-blob: 转储十六进制格式的二进制字符串(BINARY,VARBINARY,BLOB);
    # --triggers: 为每个转储的表转储触发器;
    # --flush-privileges: 转储mysql数据库后,发出FLUSH PRIVILEGES语句;
    # --single-transaction: 设置事务的隔离级别为可重复读(REPEATABLE READ),用于热备,只适用于MySQL InnoDB引擎。
    
    # 用于MySQL开启binlog时的参数:
    # -F: 开始转储之前刷新服务器中的日志文件;
    # --master-data=1: 备份中增加binlog日志文件名及对应的位置点,1不加注释,2加注释;
    
    # -d:没有行信息,只备份表结构,不备份表数据; Usage: -d <数据库> <表名称,多个表名称可用空格隔开>
    # -t:不要写表创建信息,只备份表数据,不备份表结构;Usage: -t <数据库> <表名称,多个表名称可用空格隔开>
    ################################################
  • 相关阅读:
    HyperV应用指南之4虚拟机管理[转]
    Windows Server 2003文件夹不能共享的解决办法【转】
    彻底了解DVD:从入门到精通(二)[转]
    HyperV应用指南之2--安装HyperV Server 2008 R2并配置远程管理[转]
    HyperV应用指南之HyperV应用基础[转]
    IIS7.5由于权限不足而无法读取配置文件的解决办法
    C# 十六进制字符串与数值类型之间转换(转)
    分享一个Winform下的分页控件[转]
    mysql的replace函数替换字符串功能简介
    聊聊.net程序设计——浅谈使用VS2010建模拓展(下)[转]
  • 原文地址:https://www.cnblogs.com/LiuChang-blog/p/14697967.html
Copyright © 2011-2022 走看看