【DB】MySQL版本5.7和8的区别,以及升级的留意事项

[复制链接]
发表于 2026-2-24 04:37:05 | 显示全部楼层 |阅读模式
1、MySQL版本5.7和8的区别

在数据库管理体系中,MySQL是一个广泛利用、开源的办理方案。它提供了强盛的功能,同时具有精良的性能和可扩展性。
MySQL 5的发布于2005年,在MySQL数据库的发展汗青中具有告急的里程碑意义。
MySQL 8于2018年发布,引入了浩繁新功能和改进,以提供更高性能、更强安全性和更丰富的功能。

重要来说,升级的来由有以下:

  • 性能提升级
    官方表现MySQL 8.0 的速率要比 MySQL 5.7 快 2 倍。MySQL 8.0 在读/写工作负载、IO 麋集型工作负载、以及高竞争工作负载时相比MySQL5.7有更好的性能。
  • 更强的NoSQL文档支持
    MySQL 从 5.7 版本开始提供 NoSQL 存储功能,现在在 8.0 版本中这部分功能也得到了更大的改进。该项功能消除了对独立的 NoSQL 文档数据库的需求,而 MySQL 文档存储也为 schema-less 模式的 JSON 文档提供了多文档事件支持和完备的ACID合规性。
  • 窗口函数
    也就是在满足某种条件的记载聚集上实验的特别函数。它可以用来实现多少新的查询方式。窗口函数与 SUM()、COUNT() 这种聚集函数雷同,但它不会将多行查询效果归并为一行,而 是将效果放回多行当中。即窗口函数不必要GROUP BY。窗口函数的利用,将大大进步相干的分析型场景的服从。
  • UTF-8编码
    从MySQL8.0开始,利用utf8mb4作来MySQL的默认字符集,并支持Unicode 9,默认字符集将从 latin1改为utf8mb4,默认定序collation将从latin1_swedish_ci改为utf8mb4_800_ci_ai;
  • 隐蔽索引
    可以将索引通过下令设置为隐蔽或表现。对于被隐蔽的索引,它不会被查询优化器所利用,我们可以利用这一功能,对相干的查询举行性能调试,通过隐蔽或表现,分析数据库性能差异的缘故原由,同时也可以去除无效的索引。这个跟Oracle内里设置索引失效时一样的。
  • 长期化设置
    MySQL8.0新增SET PERSIST的下令,该下令的设置值生存到数据目次下的mysqld-auto.cnf文件中,待重启后,读取该文件,用此中的设置覆盖缺省的设置文件,增补了SET GLOBAL下令只能暂时见效的不敷;
  • 重构BLOB
    重构BLOB加速了片断读取/更新利用,可以加速JSON数据的利用。大幅改进了对JSON的支持,添加了基于路径查询参数从JSON字段中抽取数据的JSON_EXTRACT()函数,以及用于将数据分别组合到JSON数组和对象中的JSON_ARRAYAGG()和JSON_OBJECTAGG()聚合函数。
  • 事件性数据字典
    完全脱离了MyISAM存储引擎,真正将数据字典放到InnoDB中的一些表中,不再必要 FRM、TRG、PAR 等文件;Information Schema如今以数据字典表的一个视图出现。也就是原则上可以不必要MyISAM数据表范例,体系表都可以放到InnoDB之中。
  • SQL脚色
    可以创建脚色,给用户设置或去除脚色,大大方便权限的管理。
  • 撤消查询缓存
    起首,查询缓存的效果取决于缓存的掷中率,只有掷中缓存的查询效果才气有改善,因此无法推测其性能。其次,查询缓存的另一个大题目是它受到单个互斥锁的掩护。在具有多个内核的服务器上,大量查询会导致大量的互斥锁争用。
2、MySQL 5.7升级8

mysql从5.7升级到8.0是支持的,但是只支持GA版本的升级,而且要求版本为5.7.9大概更高
在升级到8.0之前,发起升级到5.7的最新版本。仅仅支持从5.7版本升级到8.0,不支持5.6版本升级到8.0
根据版本厘革及官方升级教程,枚举留意事项:


  • 留意字符集设置。为了制止新旧对象字符集差异等的情况,可以在设置文件将字符集和校验规则设置为旧版本的字符集和比力规则。
  • 暗码认证插件变动。为了制止毗连题目,可以仍接纳5.7的mysql_native_password认证插件。
  • sql_mode支持题目。8.0版本sql_mode不支持NO_AUTO_CREATE_USER,要制止设置的sql_mode中带有NO_AUTO_CREATE_USER。
  • 是否必要手动升级体系表。在MySQL 8.0.16版本之前,必要手动的实验mysql_upgrade来完成该步调的升级,在MySQL 8.0.16版本及之后是由mysqld来完成该步调的升级。
升级前预备:


  • 1、备份数据(包罗当前的数据库和日记文件)
    1. --备份数据
    2. mysqldump -uroot -p ycapp_dflg_prod --single_transaction  --flush-logs --master-data=2 >/backup/ycapp.sql
    复制代码
  • 2、升级查抄
    mysqlcheck -u root -p --all-databases --check-upgrade
  • 3、查抄分区表(不支持分区的存储引擎)
    select table_schema,table_name from information_schema.tables where engine not in (‘innodb’,‘ndbcluster’) and create_options like ‘%partitioned’;
  • 4、在mysql数据库中,必须不存在与mysql8.0数据字典雷同名称的表
    全部同名的表必须要重定名。
  • 5、必须要不存在外键凌驾64字符的表
    假如存在,必须修改表。
  • 6、必须要确保不存在拥有ENUM大概SET列元素而且凌驾255字符大概1020字节长度的表和存储过程
  • 7、mysql5.7中必须不利用8.0不支持的特性。比方NDB引擎,8.0不再支持;部分启动选项不再支持:比方–ignore-db-dir已被移除。
  • 8、假如innodb利用了XA事件,确保全部XA事件提交大概回滚。
  • 9、假如存在加密的innodb表空间,实验语句
    alter instance rotate innodb master key;
  • 10、克制数据库
    mysqladmin -u root -p shutdown
升级过程:


  • 1、下载解压安装包
    官网下载对应版本的tar包,可通过wget下载大概当地下载后上传。
  • 2、实验升级步伐
    在mysql8.0.16版本后只必要利用新版本软件包启动MySQL Server,此时Server会主动查抄并实验第一步升级利用,升级数据字典表。
  • 3、重启数据库并验证
  • 4、卸载旧mysql数据库
  • 5、设置MySQL8 自启动服务脚本
  • 6、设置情况变量
参考资料:1, 2, 3

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表