首先要确定是否已经开启了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/
最后就是重新执行恢复数据的命令即可