大意了,数据库数据无了,记录一下通过ibdata1恢复数据的过程

前言

最近在做自己的个人博客,然后有一个功能是记录每天发表的文章数量,结果当天发布的文章却没有记录到,因为我部署java到docker时添加文章也会造成时间会少8小时,马上联想到了是docker的mysql容器的时区问题,从网上找了修改容器内的时区,为了一劳永逸,直接把容器删了重新设置时区,结果忘记备份了,记录一下恢复数据的过程。

前提

必须有将mysql的数据挂在到数据卷上,然后需要有原先的表结构,这个我在本地电脑上也有一个数据库,只是双方数据不同,所以直接导出了一个表结构。

步骤

1.误删容器后,首先找到挂在的数据卷位置,可以通过该命令进行数据卷查看

docker volume ls

一般数据卷的位置在/var/lib/docker/volumes,可以进入查看

cd /var/lib/docker/volumes/

2.通过finalshell将数据卷的数据全部拷贝到本地电脑中。

其中的核心文件就是ibdata1以及你的数据库,这里我的数据库是llpyblog

3.通过以下命令删除原先的数据卷

docker volume rm ‘数据卷名称’

4.然后重新创建数据卷并启动容器,就是这个-e TZ=Asia/Shanghai,让我忙活一上午

docker volume create mysqldata

docker run --name mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
-e TZ=Asia/Shanghai \
-p 3306:3306 \
-v mysqlcnf:/etc/mysql/conf.d/hmy.cnf \
-v mysqldata:/var/lib/mysql \
-d mysql:5.7.25

创建完后,通过navicat连接上,创建好数据库后运行sql文件,初始化好表结构。

5.进入数据卷位置

cd /var/lib/docker/volumes/mysqldata

会出现一个你创建的数据库名称的文件,把该文件夹删除

 并删除以下三个文件

6.将之前拷贝到本地电脑的同名的llpyblog文件夹拷贝一份进来,再将ibdata1拷贝进来


注意:重要的事情说3遍

不要将ib_logfile0和ib_logfile1一同拷贝,否则不能启动mysql容器,我在这里踩了很久的坑,差点放弃。

不要将ib_logfile0和ib_logfile1一同拷贝,否则不能启动mysql容器,我在这里踩了很久的坑,差点放弃。

不要将ib_logfile0和ib_logfile1一同拷贝,否则不能启动mysql容器,我在这里踩了很久的坑,差点放弃。

7.重启mysql容器

docker stop mysql
docker start mysql

重启后重新进入navicat,可看到数据已经恢复。

再次访问网站,看到数据恢复,舒服了!!!

总结

在做一些操作之前,记得先备份好数据,如果一开始直接转储一份sql文件出来,就避免掉很多麻烦了!!!

  • 30
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值