mysql 定时 数据库备份并上传到另一台服务器上,上传结束并删除源文件
首先总共有两个脚本:
#!/bin/bash:主要用于进行数据库备份、压缩、删除,单独运行命令是:bash XXX.sh
#!/usr/bin/expect:主要用于进行数据备份文件的上传,单独运行命令是:expect XXX.sh
分成两个脚本写的原因是:expect 主要是用于ssh 远程上传是需要输入密码,有了这个脚本则可以自动输入密码。同时由于无法在#!/bin/bash脚本上直接写自动输入密码的语句,所以写了两个脚本。
同时有一个前提:如果两台服务器是免密操作的,则不用写两个脚本,直接在#!/bin/bash 脚本中写 scp 就可以
expect 是需要自动安装的一个插件:
yum -y install expect
安装成功后:
输入:expect
返回:expect1.1>
则安装成功
现在上代码:
#!/bin/bash
#!/bin/bash
echo "============备份开始=========================="
#当前时间,用来命名sql文件
DATETIME=$(date +%Y%m%d)
backup_dir=/usr/mysqldump/back_22/dbname_$DATETIME
#自动创建文件夹,如果文件夹不存在则自动创建
echo "============自动创建今日文件夹=============="$backup_dir
if [ ! -d $backup_dir ]; then
mkdir -p $backup_dir;
fi
echo "========创建完成==========="
#备份多个数据库
#之所以这么写的原因是:mysqldump -u 账户 -p密码 --databases db1 db2 > $backup_dir/dbname_$DATETIME.sql
#可以将多个数据库备份到一个文件中,但是我是需要分开备份,以后数据出了问题可以针对性的回复,所以每个备份文件名字都要是不一样的,所以这也是为啥后续有个压缩文件的原因
mysqldump -u 账户 -p密码 dbname1> $backup_dir/dbname1_$DATETIME.sql
mysqldump -u 账户 -p密码 dbname2 > $backup_dir/dbname2_$DATETIME.sql
echo "========备份完成==========="
#压缩下载的数据
echo "========开始压缩==========="
tar -czvf /usr/mysqldump/back_22/dbname_$DATETIME.tar.gz $backup_dir
echo "========压缩成功==========="
#开始将压缩文件上传到IP
echo "========开始数据上传==========="
#要注意,前面那个部分是调用第二个脚本的语句,是传入第二个脚本的变量名
/data/script/send.sh smartcity_$DATETIME.tar.gz
#判断是否上传成功
echo "========上传成功==========="
cd /usr/mysqldump/back_22
#因为这里有两个文件,一个是文件夹、一个是压缩包,所以都要删除掉
rm -f dbname_$DATETIME.tar.gz
rm -fr dbnam_$DATETIME
echo "========文件删除成功==========="
#!/usr/bin/expect
#!/usr/bin/expect
#获取文件名
set file_name [lindex $argv 0]
spawn scp -P22 /usr/mysqldump/back_22/$file_name 账户@IP:/data/backup/back_22
#expect 是为了抓取scp 后界面返回的Password:关键字,当获取到这个关键字之后,然后填入到send的密码,实现人机交互
expect "Password"
send "密码\r"
#设置超时时间
set timeout 60
expect eof
注意点:第二个脚本设置超时时间的,这个很坑,在网上找的资料要么就是没有设置,要么就是放在第一行,那么我遇到一个很坑的问题,就是第二个脚本数据上传每次都是上传没有结束就退出了,
我在第二个脚本退出前面写了一个超时时间,我猜测:文件从A服务器上传到B服务器上如果是出现了网络波动,没有设置超时时间,那么程序就要继续往下跑expect eof (退出),那么如果这个超时时间
放在了第一行,那么由于程序是顺序执行,所以在上传过程中会有网络波动,那么上传也会失败
那么在解决这个问题的过程中,我发现了关于判断SCP是否成功的两点经验,代码没有经过验证,但是可以两种运用在其他方面的思路
#第一种方式:
#用以下方式可以检查scp进程是否在跑,如果没有跑,那么cnt的值是0 ,主要的原理是通过while循环判断scp是否在跑
cnt=`ps -ef|grep "scp"|grep "all"|grep -v grep|grep -v vi|wc -l`
echo "正在上传中:"$cnt
while [ $cnt == 0 ]
do
cnt=`ps -ef|grep "scp"|grep "all"|grep -v grep|grep -v vi|wc -l`
echo "正在上传中:"$cnt
sleep 30
done
echo "========上传成功==========="
#第二种方式:
#$? 用于直接判断上一个脚本是否已经跑完
if [ $?==0 ]; then
echo "========数据上传成功===========";
cd /usr/mysqldump/back_22
rm -f smartcity_$DATETIME.tar.gz
rm -fr smartcity_$DATETIME
echo "========文件删除成功==========="
fi
后面还会在备份存放服务器上加一个脚本,用于定时删除太长时间的备份文件,只保留一段时间的备份
mysql 定时 数据库备份并上传到另一台服务器上,上传结束并删除源文件的更多相关文章
- MySQL的数据库备份
MySQL的数据库备份 备份的原因: 1.保证重要数据不丢失 2.数据转移 MySQL数据库备份方式: 1.方法1:在Sqlyog这种可视化工具中手动导出 2.方法2:直接拷贝物理文件(就是data文 ...
- PHP文件上传至另一台服务器
PHP程序上传文件时,想指定上传到另一台服务器. move_uploaded_file这个方法第二个参数指定的存放路径需要和php程序文件一个服务器,没办法指定其他服务器的地址,本人才疏学浅,哪位大哥 ...
- 定时备份SQL SERVER的数据库并且把备份文件复制到另外一台服务器
需求介绍:每天备份线上正式库并且把备份文件复制到测试服务器,测试服务器自动把数据库备份文件还原. 方案介绍: 第1步:在正式库上创建存储过程用来备份数据库和复制到测试服务器,然后新建作业每天定时执行创 ...
- Mysql主数据库+备份数据库部署教程
转:http://www.111cn.net/database/mysql/76450.htm 本文我们来讲讲Mysql主备如何部署,这里说的主是指Mysql主数据库,备是从数据库,备可以是多个,也可 ...
- Mysql 5.* 数据库备份及导入
作者:邓聪聪 倒出数据文件 1) 导出数据和表结构: 进入数据库查看表结构 msql -u用户名 -p密码 msql -u用户名 -p密码 -S /var/lib/mysql/mysql.sock ...
- MySQL基础 - 数据库备份
出于安全考虑,数据库备份是必不可少的,毕竟对于互联网公司数据才是价值的源泉~ 距离mysql账号为icebug,密码为icebug_passwd, 数据库为icebug_db mysqldump -u ...
- mysql之数据库备份
1.可视化工具Navicat for mysql进行操作数据库备份 (1)备份数据库 (2)将备份的数据库进行加载
- mysql:数据库备份方案
1. 数据库备份方案 1)没备份,跑路~ 2)全量备份+增量备份 如果不小心“删库”,可以这么恢复: a. 将最近一次全量备份的全库找到,拷贝回来(文件一般比较大),解压,应用: b. ...
- docker镜像打包成tar包,上传到另一台服务器
需要打包的服务器操作: 一.需要打包的服务器执行以下操作 docker save -o node.tar.gz calico/node # docker save -o 要打镜像包的名称 镜像 ...
- 实战-MySQL定时增量备份(2)
概要 引言 增量备份 恢复增量备份 定时备份 引言 在产品上线之后,我们的数据是相当重要的,容不得半点闪失,应该做好万全的准备,搞不好哪一天被黑客入侵或者恶意删除,那就 gg 了.所以要对我们的线上数 ...
随机推荐
- Python从0到1丨详解图像锐化的Sobel、Laplacian算子
本文分享自华为云社区<[Python从零到壹] 五十八.图像增强及运算篇之图像锐化Sobel.Laplacian算子实现边缘检测>,作者: eastmount . 一.Sobel算子 So ...
- 使用playwright爬取魔笔小说网站并下载轻小说资源
一.安装python 官网 下载python3.9及以上版本 二.安装playwright playwright是微软公司2020年初发布的新一代自动化测试工具,相较于目前最常用的Selenium,它 ...
- Spring框架中 依赖注入和控制反转,最简单、最通俗的解释! 再加上一个AOP
首先依赖注入 == 控制反转,只不过控制反转这个词汇,让人产生了错误的理解,才使用新的词汇:依赖注入来替换到这个词汇. "依赖注入"是指一个对象应用另外一个对象来提供一个特殊的能力 ...
- EMC ndmp NAS
NAS 是带存储系统的专用高性能文件服务器.它可提供文件级数据访问和共享. NAS 使用网络和文件共享协议,包括用于数据传输的 TCP/IP 以及用于远程文件服务的 CIFS 和 NFS. 最简单的备 ...
- 采药(lgP1048)
emmm 01 背包模板... 设 f[i] 表示背包容积为 i 时所得的最大价值. 则状态转移方程为 f[j] = f[j - w[i]] + c[i] . #include<bits/std ...
- seed 随机种子的作用
在随机数生成中,种子(seed)是一个起始值,用于确定随机数生成器的初始状态.通过设置相同的种子,可以确保每次运行程序时生成的随机数序列都是相同的.这种确定性的随机数生成可以带来以下几个好处: 可复现 ...
- 数据结构与算法(LeetCode)第一节:认识复杂度,对数器,二分法与异或运算
一.认识复杂度 1.评估算法优劣的核心指标: 时间复杂度:当完成了表达式的建立,只要把最高阶项留下即可.低阶项都去掉,高阶项的系数也去掉,记为O(去掉系数的高阶项): 时间复杂度是衡量算法流程的复 ...
- 文心一言 VS 讯飞星火 VS chatgpt (123)-- 算法导论10.4 4题
四.用go语言,对于一个含 n个结点的任意有根树,写出一个 O(n)时间的过程,输出其所有关键字该树以左孩子右兄弟表示法存储. 文心一言: 在计算机科学中,左孩子右兄弟表示法是一种用于表示树状结构的方 ...
- springcloud/springboot集成NACOS 做注册和配置中心以及nacos源码分析
一.SpringCloud 简介 Spring Cloud 是一系列框架的有序集合如服务发现注册.配置中心.消息总线.负载均衡.熔断器.数据监控等. SpringCloud 将多个服务框架组合起来,通 ...
- react 16.3生命周期更新解析
React v16.3虽然是一个小版本升级,但是却对React组件生命周期函数有巨大变化. 文章梗概 新版本+2-3个生命周期. 为什么增加那2个生命周期? 为什么减去之前3个生命周期? 相关知识延伸 ...