编辑/etc/my.cnf文件添加在[mysqld]版块下添加如下变量,添加后重启服务
#开启,并且可以将mysql-bin改为其它的日志名log-bin=mysql-bin#添加id号,如果做主从,就不能一样server-id=1#超过200M将生产新的文件,最大和默认值是1GBmax_binlog_size=1G#此参数表示binlog使用最大内存的数,默认1M。max_binlog_cache_size=1M#此参数表示binlog日志保留的时间,默认单位是天。expire_logs_days=7也可以用如下方式动态更改全局变量,连接mysql服务器后配置,不用重启服务器。
set GLOBAL expire_logs_days=7;
注意:设置之后并不会立即执行,需要如下条件 手动执行flush logs(注意,如果binlog文件过多会引发IO问题,并且flush 也不会同步到从库) 重新启动时(MySQL将会new一个新文件用于记录binlog)
mybak-all.sh,对脚本变量部分进行配置
#!/bin/bash#使用:./xx.sh -uroot -p'123456',使用前修改脚本进行变量配置#过程:备份并刷新binlog,将最新的binlog文件名记录并整体压缩打包#恢复:先进行全量备份,再对根据tim-binlog.txt中的记录,进行逐个恢复#提示:最多每分钟执行一次,否则会覆盖同分钟内的文件,可以修改脚本来改善# 出现问题会退出,可以到指定的日志目录查看日志输出# 同年的tar包超过指定天数的会删除掉#[变量]begin_time=`date +%F-%H-%M-%S`my_sql="/usr/local/mysql/bin/mysql"bak_sql="/usr/local/mysql/bin/mysqldump"binlog_dir=/usr/local/mysql/databak_dir=/ops/baklog_dir=/ops/log/mybak-all.log#保存的天数,4周就是28天save_day=28#[自动变量]#当前年月date_nian=`date +%Y-`#所有天数的数组save_day_zu=($(for i in `seq 1 ${save_day}`;do date -d -${i}days "+%F";done))#开始/usr/bin/echo >> ${log_dir}/usr/bin/echo "time:$(date +%F-%H-%M-%S) info:开始全备份" >> ${log_dir}#检查${my_sql} $* -e "show databases;" &> /tmp/info_error.txtif [[ $? -ne 0 ]];then/usr/bin/echo "time:$(date +%F-%H-%M-%S) info:登陆命令错误" >> ${log_dir}/usr/bin/cat /tmp/info_error.txt #如果错误则显示错误信息 exit 1fi#移动到目录cd ${bak_dir}bak_time=`date +%F-%H-%M`bak_timetwo=`date +%F`#备份${bak_sql} $* --all-databases --flush-privileges --single-transaction --flush-logs --triggers --routines --events --hex-blob > mybak-all-${bak_time}.sqlif [[ $? -ne 0 ]];then/usr/bin/echo "time:$(date +%F-%H-%M-%S) error:备份失败"/usr/bin/echo "time:$(date +%F-%H-%M-%S) error:备份失败" >> ${log_dir}/usr/bin/cat /tmp/bak_error.txt #如果错误则显示错误信息 exit 1else bin_dian=`tail -n 1 ${binlog_dir}/mysql-bin.index` echo "${bin_dian}" > ${bak_time}-binlog.txtfi#压缩if [[ -f mybak-all-${bak_time}.tar.gz ]];then/usr/bin/echo "time:$(date +%F-%H-%M-%S) info:压缩包mybak-section-${bak_time}.tar.gz 已存在" >> ${log_dir}/usr/bin/rm -irf mybak-all-${bak_time}.tar.gz ${bak_sql}-binlog.txtfi/usr/bin/tar -cf mybak-all-${bak_time}.tar.gz mybak-all-${bak_time}.sql ${bak_time}-binlog.txtif [[ $? -ne 0 ]];then/usr/bin/echo "time:$(date +%F-%H-%M-%S) error:压缩失败" >> ${log_dir} exit 1fi#删除sql文件/usr/bin/rm -irf mybak-all-${bak_time}.sql ${bak_time}-binlog.txtif [[ $? -ne 0 ]];then/usr/bin/echo "time:$(date +%F-%H-%M-%S) info:删除sql文件失败" >> ${log_dir} exit 1fi#整理压缩的日志文件for i in `ls | grep .tar.gz$`do echo $i | grep "^mybak-all.*tar.gz$" &> /dev/nullif [[ $? -eq 0 ]];then a=`echo ${i%%.tar.gz}` b=`echo ${a:(-16)}` c=`echo ${b%-*}` d=`echo ${c%-*}`#看是否在数组中,不在则删除 echo ${save_day_zu[*]} |grep -w $d &> /dev/nullif [[ $? -ne 0 ]];then[[ "$d" != "$bak_timetwo" ]] && rm -rf $i fielse#不是当月的,其他类型压缩包,跳过continue fidone#结束last_time=`date +%F-%H-%M-%S`/usr/bin/echo "begin_time:${begin_time} last_time:${last_time}" >> ${log_dir}/usr/bin/echo "time:$(date +%F-%H-%M-%S) info:全备份完成" >> ${log_dir}/usr/bin/echo >> ${log_dir}原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。