当前位置: 首页 > 编程日记 > 正文

mysql 5.6 uf8mb4_MySQL5.7升级到8.0过程详解

前言:

不知不觉,MySQL8.0已经发布好多个GA小版本了。目前互联网上也有很多关于MySQL8.0的内容了,MySQL8.0版本基本已到稳定期,相信很多小伙伴已经在接触8.0了。本篇文章主要介绍从5.7升级到8.0版本的过程及注意事项,有想做版本升级的小伙伴可以参考下。

1.升级前准备及注意事项

首先,我们要大概了解下MySQL5.7和8.0有哪些不同,参考官方文档和其他网友文章,概括总结出MySQL8.0以下几点新特性:默认字符集由latin1变为utf8mb4。

MyISAM系统表全部换成InnoDB表。

JSON特性增强。

支持不可见索引,支持直方图。

sql_mode参数默认值变化。

默认密码策略变更。

新增角色管理。

支持窗口函数,支持Hash join。

根据版本变化及官方升级教程,列举出以下几点注意事项:注意字符集设置。为了避免新旧对象字符集不一致的情况,可以在配置文件将字符集和校验规则设置为旧版本的字符集和比较规则。

密码认证插件变更。为了避免连接问题,可以仍采用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来完成该步骤的升级。

2.具体升级过程

下面以Linux系统为例,展示下具体升级过程。我的系统是CentOS7.7,原版本是MySQL5.7.23,以In-Place方式直接升级到MySQL8.0.19。

2.1 下载解压安装包

官网下载对应版本的tar包,可通过wget下载或者本地下载后上传。下载地址:

https://downloads.mysql.com/archives/community/

选择mysql-8.0.19-linux-glibc2.12-x86_64.tar.xz

执行以下步骤解压tar包:

# 安装包上传至原安装包目录下 我的是/usr/local/

cd /usr/local/

# 解压安装包

xz -d mysql-8.0.19-linux-glibc2.12-x86_64.tar.xz

tar -xvf mysql-8.0.19-linux-glibc2.12-x86_64.tar

# 文件夹重命名为mysql8

mv mysql-8.0.19-linux-glibc2.12-x86_64 mysql8

# 更改文件夹所属

chown -R mysql.mysql /usr/local/mysql8/

2.2 更改配置文件my.cnf

因5.7版本与8.0版本参数有所不同,为了能顺利升级,我们需要更改部分配置参数。主要注意sql_mode、basedir、密码认证插件及字符集设置,其他参数最好还是按照原5.7的来,不需要做调整。下面展示下更改后的配置文件:

# 最后几个for8.0的参数要格外注意

[mysqld]

user = mysql

datadir = /data/mysql/data

port = 3306

socket = /data/mysql/tmp/mysql.sock

pid-file = /data/mysql/tmp/mysqld.pid

tmpdir = /data/mysql/tmp

skip_name_resolve = 1

max_connections = 2000

group_concat_max_len = 1024000

lower_case_table_names = 1

log_timestamps=SYSTEM

max_allowed_packet = 32M

binlog_cache_size = 4M

sort_buffer_size = 2M

read_buffer_size = 4M

join_buffer_size = 4M

tmp_table_size = 96M

max_heap_table_size = 96M

max_length_for_sort_data = 8096

default_time_zone = '+8:00'

#logs

server-id = 1003306

log-error = /data/mysql/logs/error.log

slow_query_log = 1

slow_query_log_file = /data/mysql/logs/slow.log

long_query_time = 3

log-bin = /data/mysql/logs/binlog

binlog_format = row

log_bin_trust_function_creators = 1

gtid_mode = ON

enforce_gtid_consistency = ON

#for8.0

sql_mode = STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION

character-set-server = utf8

collation_server = utf8_general_ci

basedir = /usr/local/mysql8

skip_ssl

default_authentication_plugin=mysql_native_password

2.3 执行升级程序

所有前置工作准备好后就可以开始正式升级了,不过升级前还是建议先全库备份下。万事俱备后,按照如下指示进行正式升级。

# 进入原5.7 mysql命令行 正确关闭数据库

mysql> select version();

+------------+

| version() |

+------------+

| 5.7.23-log |

+------------+

1 row in set (0.00 sec)

mysql> show variables like 'innodb_fast_shutdown';

+----------------------+-------+

| Variable_name | Value |

