mysqldump是一种逻辑备份工具 , 可以对数据库进行全量备份 , 和binlog增量备份共同使用可以进行数据库备份 , 基于此写了一个备份的脚本

#!/bin/bash
all_path="/opt/mysql_bakup/all" # MySQL全量备份目录
add_path="/opt/mysql_bakup/add" # MySQL增量备份目录
old_all_path="/opt/mysql_bakup/old_all" # MySQL旧全量备份目录
tar_date="$(date +%F)" # 打包时间
date_name="$(date +%F_%T)" # 备份时间
db_name="test" # 数据库名称
user_name="root" # 数据库用户名称
user_passwd="root" # 数据库用户密码
mysql_operate="mysql -u"${user_name}" -p"${user_passwd}" "
data_path="/data/mysql"
log_path="${data_path}/log" # MySQL日志存放位置 # 0.开启binlog功能
binlog_status=$($mysql_operate -e "show variables like 'log_bin'" | awk 'NR==2{print $2}')
if [ $binlog_status == "OFF" ] ; then
cat >>/etc/my.cnf << EOF
log-bin=$data_path/log/mysql_bin # 二进制日志binlog文件位置和名称
server-id=1 #MySQL服务器的唯一标识符,用于主从同步
EOF
systemctl restart mysqld
if [ $? -eq 0 ] ; then
echo "开启binlog日志功能"
else
echo "开启binlog日志功能失败"
exit 10
fi
fi # 1.如果没有备份目录,就创建
create_dir(){
if [ ! -d ${all_path} ] ; then
mkdir -p ${all_path}
echo "创建全量备份目录${all_path}结束"
fi if [ ! -d ${add_path} ] ; then
mkdir -p ${add_path}
echo "创建增量备份目录${add_path}结束"
fi if [ ! -d ${old_all_path} ] ; then
mkdir -p ${old_all_path}
echo "创建打tar包的旧全量备份目录${old_all_path}结束"
fi } # 2.全量备份
all_backup(){ # 1.将之前的全量包做打包处理
if [ $(ls ${all_path} ) ]; then
# 打tar包的同时删除源文件
tar czf ${old_all_path}/${tar_date}.tar.gz -C ${all_path} . && find /opt/mysql_bakup/all -mindepth 1 -delete
if [ $? -eq 0 ] ; then
echo "之前的全量备份打包到${old_all_path}/${tar_date}.tar.gz"
else
echo "这种打包也能出问题?离谱...."
exit 1
fi
fi # 2.将数据库的数据备份
mysqldump -u"${user_name}" -p"${user_passwd}" --single-transaction --flush-logs -B ${db_name} > ${all_path}/${db_name}_db_${date_name}.sql
if [ $? -eq 0 ] ; then
echo "全量备份成功,位置为${all_path}/${db_name}_db_${date_name}.sql"
else
echo "就一句话的全量备份也能出问题啊?啊?...."
exit 2
fi } # 3.增量备份
add_backup(){ # 1.获取当前最新的binlog文件编号
new_num=$(cat ${log_path}/mysql_bin.index | tail -1 | cut -d "." -f 2)
# 2.获取目录中最新的binlog文件编号
old_num=$(find ${add_path} -mindepth 1 | tail -1 | cut -d "." -f 2)
if [ -z $old_num ] ; then
old_num=0
fi
# 3.获取还差几个文件,加上1个刷新次数
num=$((new_num-old_num+1)) # 4.刷新binlog日志
${mysql_operate} -e "flush logs" # 2.备份相差个数的binlog文件,
log_name=($(tail -${num} ${log_path}/mysql_bin.index))
log_length=${#log_name[@]}
for i in ${log_name[*]} ; do
# 运行到最新的一行跳出
if [[ $i == ${log_name[log_length-1]} ]] ; then
echo "最后一次直接跳出"
break
fi
cp ${i} ${add_path}
if [ $? -eq 0 ] ; then
echo "增量备份成功,位置为${add_path}${i}"
else
echo "增量备份失败"
exit 3
fi
done } # 4.还原数据库
back_resore(){ # 1.临时关闭binlog功能
${mysql_operate} -e "set sql_log_bin=0"
echo "临时关闭binlog功能" # 2.将全量备份恢复至数据库
all_bak="$(find ${all_path} -mindepth 1)" # 找到全量备份
${mysql_operate} ${db_name} < ${all_bak}
if [ $? -eq 0 ] ; then
echo "全量备份恢复成功"
else
echo "全量备份恢复失败"
exit 4
fi # 3.将增量备份按照顺序恢复至数据库
add_bak="$(find ${add_path} -mindepth 1)" # 找到增量备份
for i in ${add_bak[*]} ; do
mysqlbinlog ${i} | ${mysql_operate}
if [ $? -eq 0 ] ; then
echo "增量备份恢复成功,${i}"
else
echo "增量备份恢复失败,${i}"
exit 5
fi
done # 4.开启binlog功能
${mysql_operate} -e "set sql_log_bin=1"
echo "开启binlog功能" }
create_dir
options=("all" "add" "restore")
case $1 in
${options[0]})
all_backup
;;
${options[1]})
add_backup
;;
${options[2]})
back_resore
;;
*)
echo "请使用以下格式进行备份: "
echo "<Usage> : sh $0 {全量备份 : all | 增量备份 : add | 还原备份 : restore}"
exit 1
;;
esac
mysql -uroot -proot -e "use test; select * from testlog"

