由于某项目需要用到 mysql 5.7的新功能json类型的字段
为了快速搭建,做了不太稳定的做法。
我的myql是映射到本地的 ~/code/mysql
docker pull mysql/5.7
下载好mysql5.7之后,停掉5.6
直接把mysql5.7的数据映射到本地
docker run -it -d --volumes-from codedata --network docker_mynetwork --ip 172.20.0.7 -v /Users/pengyongsheng/code/mysql:/var/lib/mysql -p 3306:3306 --name mysql57 -e MYSQL_USER=root -e MYSQL_PASSWORD=root -e MYSQL_ROOT_PASSWORD=root mysql:5.7
事故
一开始的运行还很正确的,后面出现打开不了tables;
Navicat for mysql 打开只能查看到information_schema数据库,而且只剩下CHARACTER_SETS。
解决方案
- 先将本地的~/code/mysql 重命名~/code/mysql2数据文件夹备份一下
把~/code/mysql清空,删除mysql5.7容器后,重新挂载,这时候产生了新的文件夹数据。 把备份的好的数据库文件~/code/msyql2里的数据库重新拷贝到~/code/mysql目录下。
打开查看,其实是能正常查看到数据库了。成功了第一步。
进一步打开数据库的table , 提示 Table '' doesn't exist 。
嗯。。遇到了新问题。 经查找资源,innodb的问题。停掉服务后,将mysql2的ibdata1文件夹拷到mysql数据文件夹中。这样,问题得到了解决。
总结
- mysql的升级,因为数据会记录版本和服务器的原因,不能直接切换容器,要么在原来的容器上升级mysql server。
- 使用Innodb会产生三个文件
.ibd:包含每个table的数据和索引
.frm:用来描述table的结构等
ibdata1:包含所有table的字典和历史操作
ibdata1文件会记录MySQL中所有InnoDB数据库中table的字典和历史操作,所以要copy ibdata1文件过来。