文章 28
评论 59
浏览 10714
Linux定时备份Docker的MySQL数据库

Linux定时备份Docker的MySQL数据库

论备份的重要性

最近遇到了好几个网友出现MySQL数据库勒索事件,本人前两天也遇到,事情大概这样子的:
大早上起来,打开网站,发现500错误,这就很尴尬了,感觉查看日志发现怪事,数据库找不到了(PS:心里很慌,原因之前就想着备份,一直给忘了) 打开数据库真的不见了,多了一个不知道的库,里面有一张WARNING表,内容全是英文(PS:额,看不懂),去翻译,彻底惊呆了!比特币勒索(PS:心里一万个小马跑过)

image.png
image.png

接着百度发现在17年的时候又一波比特币勒索事件,好多数据库都被黑了,要求花钱赎回......
这件事情让我认识到数据库备份的重要性,哎,赶紧重新搞一套出来,幸亏博文都有备份,哈哈...

解决

由于本人使用的是docker部署的MySQL,所以去百度命令
docker exec -it mysql mysqldump -uroot -p123456 databases > /backup/data_`date +%Y%m%d%H%M%S`.sql;
拿着命令去跑了下,可以备份,完美

定时备份

想着不能每天手动处理吧,然后就做了一个定时任务,每天备份一次,不说了,上操作:

  1. 新建脚本mysql_bak.sh,将以下命令粘贴;
# mysql 为安装mysql的docker
#!/bin/bash
docker_name=mysql
data_dir="/data/backup/mysql/"
docker exec -it $docker_name mysqldump -uroot -p123456 --all-databases > "$data_dir/solo_`date +%Y%m%d%H%M%S`.sql"
# 删除7天以前的备份
find $data_dir -mtime +7 -name 'solo_*.sql' -exec rm -rf {} \;

备注

  • docker_name:MySQL容器名称
  • data_dir:保存路径
  • --all-databases:表示所有的数据库都备份,可以备份固定的数据库,直接替换就可以了
  • -mtime +7: 按照文件的更改时间来查找文件,+7表示文件更改时间距现在7天以前;如果是 -mmin +7表示文件更改时间距现在7分钟以前
    *-exec rm -rf {}; 表示执行一段shell命令,exec选项后面跟随着所要执行的命令或脚本,然后是一对儿{},一个空格和一个,最后是一个分号

2.在定时任务中添加新的任务规则,crontab -e,将下面命令写入并报存:wq

0 0 * * * /bin/sh /data/mysql_bak.sh >> /data/logs/mysql_bak.log 2>&1

PS:/data/logs/mysql_bak.log :输出日志

结束

学习是一种进步态度,笔记是一种成长的动作


标题:Linux定时备份Docker的MySQL数据库
作者:JssDream
地址:https://www.hjava.cn/articles/2019/08/28/1566980010076.html

  • JssDream 回复»

    tty(终端设备的统称):
    tty一词源于Teletypes,或teletypewriters。
    这个的意思是说后台linux执行的时候没有终端设备。
    我们一般执行docker里的命令时候都喜欢加上-it 这个参数,这里的-it 就是表示终端设备。

  • JssDream 回复»

    在crontab定时任务执行脚本出现问题:

    the input device is not a TTY
    

    原因出在:

    docker exec -it $docker_name mysqldump -uroot -p123456 --all-databases > "$data_dir/solo_`date +%Y%m%d%H%M%S`.sql"
    

    去掉命令中的t,就可以继续执行了

静以修身,俭以养德