哈喽,又和大家见面了,上节提到了关注我一类的问题,虽然结果不是很理想,但是只要有一位朋友支持,我就不能放弃!好了,话不多说,开整!

innodb持久性原理 mysql mysql如何实现持久化_innodb持久性原理 mysql

在上节的Docker数据卷之Mysql持久化中,我们测试完成了关于Mysql数据持久化的问题的,这节呢,我们再来探讨下,如何让这些持久化的数据再次的展示出来?

首先在上个容器中创建数据库db_user,然后将容器删除:然后可以看到主机的mysql02文件夹下面是有这个文件的:

innodb持久性原理 mysql mysql如何实现持久化_mysql_02

然后我们再创建一个新的mysql03的数据库容器:

innodb持久性原理 mysql mysql如何实现持久化_innodb持久性原理 mysql_03

然后使用navicat进行连接:然后我们创建一个新的数据db_3309,为啥要创建这个库和数据表是为下面做铺垫的!

innodb持久性原理 mysql mysql如何实现持久化_数据库_04

然后大家注意了,坑来了:这个地方要特别注意几个问题:问题1:首先要将新建的容器停掉:docker stop 容器id;问题2:将mysql02中的db_test复制到mysql03的data中,注意了,注意了,ibdata1这个文件也一定要复制过去,因为我们使用的“InnoDB”类型,这种类型的一个表在磁盘上只对应一个“*.frm”文件,不像MyISAM那样还“*.MYD,*.MYI”文件。所以这个也到复制过去;问题3:说下 为什么上一步,要在新建的容器中创建一个新的数据库,因为mysql03中的data文件下也有ibdata1的,如若将mysql02中的这个文件拷贝过去并且overwrite的话,那么mysql03中我们新建的数据库是不是就没有了呢?

innodb持久性原理 mysql mysql如何实现持久化_innodb持久性原理 mysql_05

带着这些问题和坑,我们开始测试:首先启动这个新的容器:docker start 容器id;

在navicat中去点击db_user,这个时候弹出一个小问题,没有读写权限:设置下,到mysql03的data文件下执行:chmod -R 777 db_user! 问题解决!

innodb持久性原理 mysql mysql如何实现持久化_innodb持久性原理 mysql_06

然后先看下db_user这个数据库:我们可以看到数据库和表中的数据都是存在的:

innodb持久性原理 mysql mysql如何实现持久化_数据库_07

然后在看下我们之前建的数据库是否还在,数据是否在都在呢:

innodb持久性原理 mysql mysql如何实现持久化_innodb持久性原理 mysql_08

很显然这个地方,数据是没有的,被替换掉了,所以在这个地方一定要注意这点!

然后即使使用cat将两个文件夹中的ibdata1 进行内容合并,依旧会出现上述的情况,所以大家还是要注意下!

上述,我提到的坑,大家一定要注意,千万千万要避免出现删库跑路的时候,毕竟数据的重要性实在是不用多说了!

技术,博大精深,所有大家有好的见解,希望不要吝啬,积极留言,大家一起探讨,一起进步吧!