MySQL8.0升级的踩坑历险记


Posted in MySQL onNovember 01, 2021

前言

最近忙于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升级踩坑内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

MySQL 相关文章推荐
mysql查询的控制语句图文详解
Apr 11 MySQL
Mysql中 unique列插入重复值该怎么解决呢
May 26 MySQL
带你学习MySQL执行计划
May 31 MySQL
解析MySQL binlog
Jun 11 MySQL
MySQL系列之七 MySQL存储引擎
Jul 02 MySQL
MySQL中utf8mb4排序规则示例
Aug 02 MySQL
MySQL去除重叠时间求时间差和的实现
Aug 23 MySQL
mysql分表之后如何平滑上线详解
Nov 01 MySQL
SQL 聚合、分组和排序
Nov 11 MySQL
MySQL中varchar和char类型的区别
Nov 17 MySQL
Mysql多层子查询示例代码(收藏夹案例)
Mar 31 MySQL
MySQL串行化隔离级别(间隙锁实现)
Jun 16 MySQL
详细聊聊关于Mysql联合查询的那些事儿
Oct 24 #MySQL
mysql事务对效率的影响分析总结
Oct 24 #MySQL
mysql事务隔离级别详情
mysql主从复制的实现步骤
记一次Mysql不走日期字段索引的原因小结
Oct 24 #MySQL
Mysql关于数据库是否应该使用外键约束详解说明
Oct 24 #MySQL
MySQL七种JOIN类型小结
You might like
重置版战役片段
2020/04/09 魔兽争霸
PHP数组 为文章加关键字连接 文章内容自动加链接
2011/12/29 PHP
Linux编译升级php的详细方法
2013/11/04 PHP
php 多个变量指向同一个引用($b = &$a)用法分析
2019/11/13 PHP
JQuery 返回布尔值Is()条件判断方法代码
2012/05/14 Javascript
Extjs表单常见验证小结
2014/03/07 Javascript
javascript实现图片循环渐显播放的方法
2015/02/24 Javascript
招聘网站基于jQuery实现自动刷新简历
2015/05/10 Javascript
jQuery Chosen通用初始化
2017/03/07 Javascript
js实现网页的两个input标签内的数值加减(示例代码)
2017/08/15 Javascript
JavaScript面向对象程序设计创建对象的方法分析
2018/08/13 Javascript
在vue项目中引入高德地图及其UI组件的方法
2018/09/04 Javascript
iview Upload组件多个文件上传的示例代码
2018/09/30 Javascript
layui自定义ajax左侧三级菜单
2019/07/26 Javascript
JavaScript实现的3D旋转魔方动画效果实例代码
2019/07/31 Javascript
Vue export import 导入导出的多种方式与区别介绍
2020/02/12 Javascript
[37:45]2014 DOTA2国际邀请赛中国区预选赛5.21 DT VS Orenda
2014/05/22 DOTA
跟老齐学Python之Import 模块
2014/10/13 Python
Python解决鸡兔同笼问题的方法
2014/12/20 Python
Python的Django框架中的数据过滤功能
2015/07/17 Python
Python中属性和描述符的正确使用
2016/08/23 Python
python读取txt文件中特定位置字符的方法
2018/12/24 Python
使用pyinstaller打包PyQt4程序遇到的问题及解决方法
2019/06/24 Python
python的pytest框架之命令行参数详解(下)
2019/06/27 Python
全面了解django的缓存机制及使用方法
2019/07/22 Python
Python脚本操作Excel实现批量替换功能
2019/11/20 Python
使用Keras训练好的.h5模型来测试一个实例
2020/07/06 Python
python和go语言的区别是什么
2020/07/20 Python
Opencv 图片的OCR识别的实战示例
2021/03/02 Python
英国领先的鞋类零售商和顶级品牌的官方零售商:Wynsors
2020/02/17 全球购物
Blue Nile蓝色尼罗河香港官网:世界最大在线钻石珠宝销售商
2020/05/07 全球购物
移风易俗倡议书
2014/04/15 职场文书
离婚协议书范文2014
2014/10/16 职场文书
优秀小学生事迹材料
2014/12/26 职场文书
穆斯林的葬礼读书笔记
2015/06/26 职场文书
教师个人工作总结范文2015
2015/10/14 职场文书