我的编程空间,编程开发者的网络收藏夹
学习永远不晚

MySQL8.0升级的踩坑历险记

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

MySQL8.0升级的踩坑历险记

前言

最近忙于Fighting的项目,所以笔耕有些松懈,实为不该。

刚好遇到需要从MySQL5.7.33升级到MySQL8.0.x的需求,于是记录一下整个升级过程,踩坑而过。

背景梗概:本地docker容器中使用的MySQL是5.7.33(镜像系统用的是ubuntu16.04),而新项目在线上使用了MySQL8.0。从线上导出的sql文件(表结构+数据)中有一种低版本MySQL不会用到的字符编码,一导入就报错,遇到的字符集报错如下所示:


 - Unknown collation: 'utf8mb4_0900_ai_ci'

一顿搜索之后,我也冷静了下来,有两种思路,一种是被我称为掩耳盗铃式解决方法,一种是根治的办法。

掩耳盗铃,顾名思义,不解决本质问题,而是通过批量替换字符集的方式解决报错,也就是把文件中所有的utf8mb4_0900_ai_ci 替换为:utf8_general_ci。

第二种就是保持和线上的MySQL版本一致,这样就能支持该字符集。

于是我采用第二种方法,升级我的docker容器中的MySQL,顺便也可以打包一个新的镜像。

升级的过程也有点坎坷,但逻辑是清晰地。

1.先彻底卸载现有版本MySQL。

可以使用如下命令:


#删除mysql的数据文件
sudo rm -R /var/lib/mysql/
#删除mysql的配置文件

sudo rm -R /etc/mysql/

#自动卸载mysql(包括server和client)
sudo apt-get autoremove mysql* --purge
sudo apt-get remove apparmor

记得一定要删除配置文件,因为有可能不兼容。

2.下载deb并按照MySQL8.x。

可以去官网下载,官网地址为https://dev.mysql.com/repo/apt

我们选择最新的deb下载,网址为:
https://dev.mysql.com/get/mysql-apt-config_0.8.20-1_all.deb。在命令后使用wget命令进行下载,如下:


wget https://dev.mysql.com/get/mysql-apt-config_0.8.20-1_all.deb


下载完成之后使用dpkg命令并更新apt源,然后就可以进行安装了,完整命令如下所示:


dpkg -i mysql-apt-config_0.8.20-1_all.deb
apt-get update
apt-get install -y mysql-server

在最后一个命令执行过程中,它会让你输入root密码和一些基本配置,然后就可以完成安装了。

因为是在ubuntu里面安装的MySQL,所以启动方式为:


service mysql start

你可以使用命令查看进程运行情况,正常的时候类似如需输出:

/usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib/mysql/plugin --log-error=/var/log/mysql/error.log --pid-file=/var/run/mysqld/mysqld.pid --socket=/var/run/mysqld/mysqld.sock

3.创建用户和配置权限。

MySQL8.0.x实际使用的过程中发现用户授权和之前版本有点不同,需要分三步:

  1. 创建用户。
  2. 分配权限。
  3. 刷新权限。

具体的sql语句如下,顺序也是严格的:


create user 'freephp'@'%' identified by '176serTTc8Cg';

grant all privileges on dev_database.* to 'freephp'@'%' with grant option;

flush privileges;

上面的sql解释一下,第一句是创建一个名为freephp的用户,密码为176serTTc8Cg,%代表可以任意主机进行连接。

第二句的意思是把dev_database的所有权限赋予用户freephp。

第三句就是立即刷新权限,让新创建的权限生效。

自此历险记大功告成,MySQL8.0的新特性还需要探索,下次再聊。

总结

到此这篇关于MySQL8.0升级踩坑的文章就介绍到这了,更多相关MySQL8.0升级踩坑内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

MySQL8.0升级的踩坑历险记

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Android Studio Flamingo (火烈鸟) 升级踩坑记录

由于想要验证Compose最新的debug特性,而我目前使用的版本(Dolphin 小海豚)不支持,查看官网说明需要最新版本,所以不得已进行了一下Android Studio版本升级,过程中遇到一些问题,本文仅做记录。(真是不想升级,一升级
2023-08-18

RxJava 1升级到RxJava 2过程中踩过的一些“坑”

RxJava2介绍RxJava2 发布已经有一段时间了,是对 RxJava 的一次重大的升级,由于我的一个库cv4j使用了 RxJava2 来尝鲜,但是 RxJava2 跟 RxJava1 是不能同时存在于一个项目中的,逼不得已我得把自己所
2023-05-31

我把springboot项目从Java 8 升级 到了Java 17 的过程总结,愿为君提前踩坑!

项目从jdk8升级到jdk17,我不是为了追求java 17的新特性(准确来说也还没有去了解有什么新特性),也不是为了准确与时俱进,永远走在java行列的最前端,纯粹因为项目需要,因为我们都知道,只要项目能跑,你就不要动它! 目
我把springboot项目从Java 8 升级 到了Java 17 的过程总结,愿为君提前踩坑!
2023-12-23

编程热搜

目录