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查询学习之基础查询操作
May 08 MySQL
MySQL 如何分析查询性能
May 12 MySQL
mysql在项目中怎么选事务隔离级别
May 25 MySQL
MySql开发之自动同步表结构
May 28 MySQL
Mysql数据库值的添加、修改、删除及清空操作实例
Jun 20 MySQL
MySQL如何使用使用Xtrabackup进行备份和恢复
Jun 21 MySQL
MySQL系列之九 mysql查询缓存及索引
Jul 02 MySQL
mysql定时自动备份数据库的方法步骤
Jul 07 MySQL
MySQL数据库索引的最左匹配原则
Nov 20 MySQL
为什么MySQL不建议使用SELECT *
Apr 03 MySQL
详细聊一聊mysql的树形结构存储以及查询
Apr 05 MySQL
为什么MySQL8新特性会修改自增主键属性
Apr 18 MySQL
详细聊聊关于Mysql联合查询的那些事儿
Oct 24 #MySQL
mysql事务对效率的影响分析总结
Oct 24 #MySQL
mysql事务隔离级别详情
mysql主从复制的实现步骤
记一次Mysql不走日期字段索引的原因小结
Oct 24 #MySQL
Mysql关于数据库是否应该使用外键约束详解说明
Oct 24 #MySQL
MySQL七种JOIN类型小结
You might like
编译问题
2006/10/09 PHP
PHP中函数rand和mt_rand的区别比较
2012/12/26 PHP
PHP实现即时输出、实时输出内容方法
2015/05/27 PHP
各种快递查询--Api接口
2016/04/26 PHP
PHP中的use关键字及文件的加载详解
2016/11/28 PHP
PHP框架自动加载类文件原理详解
2017/06/06 PHP
优秀js开源框架-jQuery使用手册(1)
2007/03/10 Javascript
JavaScript 异步调用框架 (Part 4 - 链式调用)
2009/08/04 Javascript
js 动态选中下拉框
2009/11/26 Javascript
javascript中如何处理引号编码"
2013/08/15 Javascript
三种取消选中单选框radio的方法
2014/09/09 Javascript
开启BootStrap学习之旅
2016/05/04 Javascript
分类解析jQuery选择器
2016/11/23 Javascript
es6学习之解构时应该注意的点
2017/08/29 Javascript
手淘flexible.js框架使用和源代码讲解小结
2018/10/15 Javascript
你应该了解的JavaScript Array.map()五种用途小结
2018/11/14 Javascript
Vue数据绑定实例写法
2019/08/06 Javascript
解决vue项目运行npm run serve报错的问题
2020/10/26 Javascript
python绘图方法实例入门
2015/05/19 Python
Python编程之基于概率论的分类方法:朴素贝叶斯
2017/11/11 Python
python shell根据ip获取主机名代码示例
2017/11/25 Python
Python给你的头像加上圣诞帽
2018/01/04 Python
Python matplotlib 画图窗口显示到gui或者控制台的实例
2018/05/24 Python
Python列表的切片实例讲解
2019/08/20 Python
python程序 线程队列queue使用方法解析
2019/09/23 Python
Python django框架输入汉字,数字,字符生成二维码实现详解
2019/09/24 Python
如何通过python计算圆周率PI
2020/11/11 Python
美国知名的网上鞋类及相关服装零售商:Shoes.com
2017/05/06 全球购物
伦敦一家西班牙童装精品店:La Coqueta
2018/02/02 全球购物
Juice Beauty官网:有机美容产品,护肤与化妆品
2020/06/13 全球购物
汽车维修与检测专业应届生求职信
2013/11/12 职场文书
商业融资计划书
2014/04/29 职场文书
秋季运动会广播稿(30篇)
2014/09/13 职场文书
优秀教师申报材料
2014/12/16 职场文书
综合测评个人总结
2015/03/03 职场文书
python程序的组织结构详解
2021/12/06 Python