签到成功

知道了

CNDBA社区CNDBA社区

利用Mysql-clone插件备份MySQL数据库脚本

2024-11-07 20:56 495 0 原创 mysql
作者: Anshen

!/bin/bash

export backup_home=/db_mysql/backup_mysql/backup/

获取当前日期时间

currdy=$(date +”%Y%m%d”)
currdt=$(date +”%Y%m%d_%H%M%S”)
myip=$(hostname -I | grep -oE ‘[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}’ | head -n 1)

定义路径和变量

export tgtbackup_file=$backup_home/backup${myip}_${currdy}_3306.tar.gzhttp://www.cndba.cn/redhat/article/131592

http://www.cndba.cn/redhat/article/131592

export tgtclone_dir=$backup_home/backup_data${currdy}http://www.cndba.cn/redhat/article/131592

export logfile=”$backuphome/logs/mysqlbackup${myip}_${currdy}_3306.log”http://www.cndba.cn/redhat/article/131592

export binlog_path=/db_mysql/bin_log/

export tgtbinlog_backup_file=$backup_home/backup_log${currdy}_3306_lastbinlog.tar.gz

设置MySQL连接参数

bkdb_login_bin=”mysql -Danshen -N -s”
localdb_login_bin=”mysql —login-path=dbadmin”

http://www.cndba.cn/redhat/article/131592

日志记录函数

mylog() {
if [ $# -eq 2 ]; then
log_cont=$1
step=$2
else
log_cont=$1
step=’’
fi
echo “$(date +’%Y%m%d %H:%M:%S’):${log_cont}” >>$logfile
echo “${log_cont}” | $bkdb_login_bin -e “insert into mysql_backup_log(mysql_ip,state,batchno,step) values(‘${myip}’,’${log_cont}’,’${currdy}’,’${step}’)”
}

退出函数

myexit() {
mylog “EXIT NOW” “STEP_EXIT”
exit 1
}

http://www.cndba.cn/redhat/article/131592

检查配置和环境

check_env() {
if [ ! -d “$backup_home” ]; then
mylog “Target backup_home:$backup_home not exists”
myexit
fi
}

检查Clone插件状态

check_clone_plugin() {
if $localdb_login_bin -N -s -e “select plugin_status from information_schema.plugins where plugin_name=’clone’” | grep -w ‘ACTIVE’ > /dev/null; then
mylog “Clone plugin already in ACTIVE status”
else
$localdb_login_bin -N -s -e “INSTALL PLUGIN clone SONAME ‘mysql_clone.so’”
if $localdb_login_bin -N -s -e “select plugin_status from information_schema.plugins where plugin_name=’clone’” | grep -w ‘ACTIVE’ > /dev/null; then
mylog “Clone plugin installed and in ACTIVE status”
else
mylog “The clone plugin install failed. Do exit 1!”
myexit
fi
fi
}

数据库克隆

clone_db() {
mylog “Flush logs”
$localdb_login_bin -e “flush logs”

mylog "GTID info before backup:"
$localdb_login_bin -e "show master status/G" >>$logfile

mylog "Starting clone local data to $tgt_clone_dir ..."
$localdb_login_bin -e "clone local data directory = '$tgt_clone_dir'"

mylog "Clone command done , And current GTID info as fellow:"
$localdb_login_bin -e "show master status/G" >>$logfile

mylog "Clone state for backup:"
$localdb_login_bin -e "SELECT * from performance_schema.clone_status/G" >>$logfile

mylog "Clone progress for backup:"
$localdb_login_bin -e "SELECT * from performance_schema.clone_progress/G" >>$logfile

if $localdb_login_bin -N -s -e "SELECT state from performance_schema.clone_status where trim(TRAILING '/' FROM DESTINATION)='$tgt_clone_dir' order by BEGIN_TIME desc limit 1" | grep -w 'Completed' > /dev/null; then
    mylog "The clone operation completed successfully."
else
    mylog "The clone operation failed. Do exit 1!"
    myexit
fi

}

备份日志文件

backup_binlog() {
mylog “Full mysql binlog list:”
ls -trl ${binlog_path} >>$logfile
mylog “Starting backup binlogs generated within 1min ~ 25 hours …”

flush logs before backup binlog, for tar ERROR: file changed as we read it

$localdb_login_bin -e “flush logs”

within 1min ~ 25 hours binlog

cd ${binlog_path}
find . -name “mysql-bin.*” -mmin -1500 -mmin +1 | xargs tar -czvf ${tgt_binlog_backup_file} >/dev/null 2>>$logfile
cmd_ret=$?
if [ “x${cmd_ret}” = “x0” ]; then
mylog “Backup mysql binlog successfully.”
else
mylog “Backup mysql binlog failed. Do exit 1!”
myexit
fi
}http://www.cndba.cn/redhat/article/131592

压缩备份文件

compress_backup_file() {
mylog “Starting compress clone file …”
if [ -d “$tgt_clone_dir” ]; then
cd “$tgt_clone_dir”
tar -czvf “$tgt_backup_file” . > /dev/null 2>>$logfile
if [ $? -eq 0 ]; then
cd “$backup_home”
mylog “Compress clone file successfully.”
test -d “$tgt_clone_dir” && rm -rf “$tgt_clone_dir”
else
mylog “Compress clone file failed. Do exit 1!”
myexit
fi
else
mylog “Target tgt_clone_dir:$tgt_clone_dir not a valid directory. Do exit 1!”
myexit
fi
}

主备份流程

main_backup_flow() {
check_env
check_clone_plugin
clone_db
backup_binlog
compress_backup_file
mylog “Backup process completed.”
}

执行主流程

main_backup_flow

http://www.cndba.cn/redhat/article/131592

结束日志记录

end_log() {
mylog “Backup and compress process completed at $(date +%Y-%m-%d/ %H:%M:%S)”
}

调用结束日志记录函数

end_log

json 标准输出

json_response() {
local code=$1
local message=$2
echo “{/”code/”:$code, /”message/”:/”$message/”}”
}http://www.cndba.cn/redhat/article/131592

json_response 0 “Backup process completed successfully.”http://www.cndba.cn/redhat/article/131592

版权声明:本文为博主原创文章,未经博主允许不得转载。

用户评论
* 以下用户言论只代表其个人观点,不代表CNDBA社区的观点或立场
Anshen

Anshen

关注

成功不是将来才有的,而是从决定去做的那一刻起,持续累积而成。

  • 69
    原创
  • 0
    翻译
  • 5
    转载
  • 8
    评论
  • 访问:287114次
  • 积分:326
  • 等级:中级会员
  • 排名:第13名
精华文章
    最新问题
    查看更多+
    热门文章
      热门用户
      推荐用户
        Copyright © 2016 All Rights Reserved. Powered by CNDBA · 皖ICP备2022006297号-1·

        QQ交流群

        注册联系QQ