MySql数据库5.7升级到8.1遇到的问题与解决方案

一、项目背景

Oracle MySql安全漏洞CVE-2023-22056等漏洞爆出来后,准备对系统的MYSQL数据库进行升级,由5.7升级到8.1,本文主要介绍下升级过程中的几个问题。

二、升级步骤

(一)备份数据库

通过navicat导出数据库的结构和数据,以便升级后恢复到新版本。

(二)安装MySql8.1.X版本

下载地址:MySQL :: Download MySQL Community Server

因为系统服务是通过wamp提供,主要计划是在原5.7的基础上添加MySQL8.1版本,这里就需要解决wamp多版本mysql问题。

这里我们下载MYSQL的压缩包版本:

Windows (x86, 64-bit), ZIP Archive 8.1.0 236.9M

Download

(mysql-8.1.0-winx64.zip)

(1)将下载的压缩包解压到wamp的安装路径下,即X:\XXX\wamp64\bin\mysql目录。原先已有5.7.X的目录,类似的创建一个8.1.X的目录,把压缩包解压到里面即可。

 (2)修改相关路径参数

把5.7.X目录下的my.ini和wampserver.conf 文件拷贝到mysql8.1.X目录中,并更改my.ini文件中的参数

basedir="X:/XXX/wamp64/bin/mysql/mysql8.0.11"

datadir="X:/XXX/wamp64/bin/mysql/mysql8.0.11/data"

lc-messages-dir="X:/XXX/wamp64/bin/mysql/mysql8.0.11/share"

(3)初始化mysql8.1.x

通过命令行cmd进入到mysql8.1.x下的bin目录,执行以下命令:

mysqld --initialize --console

在执行后的界面中找到:A temporary password is generated for root@localhost:XXXXXX

这是初始化mysql后,生成的密码,后面要使用它访问MySQL,这里要copy下来!!!!

(4)安装MYSQL服务

如果是wamp,需要在wamp的install service,然后启动

如果不是wamp,则直接在cmd中执行命令:mysqld -install,操作系统服务中会添加一个MySql的服务。启动即可。

(5)登录验证

如果是wamp,则在wamp中打开菜单Mysql console,使用(3)中生成的临时密码使用以下命令登录。

注意:第一次登录后,执行命令会报下面的错误:

RROR 2003 (HY000): Can't connect to MySQL server on 'localhost' (10061)

这是提醒你需要更改临时密码。操作如下:

mysql> alter user 'root'@'localhost' identified by 'XXXXXXXX';

还需要执行下面命令刷新权限:  

mysql> flush privileges;

更改后,使用命令:mysql> show databases;

如果看到结果,即标识成功。

(三)还原数据库

在新的MYSQL中添加数据库,并在新的数据下执行(一)中导出的sql。

如果数据库中由存储过程或者函数,在执行的时候可能会不成功,这时需要在my.ini中的[mysqld]添加:log_bin_trust_function_creators=1,重启服务后重新导入即可。

(四)系统连接数据库

在配置好用户、主机、数据库权限后,系统通过程序访问数据库。此时系统会出现如下问题:

1.字符集不适配问题

系统报错:SQLSTATE[HY000] [2054] Server sent charset unknown to the client. Please, report to the developers

原因:MySQL 8 默认字符集为utf8mb4,而系统使用的是utf8;

解决方案:需要在my.ini文件中的[mysqld]下加以下两行:

character-set-server = utf8mb4

collation-server = utf8mb4_unicode_ci

2.身份认证问题

系统报错:SQLSTATE[HY000] [2054] The server requested authentication method unknown to the client

原因:因为MySQL8中用户的认证类型(Authentication type)默认为cacheing sha2 password导致的错误,需要修改用户权限认证方式为mysql_native_password的认证方式。

解决方案:两步(1)在MYSQL console中执行:

mysql>alter user 'root'@'%' identified with mysql_native_password by 'XXXXXXXX';

mysql>flush privileges;

(2)在my.in文件中的[mysqld]下加上

default_authentication_plugin=mysql_native_password

猜你喜欢

转载自blog.csdn.net/hongdi/article/details/131995416