上周,我们在写一些清理数据的脚本时,由于不同开发人员的脚本执行顺序没有详细对接,导致有一张表的某个字段丢失了一天的数据,虽然后来费了好大精力想办法弥补回来,但类似的情况最好还是杜绝,至少需要一个自动备份数据库的工具。
需求分析
导致数据丢失的原因有很多,员工操作失误,服务器硬盘挂了(机房烧了),服务器被人黑了然后篡改数据库了,甚至是员工删库跑路了,都是有可能的。
那我们需要把数据库备份到一个大概率不会发送这些情况的地方,比如阿里云的 oss
上。
这个傻瓜式的备份工具至少应该具备以下功能:
- 定时备份数据库;
- 压缩打包后上传到
oss
,删除本地压缩包; - 删除
OSS
上超出指定时效的备份(避免产生不必要费用);
oss工具ossutil
为了操作 oss
我们需要用到 oss
官方提供的工具 ossutil
;并给它执行权限,创建软连接。
wget http://gosspublic.alicdn.com/ossutil/1.6.19/ossutil64
cp ossutil64 /opt/tools/
chmod 755 /opt/tools/ossutil64
sudo ln -s /opt/tools/ossutil64 /usr/local/bin/ossutil64
知识点
- mysqldump命令中如何排除不需要的表,或者指定备份哪些表
- oss工具ossutil64的基本用法
- shell中如何生成随机字符串
- shell中如何获取几天前的时间
- shell中如何定义数组并进行循环
开箱即用的shell脚本
将以上内容写入到
sh
文件 /opt/tools/shell/mysql_backup_test.sh
中。
定时执行
使用 crontab
配置每天凌晨3点15分执行备份:
15 3 * * * /opt/tools/shell/mysql_backup_test.sh >> /opt/tools/shell/mysql_backup_test.log 2>&1
使用备份包恢复数据库
方法1:解压 tar.gz
压缩包得到 sql
文件,然后在 mysql
中去恢复。
这部分内容需付费后浏览
方法2:直接导入
tar.gz
压缩包到 mysql
这部分内容需付费后浏览
参考文章
- 使用ossutil定时备份自建mysql数据库到阿里云OSS
- 阿里云OSS数据的工具ossutil官方文档
- shell生成随机字符的几种方法
- shell 中数组的定义和for循环遍历的方法
- Import .tar.gz gzipped mysql dumps in one line
- Skip certain tables with mysqldump
- mysql mysqldump 命令导出指定表的数据
- shell脚本获取今天、昨天、前天以及n天前的日期