作者: kideny 访问次数: 560 创建时间: 2023-01-05 23:43:21 更新时间: 2023-11-29 06:19:29
本地Docker开发项目,由于单表数据量太大,在复制数据的时候,经常因为硬件问题导致数据库崩溃,无法启动。ibd文件的表空间id,也就是tablespace id直接变成0,直接无法启动数据库。
这种情况下,我知道的方法就是使用 innodb-force-recovery=1 强制启动数据库。然后把出问题的表删掉,然后再新建表,通过Mysqlbinlog恢复数据。下面分享一下,如何在Docker环境下通过Mysqlbinlog恢复数据。
第一点:在对数据库进行大的操作之前,一定要记得备份数据和表结构
比如我的项目,会在几个小时内增加上GB的数据,然后我还经常因为单表数据量太大导致MySQL崩溃。在大的操作之前,一定要记得备份数据和表结构。
因为任何对数据和表结构的操作,都会被binlog记录下来,为了不引起恢复数据的时候不必要的麻烦,一定要记得备份数据和表结构。
第二点:Oracle官方的MySQL镜像从8.0.24开始不包含Mysqlbinlog工具了
需要在env环境中,把MySQL的版本号改成debian的。比如说8.0.31-debian这样的写法。Debian的Docker镜像还包括mysqlbinlog工具。
第三点:mysqlbinlog恢复数据的指令
首先登录镜像,不要通过mysql进入命令行。而是在root账户下。使用如下指令:
关于这个指令,介绍的文章很多,这里就不赘述了。
建议直接复制这个指令,否则会各种报错的。
总结
在本地通过mysqlbinlog恢复数据,速度还是挺快的。1GB的二进制文件,一局王者荣耀的时间就完成了。
语言: zh-CN
翻译人员:
原作者:
转载地址:
源网址:
版权: 本站所有内容, 版权归原作者所有。发表原创内容将会获得现金奖励, 并且随着时间倍数增长, 请了解我们的内容奖励计划。