【MySQL】记录docker环境下mysql8.0.33版本通过binlog恢复数据库过程

首先要确定是否已经开启了binlog日志,我这里用的8.0.33版本,myql8是默认开启binlog的
 查看binlog文件内容,找到你要恢复的开始节点和结束节点
 show binary logs; #获取binlog文件列表
 show binlog events in 'binlog.000026';#查看指定binlog文件的内容 ,通过查看文件找到开始和结束节点(Pos字段)
 // 下面是恢复命令,在mysql容器里执行, 括号里是解释,使用时去掉
 mysqlbinlog --start-position=447(开始节点---上一步的pos字段) --stop-position=126726(结束节点---上一步的pos字段) --database=xxxx(数据库名称) /var/lib/mysql/binlog.000026(这里是mysql容器里对应binlog文件的路径) | mysql -uroot -p'root(数据库密码)' xxxx(数据库名称)

如果上面执行的时候报这个错

mysqlbinlog: command not found

则可以用这个方法(来自下面的文章,非常感谢这位朋友解决了我的燃眉之急,我在此基础上增加了上面的步骤,希望可以帮助更多的人)
docker 的mysql容器中没有mysqlbinlog

tips:mysql一些容器版本有自带mysqlbinlog ,一些没有,随手测试了一些版本,如下:
mysql 5.7
	有的:
		mysql:5.7.10(强烈推荐),mysql:5.7.31,mysql:5.7.32
	没有的:
		mysql:5.7.38,mysql:5.7.40,mysql:5.7.42

mysql 8 的好像要debian后缀的才有mysqlbinlog 
只测试了一个 mysql:8.0.32-debian(有的)

*****下面详细是步骤*****
### 第一步,拉取镜像 mysql:8.0.32-debian
docker pull mysql:8.0.32-debian

### 第二步,启动镜像
# 5.7版本 
docker run -d --name=del_mysql -e MYSQL_ROOT_PASSWORD=123 mysql:5.7.10
# 8.0版本
docker run d --name=del_mysql -e MYSQL_ROOT_PASSWORD=123 mysql:8.0.32-debian

### 第三步,将mysqlbinlog  文件复制到宿主机
# 随便找个本机地址存放,这里写 / (linux)或者 C:\(windows)
docker cp del_mysql:/usr/bin/mysqlbinlog  C:\
# or
docker cp del_mysql:/usr/bin/mysqlbinlog  /

### 第四步,将mysqlbinlog  文件复制到你的mysql容器
#复制到你的mysql容器
docker cp c:\mysqlbinlog 你的mysql容器id或者名字:/usr/bin/
# or
docker cp /mysqlbinlog 你的mysql容器id或者名字:/usr/bin/

最后就是重新执行恢复数据的命令即可



评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值