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. iOS 屏幕旋转的实践解析

    ​ 摘要:如何更灵活便捷的实现自定义屏幕旋转场景,本文带你揭秘! 文|即构 iOS 应用开发团队 屏幕旋转是在视频直播类 APP 中常见的场景,在即构科技之前发布的 Roomkit SDK 中也有屏幕 ...

  2. CSS – border-radius (Rounded Corners)

    前言 之前的文章 CSS – W3Schools 学习笔记 (3), 这篇独立出来写, 作为整理. 参考: Youtube – Advanced CSS Border-Radius Tutorial ...

  3. 第5天:基础入门-反弹SHELL&不回显带外&正反向连接&防火墙出入站&文件下载

    文件上传下载-解决无图形化&解决数据传输 命令生成:https://forum.ywhack.com/bountytips.php?download 反弹shell 以参照物为准,以Linux ...

  4. 搜广推算法校招面试:BOSS直聘 推荐搜索系统工程师

      本文介绍2024届秋招中,BOSS直聘的推荐/搜索系统工程师岗位一面的面试基本情况.提问问题等.   2023年12月,赶在秋招的末尾,投递了BOSS直聘的推荐/搜索系统工程师岗位,并不清楚所在的 ...

  5. 一些OI常用小技巧啊

    1.卡常 \[---总有人以为自己比编译器聪明 \;\;\;by\;\;bezel \] 我们可能确实没有编译器聪明,但是,为了防止CCF的老人机出现什么问题,卡一卡常还是有必要的. 如果实在被逼无奈 ...

  6. Oracle中查看隐含参数的sql

    select a.ksppinm "Parameter", a.ksppdesc "Description", b.ksppstvl "Session ...

  7. 祝贺开源之夏 2023 KubeSphere 社区项目中选学生!

    日前,开源之夏 2023 所有中选结果已出炉,在此祝贺各位中选的同学! 活动简介 开源之夏是由中科院软件所"开源软件供应链点亮计划"发起并长期支持的一项暑期开源活动,旨在鼓励在校学 ...

  8. 快速部署sqlserver AlwaysOn集群

    点击查看代码 丐版sqlserver集群 之前试过docker的,k8s的,然后发现,还是最朴素的是最简单的,希望有大佬能够汉化,他妈的,那些英文看得人要发癫啊. 前置准备,参照丐版pxc集群: ht ...

  9. OGG异构平台安装部署 MySQL->Oracle

    本文旨在从安装部署中了解OGG的知识 一.OGG理论概念 1.1 简单介绍 1.2 同步过程 1.3 Oracle Golden Gate简要体系图 二.测试实验 2.1 实验环境介绍 2.2 源端M ...

  10. vue3 js 学习笔记

    Vue3-js 学习笔记 目录 Vue3-js 学习笔记 目录 前言 reactive 数据绑定 事件绑定 生命函数周期 计算属性-computed props emit-自定义事件 ref-获取元素 ...