docker的mysql5.6与5.7兼容的处理

时间:2024-03-31 20:23:32

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
docker的mysql5.6与5.7兼容的处理
mysql 5.6
docker的mysql5.6与5.7兼容的处理
查看 docker容器,进入容器配置文件,并将其改为与5.6相同docker的mysql5.6与5.7兼容的处理
docker的mysql5.6与5.7兼容的处理
重启docker服务,然后将mysql5.6的数据导入到mysql5.7,成功导入!