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. ubuntu 20.04安装GCC G++ 6.2,支持c++ 14

    1. 下载源码包 wget http://ftp.gnu.org/gnu/gcc/gcc-6.2.0/gcc-6.2.0.tar.bz2 2. 解压 tar jxf gcc-6.2.0.tar.bz2 ...

  2. 小tips:vue结合百度UEditor富文本编辑器实现vue-ueditor-wrap

    1.下载vue-ueditor-wrap cnpm i vue-ueditor-wrap -S 下载最新的 UEditor 资源文件放入你项目的静态资源目录中(比如 static 或者 public, ...

  3. SpringCloud入门(二)服务间调用和案例

    一.微服务拆分注意事项微服务拆分注意事项:1.单一职责:不同微服务,不要重复开发相同业务2.数据独立:不要访问其它微服务的数据库3.面向服务:将自己的业务暴露为接口,供其它微服务调用 1.微服务需要根 ...

  4. TypeScript – Using Disposable

    前言 TypeScript v5.2 多了一个新功能叫 Disposable. Dispose 的作用是让 "对象" 离开 "作用域" 后做出一些 " ...

  5. 游览器 reflow

    refer: https://juejin.im/post/5a9372895188257a6b06132e reflow 伤性能. 所以要闪. 有几个频密触发的东西要留意. 1. scroll 2. ...

  6. 基于 Session 实现短信登录

    短信验证 一.基于Session 1.登录流程 1)发送验证码 用户在提交手机号后,会校验手机号是否合法,如果不合法,则要求用户重新输入手机号 如果手机号合法,后台此时生成对应的验证码,同时将验证码进 ...

  7. SpringMVC —— REST风格简介

    REST风格简介 REST(Representational State Transfer),表现形式转换 传统风格资源描述形式 REST风格描述形式 优点 隐藏资源的访问行为,无法通过地址得知对资源 ...

  8. 八皇后dfs全排列——洛谷1219

    [USACO1.5] 八皇后 Checker Challenge 题目描述 一个如下的 \(6 \times 6\) 的跳棋棋盘,有六个棋子被放置在棋盘上,使得每行.每列有且只有一个,每条对角线(包括 ...

  9. 谷歌浏览器页面乱码问题在浏览器端解决,charset下载安装;

    一   下载插件(百度网盘) 链接:https://pan.baidu.com/s/1o9Zuo2m 密码:rrcz 二    将下载好的插件拖到谷歌浏览器中 三    如果谷歌浏览器右下角出现如下图 ...

  10. USB LFPS是什么?

    USB LFPS:低功耗状态下的高速数据传输 什么是USB LFPS? USB LFPS(Low-Power Signaling)指的是USB接口在低功耗状态下的一种高速数据传输技术.传统上,USB接 ...