docker的mysql5.6与5.7兼容的处理
由于mysql5.7与mysql5.6由于升级的问题有不兼容的情况,特别是在将5.6的数据转到5.7的时会报错,导致导数据失败。
先贴一下docker-compose安装mysql 5.7的脚本(5.6的docker安装有innodb报错)。
version: '3'
services:
mysql:
image: docker.io/mysql:5.7
container_name: cust_mysql
volumes:
- ./volumn/mysql/db:/var/lib/mysql
- ./volumn/mysql/conf/my.cnf:/etc/my.cnf
ports:
- "3306:3306"
restart: always
privileged: true
environment:
- MYSQL_ROOT_PASSWORD=root
- MYSQL_DATABASE=root
挂载文件的内容为:
[mysqld]
user=mysql
default-storage-engine=INNODB
character-set-server=utf8
innodb_buffer_pool_size=256m
max_connections = 1000
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
查了一下,myql 5.6与mysql5.7的区别改动较大
新特性列表,主要改进:提升 MySQL 安全性
改进了安装程序
MySQL 5.6 中,mysql_install_db 在数据库创建的时候提供选项来生成 random password。
MySQL 5.7.4 中,可以跳过 -skip-random-password 选项来默认生成随机密码。
MySQL 5.7.5 中,还是默认生成随机密码,但是选项修改为 –insecure。
而现在,MySQL 5.7.6 废弃了 mysql_install_db,使用 mysqld –initialize (formerly known as “mysqld –bootstrap,” now deprecated.) 替代。
mysql-server-5.6:
1)InnoDB现在可以限制大量表打开的时候内存占用过多的问题(比如这里提到的)(第三方已有补丁)
2)InnoDB性能加强。如分拆kernel mutex;flush操作从主线程分离;多个perge线程;大内存优化等
3)InnoDB死锁信息可以记录到 error 日志,方便分析
4)MySQL5.6支持延时复制,可以让slave跟master之间控制一个时间间隔,方便特殊情况下的数据恢复。
5)表分区功能增强
6)MySQL行级复制功能加强,可以降低磁盘、内存、网络等资源开销(只记录能确定行记录的字段即可)
7)Binlog实现 crash-safe
8)复制事件采用crc32校验,增强master/slave 复制数据一致性
在现实环境中,导数据出错的问题多半在时间格式不兼容, 分别查询了5.6与5.7的sql_model,select @@sql_mode
发现两版本的设置是有差别的。
mysql 5.7
mysql 5.6
查看 docker容器,进入容器配置文件,并将其改为与5.6相同
重启docker服务,然后将mysql5.6的数据导入到mysql5.7,成功导入!