mysqldump+binlog备份脚本
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备份脚本的更多相关文章
- MySQL中binlog备份脚本分享
关于MySQL的二进制日志(binlog),我们都知道二进制日志(binlog)非常重要,尤其当你需要point to point灾难恢复的时侯,所以我们要对其进行备份.关于二进制日志(binlog) ...
- mysqldump全备份脚本mysqlallbackup.sh
库小,大概16G左右,每天增量很小,不到100M,所以用mysqldump每天全量备份,将备份结果信息发送到email通知DBA. mysqlallbackup.sh :MySQL DataBase ...
- Mysqldump备份说明及数据库备份脚本分享-运维笔记
MySQLdump是MySQL自带的导出数据工具,即mysql数据库中备份工具,用于将MySQL服务器中的数据库以标准的sql语言的方式导出,并保存到文件中.Mysqldump是一个客户端逻辑备份的工 ...
- mysql通过mysqldump实现备份,脚本编写
每日三点同步mysql备份任务 crontab -e 0 3 * * * sh /home/shell/mysql_bakup.sh >> /dev/null 2>&1 my ...
- xtra+binlog增量备份脚本
目录 一.备份原理 innobackupex原理 binlog原理 特点 备份策略 二.环境准备 开启binlog 创建授权用户 安装innobackupex 三.添加脚本 全量备份 增量备份 bin ...
- mysqldump备份脚本---待完善
1. 建立备份文件存放目录:/backup/mysql 2. 编写备份脚本: # vim ~/bak.sh ## 写入如下内容: #! /bin/bash DB1_NAME="db1&quo ...
- MySQL 备份脚本--mysqldump在slave 上进行备份
MySQL 备份脚本--mysqldump在slave 上进行备份 使用mysqldump在slave上进行备份,建议使用stop slave sql_thread,start slave sql_t ...
- MySQL binlog 自动备份脚本
MySQL binlog 自动备份脚本 1 利用shell进行备份 #!/bin/sh #mysql binlog backup script /usr/local/mysql/bin/mysqlad ...
- 备份 MySQL 的 shell 脚本(mysqldump版本) shell脚本
#!/bin/bash # 备份 MySQL 的 shell 脚本(mysqldump版本) # 定义变量 user(数据库用户名),passwd(数据库密码),date(备份的时间标签) # dbn ...
- MySQL mysqldump 备份脚本(按照db.sql)
mysqldump逻辑备份,按照db.sql文件区分,并压缩 #! /bin/bash #35 02 * * * mysql /data/mysqldata/scripts/mysqldump_per ...
随机推荐
- 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 ...
- 小tips:vue结合百度UEditor富文本编辑器实现vue-ueditor-wrap
1.下载vue-ueditor-wrap cnpm i vue-ueditor-wrap -S 下载最新的 UEditor 资源文件放入你项目的静态资源目录中(比如 static 或者 public, ...
- SpringCloud入门(二)服务间调用和案例
一.微服务拆分注意事项微服务拆分注意事项:1.单一职责:不同微服务,不要重复开发相同业务2.数据独立:不要访问其它微服务的数据库3.面向服务:将自己的业务暴露为接口,供其它微服务调用 1.微服务需要根 ...
- TypeScript – Using Disposable
前言 TypeScript v5.2 多了一个新功能叫 Disposable. Dispose 的作用是让 "对象" 离开 "作用域" 后做出一些 " ...
- 游览器 reflow
refer: https://juejin.im/post/5a9372895188257a6b06132e reflow 伤性能. 所以要闪. 有几个频密触发的东西要留意. 1. scroll 2. ...
- 基于 Session 实现短信登录
短信验证 一.基于Session 1.登录流程 1)发送验证码 用户在提交手机号后,会校验手机号是否合法,如果不合法,则要求用户重新输入手机号 如果手机号合法,后台此时生成对应的验证码,同时将验证码进 ...
- SpringMVC —— REST风格简介
REST风格简介 REST(Representational State Transfer),表现形式转换 传统风格资源描述形式 REST风格描述形式 优点 隐藏资源的访问行为,无法通过地址得知对资源 ...
- 八皇后dfs全排列——洛谷1219
[USACO1.5] 八皇后 Checker Challenge 题目描述 一个如下的 \(6 \times 6\) 的跳棋棋盘,有六个棋子被放置在棋盘上,使得每行.每列有且只有一个,每条对角线(包括 ...
- 谷歌浏览器页面乱码问题在浏览器端解决,charset下载安装;
一 下载插件(百度网盘) 链接:https://pan.baidu.com/s/1o9Zuo2m 密码:rrcz 二 将下载好的插件拖到谷歌浏览器中 三 如果谷歌浏览器右下角出现如下图 ...
- USB LFPS是什么?
USB LFPS:低功耗状态下的高速数据传输 什么是USB LFPS? USB LFPS(Low-Power Signaling)指的是USB接口在低功耗状态下的一种高速数据传输技术.传统上,USB接 ...