Mysql5.7大限将至升级Mysql 8.0过程记录(未完)

一、前言

在这里插入图片描述
时间很快,到2023年10月底,MySQL 5.7就到了它的EOL(End of Life),届时将不会提供任何补丁,无法应对潜在的安全风险;是时候和 MySQL 5.7 说再见了!!!!回顾自Mysql5.7 版本2015年10月发布,它带来很多新的特性,比如:默认引擎改成了InnoDB,更新了安全策略,性能方面的提升,新增JSON数据类型,增强了sql模式及用户权限等等强大的功能。因此,这个版本自从发布之后一直受到业界的欢迎,也成为了众多开发者的首选数据库版本,至今仍被广泛使用于很多中小生产环境。各个MySQL发行版本官方提供5年的支持期限,MySQL和Percona还提供额外的3年补丁更新期限,总计提供8年的服务支持。2018年4月,MySQL 8.0 正式发布。

在这里插入图片描述

相关资源:Mysql 5.7.43发布说明、Mysql版本差异说明、Mysql平台兼容性、Mysql文档中心、Mysql5.7升级说明、升级Mysql8.0官网说明、Mysql EOL、Oracle lifetime-support、MariaDB、brary-mariadb、percona生命周期说明、版本对比、postgresql、Mysql8 LTS

二、Mysql生命周期

Mysql产品的生命周期分为三个支持阶段,标准支持服务、延伸支持服务和持续支持服务,一旦进入延伸支持阶段,MySQL仅在认为有必要升级的时候才会提供补丁,通常是为了解决安全性问题。对应这三个阶段的时间分别是产品从GA(正式发布)开始1-5年、6-8年及9年以上。
在这里插入图片描述
如下图所示,今年的10月份,5.7版本会停止延伸阶段支持,即2023年10月以后,停止发布补丁,Oracle 将不再为 MySQL 5.7 提供官方更新、错误修复或安全补丁。
在这里插入图片描述

ReleaseRelease DateEnd of life
MySQL 8.0April 19, 2018
MySQL 8.0April 19, 2018
MySQL 5.7October 21, 2015October 21, 2023
MySQL 5.6February 5, 2013February 5, 2021
MySQL 5.5December 3, 2010December 3, 2018
MySQL 5.1November 14, 2008December 31, 2013
MySQL 5.0January 9, 2012

Mysql 8.0x版本的长期稳定版(LTS)生命周期图,途中蓝色部分。

在这里插入图片描述

2.1、Mysql 5.7和8.0特性

1)MySQL 8.0 的新特性

  1. 原子 DDL
    一种原子数据定义语言 (DDL) 语句,用于组合对数据字典、存储引擎操作等所做的更新。

  2. 加密默认值
    已为表加密全局定义和实施加密默认值。 “default_table_encryption”变量用于为新创建的模式定义加密默认值。在创建模式时,可以借助“DEFAULT ENCRYPTION”子句定义模式的默认加密。默认密码策略变更。

  3. 资源组
    可以创建和管理资源组,并且服务器能够将线程分配给在服务器内运行的特定组的资源。组属性可用于控制资源、限制或授予线程使用资源的权限等。支持窗口函数,支持Hash join。

  4. 默认字符集
    版本更新后,默认字符集由‘latin1’改为‘utf8mb4’。新字符集“utf8mb4”有多个排序规则,其中包括“utf8mb4_ja_0900_as_cs”,这是 MySQL 中第一个可用于 Unicode 的日语特定排序规则。MyISAM系统表全部换成InnoDB表。支持不可见索引,支持直方图。sql_mode参数默认值变化。

  5. JSON 增强
    对 MySQL 的 JSON 功能进行了 JSON 增强,其中添加了“->>”,即内联路径运算符。这相当于对调用‘JSON_EXTRACT()’函数后得到的结果调用‘JSON_UNQUOTE()’函数。

  6. 对 DBA 的控制
    新增角色管理,DBA 已被授予根据工作负载修改属性的控制权。服务器确定虚拟 CPU 是否可用,具有所需权限的 DBA 可以使用这些 CPU 并将它们分配给某些资源组和线程。

2.2、MySQL5.7 vs 8.0

据相关经验表明,性能上测试如下,仅供参考:

1、读写模式下,mysql5.7.22和mysql8.0.15tps、qps性能差不多,mysql8.0.15在120线程并发时,性能出现了下降抖动:
2、只读模式下,mysql5.7.22的tps、qps比mysql8.0.15好1/3左右;并发线程数增加后,tps、qps并没有随着增加,反而出现了下降的趋势:
3、只写模式下,随着并发数的上升,mysql5.7.22的性能比mysql8.0.15好1/4左右。
4、读写模式下,并发数低时,mysql5.7.22性能好于mysql8.0.15;并发数比较高时,mysql8.0.15性能好于mysql5.7.22;在80线程的并发以上时,性能开始下降。
5、只读模式下,mysql5.7.22性能比mysql8.0.15好1/3左右;随着并发数的上升,性能也没有上升,反而有下降的趋势。
6、只写模式下,mysql5.7.22的tps抖动比较大;mysql5.7.22的qps比mysql8.0.15好1/3左右。