+----------------------+-------+

| innodb_fast_shutdown | 1 |

+----------------------+-------+

1 row in set (0.00 sec)

# 确保数据都刷到硬盘上,更改成0

mysql> set global innodb_fast_shutdown=0;

Query OK, 0 rows affected (0.00 sec)

mysql> shutdown;

Query OK, 0 rows affected (0.00 sec)

mysql> exit

Bye

# 退出至终端 用mysql8.0.19客户端直接启动

[root@centos ~]# /usr/local/mysql8/bin/mysqld_safe --defaults-file=/etc/my.cnf --user=mysql &

[1] 23333

[root@centos ~]# 2020-05-20T07:07:02.337626Z mysqld_safe Logging to '/data/mysql/logs/error.log'.

2020-05-20T07:07:02.366244Z mysqld_safe Starting mysqld daemon with databases from /data/mysql/data

# 可观察下错误日志看是否报错 然后重新登录测试

[root@centos ~]# mysql -uroot -p123456

mysql: [Warning] Using a password on the command line interface can be insecure.

Welcome to the MySQL monitor. Commands end with ; or \g.

Your MySQL connection id is 17

Server version: 8.0.19 MySQL Community Server - GPL

Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its

affiliates. Other names may be trademarks of their respective

owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> select version();

+-----------+

| version() |

+-----------+

| 8.0.19 |

+-----------+

1 row in set (0.00 sec)

2.4 环境变量修改

因basedir由/usr/local/mysql变成了/usr/local/mysql8,故相关环境变量推荐修改下。可按照以下步骤来操作验证:

# 修改mysql服务启动项配置

vi /etc/init.d/mysql

# 修改basedir目录

basedir=/usr/local/mysql8

# 修改PATH变量

vi /etc/profile

# 将PATH中的/usr/local/mysql/bin改为/usr/local/mysql8/bin

# 生效验证

[root@centos ~]# source /etc/profile

[root@centos ~]# which mysql

/usr/local/mysql8/bin/mysql

[root@centos ~]# mysql -V

mysql Ver 8.0.19 for linux-glibc2.12 on x86_64 (MySQL Community Server - GPL)

总结:

至此,我们的数据库由5.7成功升级至8.0!对比MySQL安装过程及升级过程,发现二者很相似,其实升级过程并不复杂,复杂的是升级后的验证及兼容测试,特别是对于复杂的业务库,MySQL版本升级还是要小心的。真实环境建议先升级从库,验证无误后再逐步对主库进行升级。

相关文章:

modules黑名单

http://www.linuxsir.org/bbs/thread321140.html今天刚看了udev的资料,说可以用blacklist禁用掉,写在/etc/modules.d/blacklist中,如:blacklist pcspkrblacklist via_agp更多的内容,还是看udev的资料吧。modules.auto…

基于tcp和udp的socket实现

2019独角兽企业重金招聘Python工程师标准>>> 本文介绍如何用Java实现Socket编程。首先介绍Java针对Socket编程提供的类,以及它们之间的关系。然后分别针对TCP和UDP两种传输层协议实现Socket编程。 1 Java中的Socket编程接口介绍 Java为Socket编程封装了几…

mysql 5.7编译安装重启_mysql5.7源码编译安装

安装mysql前的准备:一、安装依赖的库:yum install gcc-c ncurses-devel perl-Data-Dumper python-devel openssl openssl-devel二、 安装cmake(因为mysql5.7的编译由cmake来实现)安装cmake:cd cmake-2.8.8/预编译和安装:./bootst…

公开课 | 详解CNN-pFSMN模型以及在语音识别中的应用

近年来,在深度学习技术的帮助下,语音识别取得了极大的进展,从实验室开始走向市场,走向实用化。基于语音识别技术的输入法、搜索和翻译等人机交互场景都有了广泛的应用。 Librispeech是当前衡量语音识别技术的最权威主流的开源数据…

属蛇人一生运势

一生总运势 巳年生人,其性稳和才智,好安排进退,甚喜交际。有高尚的品质,受朋友好评,但其内心常有阴毒与忌妒心,致难以保持永久交情,心情易造多疑之虑,而且好色,好与人争论…

mysql邮箱配置文件_SQL-数据库邮箱配置

