MySQL远程定期备份数据脚本

MySQL数据库备份脚本

1.通过shell脚本远程备份数据库

1.1 远程备份数据库

  • 要备份的MySQL数据库 – 192.168.106.128
  • 数据远程备份的服务器 --192.168.106.129

1.2 脚本内容

  • bakDB.sh
#!/bin/bash

#####################################################
#参数1:数据库用户名
username=root
#参数2:数据库用户密码
password=123456


#参数5:远程主机IP
defaultip=192.168.106.129

#参数7:如果clagent中的task_failed_log表不需要备份  这里就需要有数据
defaultignoretables=""
echo "主函数答应1:${defaultignoretables}`date`"
#最后等待即可,无需其他操作
shellpathrun="/opt/dbbak/hidden/run.sh"
shellpathmd="/opt/dbbak/hidden/mkdir.sh"
######################################################



#动态创建指定主机的指定目录
defaultbd=/data/bak/mysql/hongwei/
$shellpathmd $defaultbd $defaultip
#执行备份指令
#参数6:文件前缀,run脚本会在后面添加当前日期
defaultfileprefix=hongwei
#参数3:数据库名称
defaulttn=hongwei
echo "主函数答应2:${defaultignoretables}`date`"

$shellpathrun $username $password $defaulttn $defaultbd $defaultip $defaultfileprefix $defaultignoretables

######################################################
#动态创建指定主机的指定目录(备份all_out_api的数据)
defaultbdd=/data/bak/mysql/all_out_databases/
$shellpathmd $defaultbdd $defaultip
echo "主函数答应3:${defaultignoretables}------------`date`"

#多数据库备份
defaulttn1="redis hertzbeat"
#备份文件前缀,run脚本中后面会添加当前日期
defaultfileprefix1=all_out_databases
echo "主函数答应4:${defaultignoretables}------------`date`"
defaultignoretables=""
#执行备份指令
$shellpathrun $username $password "$defaulttn1" $defaultbdd $defaultip $defaultfileprefix1 $defaultignoretables
  • run.sh
#!/bin/bash

####################################################
#填入用户名密码及其数据库实例参数
username=$1
password=$2
dbname=$3

####################################################
#手动创建目标备份目录:必须指定绝对路径

bakname=$4
#修改目标机器IP
aimip=$5
#文件名称前缀
fileprefix=$6
#是否追加自定义参数
ignoretables=$7

####################################################
#以下内容理论上无需改变
#以下内容理论上无需改变
#以下内容理论上无需改变
####################################################
dt=$(date "+%Y%m%d")
filename=$fileprefix$dt
####################################################
echo "-------111${ignoretables}-------"
if [ -f "/data/baktmp/${filename}.sql}" ];then
  echo "/data/baktmp/${filename}.sql is exist}"
  echo "-----------------------"
else
  echo "-------${ignoretables}-------"
  if [ -n "${ignoretables}" ];then
    mysqldump -u$username -p$password --databases $dbname --ignore-table=$ignoretables --skip-lock-tables > /data/baktmp/$filename.sql
  else
    mysqldump -u$username -p$password --databases $dbname --skip-lock-tables > /data/baktmp/$filename.sql
  fi
  
  cd /data/baktmp/
  tar cvzf $filename.tar.gz $filename.sql
fi



echo "####压缩成功,删除sql文件${filename}.sql"

if [ -f /data/baktmp/$filename.sql ];then
  rm -f /data/baktmp/$filename.sql
else
  echo "/data/baktmp/$filename.sql is not exit"
fi
#####################################################
#目标主机密码,在没有免密的时候需要
#若主机密码发生动态变更,此处同步即可

PASSWORD="123456"
######################################################
auto_change_pw() {
    expect -c "set timeout -1;
        spawn  scp /data/baktmp/$filename.tar.gz root@$aimip:$bakname;
        expect {
            *密码* {send -- $PASSWORD\r;exp_continue;}
            *yes/no* {send -- \"yes\"\r;exp_continue;}
            *assword* {send -- $PASSWORD\r;exp_continue;}
            eof        {exit 0;}
        }";
}
TD() {
   hostname
   echo "数据传输成功"
}
#TD
#启动转移指令
auto_change_pw
#转移成功后,删除生成的历史文件
if [ -f /data/baktmp/$filename.tar.gz ]
then
rm -f /data/baktmp/$filename.tar.gz
else 
echo "/data/baktmp/$filename.tar.gz is not exit"
fi
  • mkdir.sh
#!/bin/bash

####################################################
#手动创建目标备份目录:必须指定绝对路径
bakname=$1
aimip=$2

####################################################
#以下内容理论上无需改变
#以下内容理论上无需改变
#以下内容理论上无需改变
#####################################################
#目标主机密码,在没有免密的时候需要
#若主机密码发生动态变更,此处同步即可
PASSWORD="123456"
######################################################
auto_mkdir_pw() {
      expect -c "set timeout -1;
        spawn  ssh $aimip \"mkdir -p $bakname\";
        expect {
            *密码* {send -- $PASSWORD\r;exp_continue;}
            *yes/no* {send -- \"yes\r\";exp_continue;}
            *assword* {send -- $PASSWORD\r;exp_continue;}
            eof        {exit 0;}
        }";
}
#启动转移指令
auto_mkdir_pw

1.3 执行脚本

  • 三个脚本bakDB.sh、run.sh、mkdir.sh上传到/opt/dbbak/hidden/目录下,
  • 给脚本赋予可执行权限chmod +x bakDB.sh mkdir.sh run.sh
-rw-r--r-- 1 root root 1629 Jun 24 14:54 bakDB.sh
-rw-r--r-- 1 root root  906 Jun 24 14:36 mkdir.sh
-rw-r--r-- 1 root root 2321 Jun 24 14:36 run.sh
[root@hongwei hidden]# chmod +x bakDB.sh mkdir.sh run.sh 

  • 在128服务器上创建/data/baktmp/目录
[root@hongwei /]# mkdir -p /data/baktmp/
  • 执行脚本./bakDB.sh
# 将日志打印到dbbak.log文件中
[root@hongwei hidden]# ./bakDB.sh > /var/log/dbbak.log 2>&1
  • 查看备份数据(129服务器)
[root@bigwork02 all_out_databases]# ll
total 4
-rw-r--r--. 1 root root 1001 Jun 24 15:43 all_out_databases20240624.tar.gz

解压后的sql内容如下图所示:

在这里插入图片描述

  • 5
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Eason-Python

你的鼓励是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值