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 22 MySQL
mysql数据库入门第一步之创建表
May 14 MySQL
my.ini优化mysql数据库性能的十个参数(推荐)
May 26 MySQL
MySQL悲观锁与乐观锁的实现方案
Nov 02 MySQL
MySQL 服务和数据库管理
Nov 11 MySQL
一文带你探究MySQL中的NULL
Nov 11 MySQL
教你使用VS Code的MySQL扩展管理数据库的方法
Jan 22 MySQL
Pycharm远程调试和MySQL数据库授权问题
Mar 18 MySQL
Mysql索引失效 数据库表中有索引还是查询很慢
May 15 MySQL
MySQL中正则表达式(REGEXP)使用详解
Jul 07 MySQL
MySQL性能指标TPS+QPS+IOPS压测
Aug 05 MySQL
SQL Server数据库的三种创建方法汇总
May 08 MySQL
详细聊聊关于Mysql联合查询的那些事儿
Oct 24 #MySQL
mysql事务对效率的影响分析总结
Oct 24 #MySQL
mysql事务隔离级别详情
mysql主从复制的实现步骤
记一次Mysql不走日期字段索引的原因小结
Oct 24 #MySQL
Mysql关于数据库是否应该使用外键约束详解说明
Oct 24 #MySQL
MySQL七种JOIN类型小结
You might like
在php MYSQL中插入当前时间
2008/04/06 PHP
php+mysql删除指定编号员工信息的方法
2015/01/14 PHP
PHP简单数据库操作类实例【支持增删改查及链式操作】
2016/10/10 PHP
使用一个for循环将N*N的二维数组的所有值置1实现方法
2017/05/29 PHP
PHP实现负载均衡下的session共用功能
2018/04/17 PHP
JavaScript写的一个DIV 弹出网页对话框
2009/08/14 Javascript
javascript面向对象的方式实现的弹出层效果代码
2010/01/28 Javascript
js post方式传递提交的实现代码
2010/05/31 Javascript
jQuery实现表头固定效果的实例代码
2013/05/24 Javascript
Javascript玩转继承(二)
2014/05/08 Javascript
Jquery 监视按键,按下回车键触发某方法的实现代码
2014/05/11 Javascript
JQuery表单验证插件EasyValidator用法分析
2014/11/15 Javascript
HTML,CSS,JavaScript速查表推荐
2014/12/02 Javascript
jQuery实现简单的间隔向上滚动效果
2015/03/09 Javascript
老生常谈onBlur事件与onfocus事件(js)
2016/07/09 Javascript
Bootstrap 最常用的JS插件系列总结(图片轮播、标签切换等)
2016/07/14 Javascript
BootStrap表单宽度设置方法
2017/03/10 Javascript
JavaScript中this的用法及this在不同应用场景的作用解析
2017/04/13 Javascript
Vue声明式渲染详解
2017/05/17 Javascript
JavaScript的六种继承方式(推荐)
2017/06/26 Javascript
node.js 模块和其下载资源的镜像设置的方法
2018/09/06 Javascript
Node快速切换版本、版本回退(降级)、版本更新(升级)
2021/01/07 Javascript
[54:19]完美世界DOTA2联赛PWL S2 Magma vs PXG 第二场 11.28
2020/12/01 DOTA
Python解析网页源代码中的115网盘链接实例
2014/09/30 Python
使用Python的Turtle绘制哆啦A梦实例
2019/11/21 Python
YUV转为jpg图像的实现
2019/12/09 Python
美国购物网站:Clickhere2shop
2021/01/28 全球购物
竞争性谈判邀请书
2014/02/06 职场文书
中餐厅经理岗位职责
2014/04/11 职场文书
企业承诺书格式
2014/05/21 职场文书
大学应届毕业生求职信
2014/05/24 职场文书
大学生就业求职信
2014/06/12 职场文书
学习张丽丽心得体会
2014/09/03 职场文书
安全月宣传标语
2014/10/07 职场文书
MySQL 覆盖索引的优点
2021/05/19 MySQL
python小型的音频操作库mp3Play
2022/04/24 Python