三、升级Mysql到8.0

3.1、升级前准备:

根据MySQL8.0官方升级教程,列举出以下几点注意事项:

1、注意字符集设置。为了避免新旧对象字符集不一致的情况,可以在配置文件将字符集和校验规则设置为旧版本的字符集和比较规则。
2、密码认证插件变更。为了避免连接问题,可以仍采用5.7的mysql_native_password认证插件。
3、sql_mode支持问题。8.0 版本sql_mode不支持NO_AUTO_CREATE_USER,要避免配置的sql_mode中带有NO_AUTO_CREATE_USER。
4、是否需要手动升级系统表。在MySQL 8.0.16版本之前,需要手动的执行mysql_upgrade来完成该步骤的升级,在MySQL 8.0.16版本及之后是由mysqld来完成该步骤的升级。

升级前检查工具,更多参看升级检查

wget https://downloads.mysql.com/archives/get/p/23/file/mysql-8.0.34-1.el7.x86_64.rpm-bundle.tar #解压文件
tar zxvf mysql-8.0.34-el7-x86_64.tar.gz -C /usr/local/mysql8.0/ 
#更改目录属性
chown -R mysql.mysql /usr/local/mysql8.0/#MySQL提供mysql-shell验证方式,可以下载后进行验证,没有0.34:
wget https://cdn.mysql.com/archives/mysql-shell/mysql-shell-8.0.33-linux-glibc2.12-x86-64bit.tar.gztar -xf mysql-shell-8.0.33-linux-glibc2.12-x86-64bit.tar.gz
cd mysql-shell-8.0.33-linux-glibc2.12-x86-64bit/bin
./mysqlsh -uroot -p'123456' -S /tmp/mysql.sock -e "util.checkForServerUpgrade()"
#全备份
mysqldump -uroot -p'123456'  --all-databases  --lock-tables=0 > all.sql.bak.20231012
或
mysqldump -uroot -p'123456'  --all-databases  --single-transaction > all.sql.bak.20231012
3.2、配置部署
vim /etc/my.cnf [client]
port=3306
socket=/tmp/mysql.sock [mysqld]
log-bin=mysql-bin
server-id=100
character_set_server=utf8
init_connect='SET NAMES utf8'
socket=/tmp/mysql.sock
log-error=/var/log/mysqld.log
pid-file=/run/mysqld/mysqld.pid
innodb_data_file_path=ibdata1:200M:autoextend
innodb_log_files_in_group=2
innodb_log_file_size=1572864000
innodb_page_size=16384
innodb_undo_directory=./
innodb_undo_tablespaces=0
#不区分大小写
lower_case_table_names=1
#sql_mode要注意,8.0中有变化,不支持NO_AUTO_CREATE_USER,新增sql_mode中的NO_ENGINE_SUBSTITUTION
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION 
max_connections=5000
default-time_zone = '+8:00'
max_allowed_packet = 32M
collation-server = utf8_general_ci
basedir=/usr/local/mysql8.0
datadir=/usr/local/mysql/data
skip_ssl
default_authentication_plugin=mysql_native_password

登录旧版本的数据库

mysql -uroot -p'123456' 
#查看mysql版本
mysql> select version();
mysql> show variables like 'innodb_fast_shutdown';
#确保数据都刷到硬盘上,更改成0
mysql> set global innodb_fast_shutdown=0;
mysql> shutdown;
mysql> exit;Bye

使用安全模式启动MySQL 8.0

/usr/local/mysql8/bin/mysqld_safe --defaults-file=/etc/my.cnf --user=mysql & 
#登录新版本数据库
mysql -uroot -p'123456'
mysql> select version();
mysql> exit;
#配置环境变量
vim /etc/profile #增加下面的内写
export PATH=$PATH:/usr/local/mysql8/bin
source /etc/profile#客户端验证
which mysql
mysql -V
#导入数据
待补充#修改密码
mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH MYSQL_NATIVE_PASSWORD BY 'xxxxx';#配置启动项
cp /usr/local/mysql8/support-files/mysql.server /etc/init.d/mysqld
# 修改启动项目
vim /etc/init.d/mysqld  # 修改目录位置
basedir=/usr/local/mysql8
datadir=/usr/local/mysql/data# 添加到启动列表 
chkconfig --add mysqld
# 刷新启动信息
systemctl daemon-reload
# 查看启动项列表
chkconfig --list
#启动找不到pid
mkdir /var/tmp/mysql
touch /var/tmp/mysqlmysqld.pid
chown -R mysql.mysql /var/tmp/mysqlmysqld.pid

