当前位置: 首页 >数据库 > 网站MySQL版本升级到8.0时踩过的坑

网站MySQL版本升级到8.0时踩过的坑

网站的MySQL升级,本以为很简单,结果发现各种不兼容,踩了不少坑。

首先MySQL,.Net Framework,MySQL Connector/NET  (也就是mysql.data.dll,mysql.web.dll这两个文件)这三者之间的版本是有联系的

mysql.data.dll 6.9 之前的版本支持.Net Framework 4.0,新版的.net环境就不支持老的connector了

我原先的项目是基于.Net Framework3.5开发的,现在打算升级到4.0版本

于是就找了一个6.0.6.0版本的mysql.data.dll。

但是问题来了。MySQL8.0使用了新的utf8mb4编码,而没有utf8的选项,这种编码是低版本connetor不支持的(详细会在后面介绍)。

无奈只好使用高于6.9版本的mysql.data.dll,我选用了相对新的8.0.8.0,.Net framework升级到了4.5的版本。

项目所有引用的dll,只要用到mysql的,都跟着要升新

整了半天,以为大功告成了,结果提升我不支持utf8mb3编码,我明明是utf8mb4编码建的表,真是无语了。

网上查的只能升级到最新版本

.net framework4.8 + connector 8.0.31.0 试了一下终于可以正常连数据库了

 

下面是升级时遇到的一些错误

1、IIS报错:未能加载文件或程序集MySql.ConnectorInstaller, Version=8.0.8.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d或它的某一个依赖项

删除 machine.config中相关配置

1
2
3
4
5
<siteMap>
  <providers>
    <add name="MySqlSiteMapProvider" type="MySql.Web.SiteMap.MySqlSiteMapProvider, MySql.ConnectorInstaller, Version=8.0.8.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" connectionStringName="LocalMySqlServer" applicationName="/"/>
  </providers>
</siteMap>

如果你的framework是4.0及以上,那么machine.config位置在C:\Windows\Microsoft.NET\Framework64\v4.0.30319\CONFIG目录下

如果是2.0或3.5,位置在<C:\Windows\Microsoft.NET\Framework\v2.0.50727\CONFIG目录下

2、连接数据库报错  Authentication method 'caching_sha2_password' not supported by any of the available plugins

在mysql的配置文件my.ini的Mysqld节点下添加以下配置并重启mysql服务

default_authentication_plugin=mysql_native_password

3、连接数据库报错 Character set ‘utf8mb3‘ is not supported by .Net Framework

虽然提示字符集为uft8mb3,实际是utf8mb4。升级MySQL conncector为最新版本。注意网站引用的dll,只要用到mysql.dll的,都需要更新。

4、发布网站时IIS报错 The connection string name is missing for the MySqlSiteMapProvider

网站MySQL版本升级到8.0时踩过的坑 _ JavaClub全栈架构师技术笔记

删除machine.config中相关配置(siteMap节点)

5、发布网站时IIS报错 GUID 应包含带 4 个短划线的 32 位数(xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx)

网站MySQL版本升级到8.0时踩过的坑 _ JavaClub全栈架构师技术笔记

在连接字符串中添加 Old Guids=true;

例如 server=localhost;userid=root;password=123456;database=dbname;Old Guids=true;

6、发布网站时IIS报错 Unable to initialize provider. Missing or incorrect schema

网站MySQL版本升级到8.0时踩过的坑 _ JavaClub全栈架构师技术笔记

项目中采用了membership,安装新数据库时直接copy了原数据库的membership表

解决办法,在网站管理工具中重新创建用户和角色。打开网站管理工具的方法:点击这里

 7、执行查询报错

[Err] 1055 - Expression #1 of ORDER BY clause is not in GROUP BY clause and contains nonaggregated column ‘information_schema.PROFILING.SEQ’ which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
网站MySQL版本升级到8.0时踩过的坑 _ JavaClub全栈架构师技术笔记

原因是数据库版本升级到8.0或以上造成

在my.ini的mysqld节点下加一行配置

sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION

 8、连接数据库报错:给定关键字不在字典中

MySQL升级后字符集编码不一致导致的。解决方案是更新mysql.data.dll版本,然而我的项目版本低,更新mysql.data.dll意味着我的.net必须也要更新才可以

需要注意的地方

1、关于Mysql8.0的字符集编码

在web.config 链接字符串中要加上一行  charset=utf8mb4;

在MySQL配置文件my.ini中设置默认编码,如下

[client]default-character-set = utf8mb4[mysql]#设置mysql数据库客户端默认字符集default-character-set = utf8mb4[mysqld]#设置mysql数据库默认端口号,注意端口号不能被占用port=3306#设置记录日志的显示时间log_timestamps=SYSTEM#设置mysql安装目录basedir=C:\\Program Files\\mysql-8.0.31-winx64#设置mysql数据库的数据存放目录datadir=C:\\Program Files\\mysql-8.0.31-winx64\\data#设置mysql数据库服务端默认字符集character-set-server = utf8mb4collation-server=utf8mb4_general_ci#设置mysql数据库创建新表时的默认存储引擎default-storage-engine=INNODB#设置mysql数据库允许的最大链接数max_connections=100default_authentication_plugin=mysql_native_passwordsql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION

2、MySQL8.0的my.ini默认安装好是不存在的,需要手动添加

3、MySQL8.0的data目录是不存在的,需要手动添加,并在my.ini中指定

网站MySQL版本升级到8.0时踩过的坑 _ JavaClub全栈架构师技术笔记

 

来源链接:https://www.cnblogs.com/yaotome/p/16939790.html

版权声明:
1、JavaClub(https://www.javaclub.cn)以学习交流为目的,由作者投稿、网友推荐和小编整理收藏优秀的IT技术及相关内容,包括但不限于文字、图片、音频、视频、软件、程序等,其均来自互联网,本站不享有版权,版权归原作者所有。

2、本站提供的内容仅用于个人学习、研究或欣赏,以及其他非商业性或非盈利性用途,但同时应遵守著作权法及其他相关法律的规定,不得侵犯相关权利人及本网站的合法权利。
3、本网站内容原作者如不愿意在本网站刊登内容,请及时通知本站(javaclubcn@163.com),我们将第一时间核实后及时予以删除。





本文链接:https://www.javaclub.cn/database/118272.html

标签:MySQL升级
分享给朋友:

“网站MySQL版本升级到8.0时踩过的坑” 的相关文章

MySQL主从复制 2022年05月17日 21:34:56
mysql递归查询 2022年06月06日 18:26:30
MYSQL查询空值/NULL值 2022年06月08日 16:44:33
mysql查询给某个字段赋值 2022年06月10日 21:43:53
Mysql查询某字段值重复的数据 2022年06月11日 19:39:22
mysql 查询列拼接字段 2022年06月12日 09:17:20
Mysql查询用户最后一次登陆时间 2022年06月12日 13:54:22