一、启用数据库邮件手动启用数据库邮件功能,需执行以下脚本:exec sp_configure show advanced options,1RECONFIGUREexec sp_configure Database Mail XPs,1RECONFIGURE With Override二、配置数据库邮件1、启用配置向导如果事先没有手动启用数据库邮件功…

开源可视化日志分析软件-Gource

Gource可以将代码版本控制系统里面的日志全部可视化,也就是说可以看见每个成员在系统里面提交代码的行为,Gource目前支持git、hg、svn。 静态的图片看着不过瘾,下面我将录频的效果(gourcegltail)给大家分享: http://www.tudou.com…

AI入侵机械设计,苦逼的“机械狗”还有未来吗?

作者 | Loren Grush译者 | 刘旭坤编辑 | 非主流出品 | AI科技大本营近几年,机械行业的平均薪资一直被 IT 碾压,更不用说 IT 行业里炙手可热的人工智能。现如今,AI 一路攻城略地,已经深入里很多行业和领域,其中就包括制…

[MySQL FAQ]系列 -- mysql是否支持跨库事务

作/译者:叶金荣(Email: ),来源:http://imysql.cn,转载请注明作/译者和出处,并且不能用于商业用途,违者必究。是可以支持的,例如这么用:start transaction; in…

docker 基本操作Ⅲ

1 数据卷备份恢复 - 我们一般用的最多的是把容器和本地宿主机做目录映射直接存在本地,但是还有一种就是数据卷的备份与恢复,如下就来介绍: 先来一副图来了解一下数据卷的恢复与备份 宿主机也就是我们的服务器分享一个/data/backup/ 目录&…

jquery操作mysql_使用jQuery从数据库访问对象

[{“日期”:“2019-02-10”,“诉状”:1},{“日期”:“2019-02-12”,“诉状”:1},{“日期”:“2019-02-14”,“诉状”:1}]我可以通过Jquery代码轻松地访问它// AJAX Request to get the data by UserID and Week 1$.get(/dashboard/performance?name document.getElementById(…

中国AI专利申请量超美国,百度居国内首位

整理 | 非主流本文数据来自《人工智能技术专利深度分析报告》随着人工智能成为新一轮科技革命和产业变革的重要驱动力量,AI 成为科技企业研发重点,专利申请量也在逐年提升。中国专利保护协会近日发布的《人工智能技术专利深度分析报告》显示,…

MySQL数据库中文模糊检索问题

我在这里谈一下 MYSQL的中文模糊搜索。我的MYSQL版本。version()5.1.22-rc-community-log这里用到的表:Table Create Table ------ -------------------------------------------------------a1 CREATE TABLE a1…

最新Python学习项目Top10!

作者 | Mybridge译者 | Linstancy整理 | Jane出品 | AI科技大本营【导读】过去一个月里,我们对近1000个Python 学习项目进行了排名,并挑选出热度前10的项目。这份清单涵盖了包括Web App, Geospatial Data, Time Paradox, Testing in Python, Crash repor…

理解HTTP消息头【很完整,例子也很丰富】

(一)初识HTTP消息头 但凡搞WEB开发的人都离不开HTTP(超文本传输协议),而要了解HTTP,除了HTML本身以外,还有一部分不可忽视的就是HTTP消息头。做过Socket编程的人都知道,当我们设计一…

css样式分类

1.内联式(直接在标签里写属性,属性名为style) 2.内嵌式 (直接嵌入到head标签里面,以标签形式出现,标签名为style) 选择器:用来选择标签 1:用标签选择 2:用ID选择 关键符…

hadoop mysql mybatis_MyBatis简介与配置MyBatis+Spring+MySql

MyBatis 是一个可以自定义SQL、存储过程和高级映射的持久层框架。MyBatis 摒除了大部分的JDBC代码、手工设置参数和结果集重获。MyBatis 只使用简单的XML 和注解来配置和映射基本数据类型、Map 接口和POJO 到数据库记录。相对Hibernate和Apache OJB等“一站式”ORM解决方案而言…

MySQL中定义fk语句_MySQL基础篇/第3篇:MySQL基本操作语句.md · qwqoo/MySQL-Review - Gitee.com...

### 第3篇:MySQL基本操作语句- MySQL基础操作#### 排序检索数据- 之前的数据没有进行排序,其是按照默认在数据表中的数据返回的- SELECT语句的ORDER BY 子句进行排序mysql# 没有特定的顺序查询 (虽然结果看起来是有序的,是因为数据表中就是这…