更多参见官网升级说明:跳转进入

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/132908.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深入理解强化学习——序列决策(Sequential Decision Making)

分类目录:《深入理解联邦学习》总目录 在本文中我们将介绍序列决策(Sequential Decision Making)过程中的各个过程。 智能体与环境 强化学习研究的问题是智能体与环境交互的问题,下图左边的智能体一直在与下图右边的环境进行交互…

收银系统商品定价设计思考

一、背景 因为门店系统里商品总共也就几万款,一直以来都是根据条码由总部统一定价销售,现在有加盟店,各门店也有进行各自促销活动的需求,这就需要放开门店自主定价权,所以近段时间系统在商品定价上做了扩展。 二、商…

【tomcat、java】

java&#xff1a;maven配置 1.安装插件 <build><plugins><plugin><groupId>org.apache.tomcat.maven</groupId><artifactId>tomcat7-maven-plugin</artifactId><version>2.1</version><configuration><port&…

基于web的酒店客房管理系统

目录 前言 一、技术栈 二、系统功能介绍 用户信息管理 会员信息管理 客房信息管理 收藏客房管理 用户入住管理 客房清扫管理 三、核心代码 1、登录模块 2、文件上传模块 3、代码封装 前言 随着信息技术在管理上越来越深入而广泛的应用&#xff0c;管理信息系统的实施…

Android组件通信——ActivityGroup(二十五)

1. ActivityGroup 1.1 知识点 &#xff08;1&#xff09;了解ActivityGroup的作用&#xff1b; &#xff08;2&#xff09;使用ActivityGroup进行复杂标签菜单的实现&#xff1b; &#xff08;3&#xff09;使用PopupWindow组件实现弹出菜单组件开发&#xff1b; 1.2 具体…

2023全国大学生软件测试大赛开发者测试练习题99分答案(ScapegoatTree2023)

2023全国大学生软件测试大赛开发者测试练习题99分答案&#xff08;ScapegoatTree2023&#xff09; 题目详情题解代码&#xff08;直接全部复制到test类中即可&#xff09; 提示&#xff1a;该题只需要分支覆盖得分即可&#xff0c;不需要变异得分 题目详情 题解代码&#xff0…

C++——string

目录 STL STL六大组件 标准库中的string类 string类 string类常用接口 构造函数 下标遍历[] 迭代器 范围for push_back() append() insert() operator pop_back() erase() reserve resize clear c_str() substr() find() rfind() find_first_of getline str…

腾讯云优惠券种类、领取方法及使用教程分享

腾讯云是国内领先的云计算服务提供商&#xff0c;为用户提供丰富的云计算产品和服务。为了吸引更多用户使用腾讯云的产品和服务&#xff0c;腾讯云会定期推出各种优惠券活动。本文将为大家介绍腾讯云优惠券的种类、领取方法及使用教程。 一、腾讯云优惠券种类介绍 腾讯云优惠券…

STM32 CubeMX ADC采集 单通道,多通道,内部温度(轮询,DMA,中断)(HAL库)

STM32 CubeMX ADC采集&#xff08;HAL库&#xff09; STM32 CubeMX STM32 CubeMX ADC采集&#xff08;HAL库&#xff09;ADC介绍ADC主要特征Vref的电压&#xff08;2.4~3.6&#xff09;就是ADC参考电压2.4V&#xff08;相当于秤砣&#xff09; 最小识别电压值&#xff1a;2.4/4…

goland 旧版本使用1.19环境

C:\Go\src\runtime\internal\sys\zversion.go // Code generated by go tool dist; DO NOT EDIT.package sysconst StackGuardMultiplierDefault 1const TheVersion go1.19引入其他包的标识符 package mainimport ("fmt""gotest/test")func main() {f…

Stm32_标准库_8_ADC_光敏传感器_测量具体光照强度

ADC简介 测量方式 采用二分法比较数据 IO通道 ADC基本结构及配置路线 获取数字变量需要用到用到光敏电阻的AO口&#xff0c;AO端口接在PA0引脚即可 测得的模拟数据与实际光照强度之间的关系为 光照强度 100 - 模拟量 / 40;代码&#xff1a; 完整朴素代码&#xff1a; #in…

leetcode-电话号码组合(C CODE)

1. 题目 给定一个仅包含数字 2-9 的字符串&#xff0c;返回所有它能表示的字母组合。答案可以按 任意顺序 返回。 给出数字到字母的映射如下&#xff08;与电话按键相同&#xff09;。注意 1 不对应任何字母。 示例 1&#xff1a; 输入&#xff1a;digits “23” 输出&#…