mysqldump+binlog备份脚本的更多相关文章

  1. MySQL中binlog备份脚本分享

    关于MySQL的二进制日志(binlog),我们都知道二进制日志(binlog)非常重要,尤其当你需要point to point灾难恢复的时侯,所以我们要对其进行备份.关于二进制日志(binlog) ...

  2. mysqldump全备份脚本mysqlallbackup.sh

    库小,大概16G左右,每天增量很小,不到100M,所以用mysqldump每天全量备份,将备份结果信息发送到email通知DBA. mysqlallbackup.sh :MySQL DataBase ...

  3. Mysqldump备份说明及数据库备份脚本分享-运维笔记

    MySQLdump是MySQL自带的导出数据工具,即mysql数据库中备份工具,用于将MySQL服务器中的数据库以标准的sql语言的方式导出,并保存到文件中.Mysqldump是一个客户端逻辑备份的工 ...

  4. mysql通过mysqldump实现备份,脚本编写

    每日三点同步mysql备份任务 crontab -e 0 3 * * * sh /home/shell/mysql_bakup.sh >> /dev/null 2>&1 my ...

  5. xtra+binlog增量备份脚本

    目录 一.备份原理 innobackupex原理 binlog原理 特点 备份策略 二.环境准备 开启binlog 创建授权用户 安装innobackupex 三.添加脚本 全量备份 增量备份 bin ...

  6. mysqldump备份脚本---待完善

    1. 建立备份文件存放目录:/backup/mysql 2. 编写备份脚本: # vim ~/bak.sh ## 写入如下内容: #! /bin/bash DB1_NAME="db1&quo ...

  7. MySQL 备份脚本--mysqldump在slave 上进行备份

    MySQL 备份脚本--mysqldump在slave 上进行备份 使用mysqldump在slave上进行备份,建议使用stop slave sql_thread,start slave sql_t ...

  8. MySQL binlog 自动备份脚本

    MySQL binlog 自动备份脚本 1 利用shell进行备份 #!/bin/sh #mysql binlog backup script /usr/local/mysql/bin/mysqlad ...

  9. 备份 MySQL 的 shell 脚本(mysqldump版本) shell脚本

    #!/bin/bash # 备份 MySQL 的 shell 脚本(mysqldump版本) # 定义变量 user(数据库用户名),passwd(数据库密码),date(备份的时间标签) # dbn ...

  10. MySQL mysqldump 备份脚本(按照db.sql)

    mysqldump逻辑备份,按照db.sql文件区分,并压缩 #! /bin/bash #35 02 * * * mysql /data/mysqldata/scripts/mysqldump_per ...

随机推荐

  1. Identity – 安全基础知识

    前言 一旦涉及到用户, 那么安全就上一个层次了. 这篇主要是说说一些安全的基础 用户密码保存 网络上有太多资料说这些基础了, 我就不拉过来了. 大致记入一些重点就好了. - 为什么不可以明文保存 因为 ...

  2. 揭秘JWT:从CTF实战到Web开发,使用JWT令牌验证

    揭秘JWT:从CTF实战到Web开发,使用JWT令牌验证 介绍 JWT(JSON Web Tokens)是一种开放标准(RFC 7519),它定义了一种紧凑且自包含的方式,用于在网络上安全地传输信息. ...

  3. .net 到底行不行!2000 人在线的客服系统真实屏录演示(附技术详解) 📹

    业余时间用 .net 写了一个免费的在线客服系统:升讯威在线客服与营销系统. 时常有朋友问我性能方面的问题,正好有一个真实客户,在线的访客数量达到了 2000 人.在争得客户同意后,我录了一个视频. ...

  4. perf时 出现[kernel.kallsyms] 符号怎么办

    在 perf 工具生成的火焰图中看到 [kernel.kallsyms],通常意味着火焰图中包含内核符号,但这些符号没有被正确解析.这可能是由于以下几个原因导致的: 内核符号表不可用或不完整:perf ...

  5. Linux内核源码阅读:AArch64的异常处理机制详谈(内核版本6.11)

    ​ 任何玩过Arm64架构的朋友都知道,我们的ARM64架构有异常:Exception Levels, ELs,它是其异常处理机制的核心组成部分,允许系统在不同的特权级别下执行代码.ARM64定义了四 ...

  6. MYSQL存储过程-练习1

    MYSQL存储过程-练习1 创建book表 CREATE TABLE `book` ( `boodid` int unsigned NOT NULL AUTO_INCREMENT, `bookname ...

  7. springboot2.X动态修改log4j2日志级别

    利用springboot提供的 spring-boot-starter-actuator 包可以实现动态修改log4j2日志级别的功能 添加依赖 添加依赖包 <dependency> &l ...

  8. KubeSphere 社区双周报| 2024.07.19-08.01

    KubeSphere 社区双周报主要整理展示新增的贡献者名单和证书.新增的讲师证书以及两周内提交过 commit 的贡献者,并对近期重要的 PR 进行解析,同时还包含了线上/线下活动和布道推广等一系列 ...

  9. KubeSphere 核心架构浅析

    作者简介:万宏明,KubeSphere 核心贡献者,专注于云原生安全领域. KubeSphere 是在 Kubernetes 之上构建的面向云原生应用的容器混合云管理系统.支持多云与多集群管理,提供全 ...

  10. OpenPSG:离AGI再进一步,首个开放环境关系预测框架 | ECCV'24

    全景场景图生成(PSG)的目标是对对象进行分割并识别它们之间的关系,从而实现对图像的结构化理解.以往的方法主要集中于预测预定义的对象和关系类别,因此限制了它们在开放世界场景中的应用.随着大型多模态模型 ...