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 pt-slave-restart工具的使用简介
Apr 07 MySQL
Mysql官方性能测试工具mysqlslap的使用简介
May 21 MySQL
修改MySQL的默认密码的四种小方法
May 26 MySQL
安装配置mysql及Navicat prenium的详细流程
Jun 10 MySQL
MySQL 数据恢复的多种方法汇总
Jun 21 MySQL
分享mysql的current_timestamp小坑及解决
Nov 27 MySQL
MySQL中B树索引和B+树索引的区别详解
Mar 03 MySQL
MYSQL如何查看进程和kill进程
Mar 13 MySQL
MySQL sql模式设置引起的问题
May 15 MySQL
sql注入报错之注入原理实例解析
Jun 10 MySQL
MySQL中dd::columns表结构转table过程及应用详解
Sep 23 MySQL
mysql序号rownum行号实现方式
Dec 24 MySQL
详细聊聊关于Mysql联合查询的那些事儿
Oct 24 #MySQL
mysql事务对效率的影响分析总结
Oct 24 #MySQL
mysql事务隔离级别详情
mysql主从复制的实现步骤
记一次Mysql不走日期字段索引的原因小结
Oct 24 #MySQL
Mysql关于数据库是否应该使用外键约束详解说明
Oct 24 #MySQL
MySQL七种JOIN类型小结
You might like
全国FM电台频率大全 - 21 海南省
2020/03/11 无线电
PHP自动生成表单代码分享
2015/06/19 PHP
javascript 跨浏览器开发经验总结(五) js 事件
2010/05/19 Javascript
通过Jscript中@cc_on 语句识别IE浏览器及版本的代码
2011/05/07 Javascript
jquery乱码与contentType属性设置问题解决方案
2013/01/07 Javascript
jquery增加和删除元素的方法
2015/01/14 Javascript
JS实现鼠标滑过链接改变网页背景颜色的方法
2015/10/20 Javascript
jQuery中each()、find()和filter()等节点操作方法详解(推荐)
2016/05/25 Javascript
vue router自动判断左右翻页转场动画效果
2017/10/10 Javascript
Angularjs之如何在跨域请求中传输Cookie的方法
2018/06/01 Javascript
js replace 全局替换的操作方法
2018/06/12 Javascript
详解js获取video任意时间的画面截图
2019/04/17 Javascript
ES6模板字符串和标签模板的应用实例分析
2019/06/25 Javascript
layui多图上传实现删除功能的例子
2019/09/23 Javascript
浅谈vue 组件中的setInterval方法和window的不同
2020/07/30 Javascript
鸿蒙系统中的 JS 开发框架
2020/09/18 Javascript
python中使用sys模板和logging模块获取行号和函数名的方法
2014/04/15 Python
pycharm 使用心得(三)Hello world!
2014/06/05 Python
用Python编写一个简单的FUSE文件系统的教程
2015/04/02 Python
Python MySQLdb模块连接操作mysql数据库实例
2015/04/08 Python
举例简单讲解Python中的数据存储模块shelve的用法
2016/03/03 Python
python anaconda 安装 环境变量 升级 以及特殊库安装的方法
2017/06/21 Python
Python2.7+pytesser实现简单验证码的识别方法
2017/12/29 Python
Python实现的读取电脑硬件信息功能示例
2018/05/30 Python
详解python播放音频的三种方法
2019/09/23 Python
使用django自带的user做外键的方法
2020/11/30 Python
CSS3 3D酷炫立方体变换动画的实现
2019/03/26 HTML / CSS
琳达·法罗眼镜英国官网:Linda Farrow英国
2021/01/19 全球购物
do you have any Best Practice for testing
2016/06/04 面试题
文员的职业生涯规划发展方向
2014/02/08 职场文书
医药类个人求职的自我评价
2014/02/12 职场文书
志愿者爱心公益活动策划方案
2014/09/15 职场文书
群众路线批评与自我批评发言稿
2014/10/16 职场文书
全国助残日活动总结
2015/05/11 职场文书
2015年行政管理人员工作总结
2015/10/15 职场文书
在 Python 中利用 Pool 进行多线程
2022/04/24 Python