docker部署的mysql使用binlog恢复数据

docker部署mysql使用binlog恢复数据

昨天早上打开网站发现数据全没了,一连数据库发现库没了,留下一个有一个勒索比特币的表,说48h内不把比特币打到他账户上就把数据拿去黑市卖啥的。当然我不怕他去卖,因为也没有任何敏感数据都是我的学习播客罢了,但这些是几万字的我创造的东西啊,一开始真的很绝望,绝望了一天,晚上解决了,记录下过程

一.binlog恢复过程

部署的时候一定要映射数据卷

  • 过程挺曲折的,最万幸的就是我用docker-compose编排的时候设定好了映射数据卷
  • 这其中/var/lib/mysql中的内容和数据恢复关系巨大,一定要映射这个文件

被攻击后还好这个数据卷还在,但是看不到我的数据库的文件夹了,因为是映射的数据卷,如果被映射的容器中将这个库删掉了,数据卷中的数据库也会消失

  • 但是万幸的是下方的binlog中有二进制存储的对数据库的各种操作,只要查看一下并确定一下需要执行的起始位置,就可以将之前的命令都再次执行一次,等于就恢复了

二.使用binlog恢复

1. 首先进入mysql容器内

docker ps #查看mysql容器的id
docker exec -it 容器id /bin/bash
mysql -uroot -p #登录
  • 之后可以用这个命令查看各个binlog命令中都记录了什么操作

2. 查看binlog内的信息

show binlog events in 'binlog.000003'; #我发现我binlog.00003有10M这么大,应该记录了被删库的过程在里面
  • 找到被删库的地方,往上找一个正常的操作,一般是以BEGIN到 COMMIT结尾,记住commit对应的结束位置的数字

3. 恢复

  • 之后要退出mysql命令窗,因为接下来要使用的mysqlbinlog是mysql内置的使用binlog恢复的工具,不是在mysql中进行,直接在这个容器中操作就行(一开始我傻傻的都在mysql命令中执行)

  • 全部执行的命令(就是将这整个binlog都执行)
# 命令格式: mysqlbinlog --no-defaults(如果不加这个他会说一些编码的问题) 之后是binlog所在的路径,这里是将/var/lib/mysql做了映射数据卷嘛,所以binlog也会在这里,总之就是binlog所在的路径 后面照填就行
mysqlbinlog --no-defaults /var/lib/mysql/binlog.000001 | mysql   -uroot -p

  • 只执行一段区间,如果要从头执行到一个地方结束,不写start只写stop即可
mysqlbinlog --no-defaults --start-position='起始位置' --stop-position='结束位置' /var/lib/mysql/binlog.000001 | mysql   -uroot -p

注意点:我这个数据库其实不是在binlog.000003中建立的,所以我是将binlog.000001和2都完整执行了一遍,3才能执行,3中需要指定执行的结束地方

三.一些坑

  • 一开始以为我的数据卷没了之类大,我就去docker volume ls,默认地址是/var/lib/docker/volumes/查看所有数据卷,之后发现里面一个mysql的都没有,我以为我数据卷没了,但其实这个数据卷没被删除,只是因为数据库那边的改变,有一定程度的被覆盖了,数据卷其实还在我一开始编排的时候映射的地方
  • 执行mysqlbinlog命令不是在mysql中执行,而是在这个容器下执行即可
  • 备份!备份!备份!
  • 学些安全,溯源一下,能把这黑客干翻最好
  • 就这么简单的网站都攻击,但我也有没做好的地方,mysql密码也太简单了哈哈哈哈哈哈
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值