shell备份mysql到远程oss服务

做了个梦辛辛苦苦做了半天网站突然服务器到期被释放掉了,最尴尬的是数据库也放在了同一台上。写了大半年的博客,数据全丢了。不行,感觉我的小网站还是需要做点容灾措施的。

用到知识点

  • shell expect
  • mysqldump
  • 又拍upx命令行工具
  • corntab

实现原理

一张很直的流程图

1
2
3
4
5
6
7
8
9
st=>start: corntab命令执行
op1=>operation: 触发shell
op2=>operation: 登陆upx
op3=>operation: 创建当日临时目录
op4=>operation: mysqldump 备份数据库
op5=>operation: 上传dump数据
op6=>operation: 删除本地临时dump文件夹
end=>end: 备份完成
st->op1->op2->op3->op4->op5->op6->end

shell 脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
#!/usr/bash
#----------------
# filename: mysql_dump.sh
# date: 2018/10/23
# author: zjj
# email: 526353781
#----------------
#当天时间
time=`date +%Y%m%d`
#备份临时文件路径
tmpDir='/home/admin/'$time
#数据库账号
db_user=''
#数据库密码
db_password=''
#备份的库
db_name=("XX OO")
#又拍空间名
serviceNam=''
#又拍操作员名称
operator=''
#又拍操作员密码
password=''

#创建当日文件夹
mkdir $tmpDir


#又拍登陆
/usr/bin/expect <<EOF
set timeout 10
spawn upx login
expect {
"ServiceName:" { send "$serviceNam\r";exp_continue }
"Operator:" { send "$operator\r";exp_continue }
"Password:" { send "$password\r";expect eof }
}
EOF

for value in ${db_name[@]}
do
mysqldump --host=localhost -u$db_user -p$db_password ${value} > $tmpDir/${value}_$time.dump
#上传
/usr/local/bin/upx put $tmpDir/${value}_$time.dump $time/${value}_$time.dump
done

#删除
if [ -d "$tmpDir" ]; then
rm -rf $tmpDir
fi

添加定时脚本

1
2
3
4
5
6
crontab -e

加入定时,每天23点执行

00 23 * * * /bin/bash /home/admin/mysql_dump.sh >> /home/admin/shell.log #备份数据库

  • 版权声明: 本博客所有文章除特别声明外,著作权归作者所有。转载请注明出处!

请我喝杯咖啡吧~