如何高效推进ML模型开发和部署?Uber机器学习平台Michelangelo实践

作者 | Jeremy Hermann & Mike Del Balso 译者 | 王天宇 整理 | Jane 出品 | AI科技大本营 【导读】2017年9月,Uber 在技术社区发表了一篇文章向大家介绍了 Uber 的机器学习平台 —— Michelangelo。随着平台的日渐成熟,Uber 的业务数量与能力也随…

Api 函数: GetCursorPos 与转换

//获取鼠标在窗体中的当前位置 procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;Shift: TShiftState; X, Y: Integer); varstr: string; beginstr : Format(%d,%d,[X,Y]);ShowMessage(str); end;//用 GetCursorPos 获取的是鼠标相对与屏幕的位置 varps:…

向下滚动页面导航悬浮

为什么80%的码农都做不了架构师?>>> 做两个导航,第二个隐藏 下拉到一定位置,显示第二个,position:fixed $(function(){$(window).scroll(function () {var top $(document).scrollTop();var m$(".nav")…

胜过iPhone XS?Google Pixel的“夜视功能”是怎样炼成的

作者 | Marc Levoy、Yael Pritch译者 | 刘旭坤整理 | Jane出品 | AI科技大本营【导读】随着智能手机的不断发展成熟,为了寻找差异化的厂商不断增加摄像头的数量。然而,摄像头的数量越多,就代表拍照的质量越好吗?Google Pixel 手机…

npm导入bootstrap_vue cli3.0如何通过npm引入jquery和bootstrap?

不建议通过npm的方式引入这两个东西,因为这两个东西本身就是打包好的,通过npm的方式过去,还得在webpack中排除掉,迂回。要用就直接在html中通过script和link标签引入。jQuery是时代的产物,如果要用到vue,那…

ABAP 一个隐藏 selection-screen block的实例

以下是一个演示如何通过 selection-screen 中的pushbutton来动态改变屏幕上的字段的显示状态的(即显示或者隐藏)。注意:显示 通过本示例可知selection-screen 中的 field 的显示状态都是 的,在程序中修改其属性 active 的值为 0 时…

python计算文件中字母出现次数_python – 计算文本文件中字母的频率

使用collections.Counter():from collections import Counterwith open(file) as f:c Counter()for x in f:c Counter(x.strip())正如mgilson指出的那样,如果文件不是那么大,你可以简单地做:c Counter(f.read().strip())例:>>> c…

公开课报名 | 详解CNN-pFSMN模型以及在语音识别中的应用

近年来,在深度学习技术的帮助下,语音识别取得了极大的进展,从实验室开始走向市场,走向实用化。基于语音识别技术的输入法、搜索和翻译等人机交互场景都有了广泛的应用。Librispeech是当前衡量语音识别技术的最权威主流的开源数据集…

Ruby开发环境配置

一、 RoR IDE http://deadlock.netbeans.org/hudson/job/ruby/ 你可以从这个地方下载Ruby IDE专用版本的netbeans,只有30MB大小,速度比RadRails还快!netbeans的RoR支持很强大,但也要注意两点: 1) 一定要用JDK6.0&am…

net localgroup 命令详解

http://www.jb51.net/article/24733.htm windows 核心安装中,关闭防火墙的命令 netsh advfirewall set allprofiles state off Hyper-v使用远程管理工具的相关设置: http://technet.microsoft.com/zh-cn/library/cc794756(vws.10).aspx 在SCVMM中添加Hyp…

ii 第七单元 访问网络共享文件系统

挂载网络文件系统 网络文件系统是由网络附加存储服务器通过网络向多个主机提供的一种文件系统 , 而不是由块设备 ( 例如硬盘驱动器 ) 提供的。客户端通过特殊的文件系统协议和格式访问远程存储 Linux 中有两种主要协议可用访问网络文件系统 : NFS 和CIFS 。 访问网络共享的三个…

最新机器学习开源项目Top10

作者 | Mybridge译者 | Linstancy整理 | Jane出品 | AI科技大本营【导读】过去一个月里,我们对近 1400 个机器学习项目进行了排名,并挑选出热度前 10 的项目。这份清单涵盖了包括 OpenAI 最新开发的 RND 算法、Uber 构建的第一个自然语言处理平台、由 Be…