mysql_mysqldump_backup.sh脚本代码:
# Author: laizhiyuan# Date: 20190915# Desc: Timed online logic backup MySQL By mysqldump cmd#!/bin/bash# 备份目的地IPBACK_DEST_IP=xx.xx.xx.xx# 备份目的地端口BACK_DEST_PORT=22# 备份目的地用户BACK_DEST_USER=root# 目的地备份目录BACK_DEST_DIR=/opt/backup/mysql/logic/full# 本地备份目录BACK_DIR=/opt/backup/mysql/logic/full# 脚本工作目录WORK_DIR=/tmp# mysql工作目录MYSQL_BASEDIR=/usr/local/mysql# mysqldump命令参数MYSQLDUMP_HOST=localhostMYSQLDUMP_PORT=3306MYSQLDUMP_USER=root# 检查目录和环境function check_mkdir_and_env(){test ! -d $BACK_DIR && mkdir -p $BACK_DIR || echo "" > dev/nullssh -p $BACK_DEST_PORT $BACK_DEST_USER@$BACK_DEST_IP "test ! -d $BACK_DEST_DIR && mkdir -p $BACK_DEST_DIR || echo ''"# 导出环境变量export MYSQL_HOME=$MYSQL_BASEDIRPATH=$PATH:$MYSQL_HOME/binexport PATH}function backup(){# 备份TIME_DIR=`date +%Y-%m-%d_%H-%M-%S`mysqldump -h$MYSQLDUMP_HOST -P$MYSQLDUMP_PORT -u$MYSQLDUMP_USER --single-transaction --flush-logs -h$MYSQLDUMP_HOST --master-data=2 --routines --triggers --flush-privileges --default-character-set=utf8 --all-databases > $BACK_DIR/$TIME_DIR.sql || exit 2# 压缩tar -zcvf $TIME_DIR.tar.gz $BACK_DIR/$TIME_DIR.sql# 发送到远程机子scp -P $BACK_DEST_PORT -r $TIME_DIR.tar.gz $BACK_DEST_USER@$BACK_DEST_IP:$BACK_DEST_DIR/ || exit 2# 清除归档rm -rf $TIME_DIR.tar.gz}# 清空本地所有备份function cleanup_local(){rm -rf $BACK_DIR/*}# 清空本地和远程机子所有备份,一般调试时使用,正常情况下慎用!function cleanup_all(){cleanup_localssh -p $BACK_DEST_PORT $BACK_DEST_USER@$BACK_DEST_IP "rm -rf $BACK_DEST_DIR"}# 进入工作目录cd $WORK_DIR# 检查目录和环境check_mkdir_and_env# 根据参数执行函数if [ "$1" = 'cleanup_local' ]; thencleanup_localelif [ "$1" = 'cleanup_all' ]; thencleanup_allelif [ "$1" = 'backup' ]; thenbackupelseecho "You must enter parameters backup or cleanup_local or cleanup_all"exit 2fi
执行方式:
# 备份sh mysql_mysqldump_backup.sh backup# 清空本地测试数据sh mysql_mysqldump_backup.sh cleanup_local# 清空本地和远程机子测试数据sh mysql_mysqldump_backup.sh cleanup_all
mysql_mysqlbinlog_backup.sh脚本代码:
# Author: laizhiyuan# Date: 20190915# Desc: Online incremental backup of binary logs#!/bin/bash# 备份目的地IPBACK_DEST_IP=xx.xx.xx.xx# 备份目的地端口BACK_DEST_PORT=22# 备份目的地用户BACK_DEST_USER=root# 备份目的地备份目录BACK_DEST_DIR=/opt/backup/mysql/binlog# 本地备份目录BACK_DIR=/opt/backup/mysql/binlog# 二进制日志文件前缀BINLOG_PRE=mysql-bin# 二进制日志目录BINLOG_DIR=/usr/local/mysql/data# 二进制日志编号文件名称BINLOG_NUMBER_FILE_NAME=mysql-bin.index# 二进制日志编号记录文件BINLOG_NUMBER_FILE=$BINLOG_DIR/$BINLOG_NUMBER_FILE_NAME# 最后一次备份的二进制日志编号记录文件LAST_BACK_BINLOG_NUMBER_FILE=$BACK_DIR/mysql-bin.index# 脚本工作目录WORK_DIR=/tmp# 检查目录和环境function check_mkdir_and_env(){test ! -d $BACK_DIR && mkdir -p $BACK_DIR || echo "" > dev/nullssh -p $BACK_DEST_PORT $BACK_DEST_USER@$BACK_DEST_IP "test ! -d $BACK_DEST_DIR && mkdir -p $BACK_DEST_DIR || echo ''"# 导出环境变量export MYSQL_HOME=$MYSQL_BASEDIRPATH=$PATH:$MYSQL_HOME/binexport PATH}# 备份function backup(){# 时间作为备份目录前缀TIME_DIR_PRE=`date +%Y-%m-%d_%H-%M-%S_`# 本次备份文件编号上限值,本次备份<=上限值,截取000001格式MAX_NUMBER=`less $BINLOG_NUMBER_FILE | awk 'END {print}' | sed 's/.\/mysql-bin.//g'`# 滚动前先备份下mysql-bin.index文件cp $BINLOG_NUMBER_FILE $BACK_DIR/$TIME_DIR_PRE$BINLOG_NUMBER_FILE_NAME# 滚动日志mysql -e "flush logs";# 本次备份文件编号下限值,本次备份>=下限值,截取000001格式MIN_NUMBER="000000"if [ -f $LAST_BACK_BINLOG_NUMBER_FILE ]; then# 上一次备份最大编号,截取000001格式MIN_NUMBER=`less $LAST_BACK_BINLOG_NUMBER_FILE | awk 'END {print}' | sed 's/.\/mysql-bin.//g'`fi# 循环所有二进制日志文件for binlog_file in `ls $BINLOG_DIR | grep "$BINLOG_PRE*"`do# 截取为000001格式NOW_BINLOG_NUMBER=`echo $binlog_file | sed 's/mysql-bin.//g'`# 排除mysql-bin.index文件if [ "$binlog_file" = "$BINLOG_NUMBER_FILE_NAME" ]; thencontinuefi# 判断文件编号>=下限值test "$NOW_BINLOG_NUMBER" -ge "$MIN_NUMBER" && IS_BACK="ok" || IS_BACK="no"if [ "$IS_BACK" = "ok" ]; then# 判断文件编号<=上限值test "$NOW_BINLOG_NUMBER" -le "$MAX_NUMBER" && IS_BACK="ok" || IS_BACK=“no”if [ "$IS_BACK" = "ok" ]; then# 备份动作cp $BINLOG_DIR/$binlog_file $BACK_DIR/$TIME_DIR_PRE$binlog_filefifidone# 删除上次备份留下的编号文件rm -rf $BACK_DIR/$BINLOG_NUMBER_FILE_NAME# 发送本次增量备份到远程机子scp -P $BACK_DEST_PORT -r $BACK_DIR/* $BACK_DEST_USER@$BACK_DEST_IP:$BACK_DEST_DIR/# 清空备份目录rm -rf $BACK_DIR/*# 更新下次备份文件编号下限值cp $BINLOG_NUMBER_FILE $BACK_DIR/$BINLOG_NUMBER_FILE_NAME}# 清空本地所有备份function cleanup_local(){rm -rf $BACK_DIR/*}# 清空本地和远程机子所有备份,一般调试时使用,正常情况下慎用!function cleanup_all(){cleanup_localssh -p $BACK_DEST_PORT $BACK_DEST_USER@$BACK_DEST_IP "rm -rf $BACK_DEST_DIR"}# 进入工作目录cd $WORK_DIR# 检查目录和环境check_mkdir_and_env# 根据参数执行函数if [ "$1" = 'cleanup_local' ]; thencleanup_localelif [ "$1" = 'cleanup_all' ]; thencleanup_allelif [ "$1" = 'backup' ]; thenbackupelseecho "You must enter parameters backup or cleanup_local or cleanup_all"exit 2fi
执行方式:
# 备份sh mysql_mysqlbinlog_backup.sh backup# 清空本地测试数据sh mysql_mysqlbinlog_backup.sh cleanup_local# 清空本地和远程机子测试数据sh mysql_mysqlbinlog_backup.sh cleanup_all
文章转载自Java软件编程之家,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




