300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > 自动定时备份远程mysql脚本

自动定时备份远程mysql脚本

时间:2021-12-04 11:29:41

相关推荐

自动定时备份远程mysql脚本

脚本完整流程

连接远程服务器进入docker-mysql执行mysqladmin -P3306 -u u s e r − p user -p user−ppwd1 flush-logs,对binlog进行截断,返回binlog文件名本地拿到文件名,从远程服务器拉取对应文件到本地执行mysqlbinlog /bak/incre_dc/ b ∣ m y s q l − u b | mysql -u b∣mysql−uacc -p$pwd1 -f, 把binlog文件导入本地mysql把incre.sh加入本地定时任务crontab -e 即可,两天执行一次

#0 1 */2 * * cd /incre_micro;./incre.sh #这里的cd 类似于docker的workspace加入了上一次备份时间的判断

关于一些shell脚本使用:

变量赋值等号两边不能有空格

#shell : command not found a="a=000017"a_str="a="

字符串包含[[]]是关键,两边空格一个都不能少

# shell [: missing `]if [[ "$a" == *$a_str* ]];then ...if [[ "$a" =~ $a_str* ]];then ...

shell截取字符串

e="mysql-bin.000016|-01-27 11:01:35"${e%|*}# mysql-bin.000016

shell数字加减

a='154'b=$(($a-1))echo $b#大于 -gt (greater than)#小于 -lt (less than)#大于或等于 -ge (greater than or equal)#小于或等于 -le (less than or equal)#不相等 -ne (not equal)

shell显示文件倒数第二行

tail -n 2 history.log |head -n 1

shell时间格式化

echo "`date '+%Y-%m-%d %H:%M:%S'`"

完整的脚本

incre.sh

#!/bin/bash#服务地址srv=127.0.0.1#备份天数delay=1#数据库所在目录(remote_db)dir=/data/#账号(local_db)acc=root#密码(local_db)pwd1=root#容器名(local_db)container_local=mysql_1#历史备份记录history_file=history.log#服务器执行日志file_name=file.logperfix=mysql-bin.a=0a_str='a='echo "$(ssh -Tq $srv < ./ssh.sh)" > $file_namea=$(tail -n 1 $file_name)echo "$a"b=$perfix${a:2}c_date=`date '+%Y-%m-%d %H:%M:%S'`d_date=`date '+%Y-%m-%d'`if [ -f $history_file ];thentemp_h=$(tail -n 1 $history_file)temp_d=${temp_h#*|}tmep=${temp_h%|*}echo "$b $temp $((${d_date//-}-$delay)) "#上次备份时间>(当天-delay天数)if [ ${temp_d//-} -gt $((${d_date//-}-$delay)) ];thenecho "$c_date $b 备份失败:上次备份时间:$temp_d"exitfifiif [[ $a != 0 ]] && [[ "$a" =~ $a_str* ]];thenecho "Contains the correct file name !!!"elseecho "$c_date $b 备份失败:格式有误(例:a=00001)"exitfiecho "`date '+%Y-%m-%d %H:%M:%S'` scp 开始!!! $b "echo $srv:$dir$bscp $srv:$dir$b ./if [ ! -f $history_file ];thenecho "首次执行备份"echo "$b|$d_date" > $history_fileelseecho "$b|$d_date" >> $history_filefiecho "`date '+%Y-%m-%d %H:%M:%S'`,开始导入数据库"echo "exec ==> docker exec $container_local bash -c \"mysqlbinlog /bak/incre_dc/$b | mysql -u$acc -p$pwd1 -f \""docker exec $container_local bash -c "mysqlbinlog /bak/incre_dc/$b | mysql -u$acc -p$pwd1 -f"echo "`date '+%Y-%m-%d %H:%M:%S'`,导入完成"echo "`date '+%Y-%m-%d %H:%M:%S'` $b 备份结束"exit

把此脚本发远程执行

cat ssh.sh

#!/bin/bash#数据库所在目录(remote_db)dir=/data/#用户名(remote_db)user=root#密码(remote_db)pwd1=root#容器名(remote_db)container_remote=mysql-m1_1index=mysql-bin.indexsp=mysql-bin.d_date=`date '+%Y%m%d'`cd $dirft=$(stat -c %Y $index)ft=`date -d @$ft "+%Y%m%d"`echo "$d_date $ft"#当前时间(天)>上次修改时间(天)if [ $d_date -gt $ft ]; thendocker exec $container_remote mysqladmin -P3306 -u$user -p$pwd1 flush-logsecho "当天已flush"elseecho "当天已flush,无须重复执行,$d_date,$ft"fi#取倒数第二行文件名a=$(tail -n 2 $index | head -n 1| awk -F$sp '{print $2 }')echo "a=$a"

=========================================>>>>>>>>>>>>>>>>分割线

很久之前撸的脚本,比较low,

顺便回顾一下shell的基本使用,

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。