前言
最近在做自己的个人博客,然后有一个功能是记录每天发表的文章数量,结果当天发布的文章却没有记录到,因为我部署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文件出来,就避免掉很多麻烦了!!!
标签:容器,ibdata1,数据库,mysql,docker,ib,数据 From: https://blog.csdn.net/A567500/article/details/140267582