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 相关文章推荐
仅用一句SQL更新整张表的涨跌幅、涨跌率的解决方案
May 06 MySQL
MySQL 不等于的三种使用及区别
Jun 03 MySQL
Mysql 设置boolean类型的操作
Jun 04 MySQL
浅谈MySQL之浅入深出页原理
Jun 23 MySQL
MySQL系列之十三 MySQL的复制
Jul 02 MySQL
MySQL深度分页(千万级数据量如何快速分页)
Jul 25 MySQL
mysql脏页是什么
Jul 26 MySQL
MySQL子查询中order by不生效问题的解决方法
Aug 02 MySQL
浅谈如何保证Mysql主从一致
Mar 13 MySQL
MySQL 自动填充 create_time 和 update_time
May 20 MySQL
一文解答什么是MySQL的回表
Aug 05 MySQL
分享很少见很有用的SQL功能CORRESPONDING
Aug 05 MySQL
详细聊聊关于Mysql联合查询的那些事儿
Oct 24 #MySQL
mysql事务对效率的影响分析总结
Oct 24 #MySQL
mysql事务隔离级别详情
mysql主从复制的实现步骤
记一次Mysql不走日期字段索引的原因小结
Oct 24 #MySQL
Mysql关于数据库是否应该使用外键约束详解说明
Oct 24 #MySQL
MySQL七种JOIN类型小结
You might like
Zend Framework教程之模型Model基本规则和使用方法
2016/03/04 PHP
PHP 极验验证码实例讲解
2016/09/29 PHP
Thinkphp 5.0实现微信企业付款到零钱
2018/09/30 PHP
js实现仿Windows风格选项卡和按钮效果实例
2015/05/13 Javascript
在Node.js应用中读写Redis数据库的简单方法
2015/06/30 Javascript
五种js判断是否为整数类型方式
2015/12/03 Javascript
JQuery ztree 异步加载实例讲解
2016/02/25 Javascript
全面了解javascript三元运算符
2016/06/27 Javascript
仿Angular Bootstrap TimePicker创建分钟数-秒数的输入控件
2016/07/01 Javascript
js 中获取制定的cook信息实现方法
2016/11/19 Javascript
AngularJS定时器的使用与移除操作方法【interval与timeout】
2016/12/14 Javascript
原生js实现可拖动的登录框效果
2017/01/21 Javascript
浅谈js中function的参数默认值
2017/02/20 Javascript
jQuery ajax实现省市县三级联动
2021/03/07 Javascript
如何解决vue2.0下IE浏览器白屏问题
2018/09/13 Javascript
vue调试工具vue-devtools安装及使用方法
2018/11/07 Javascript
基于游标的分页接口实现代码示例
2018/11/12 Javascript
[38:21]2018DOTA2亚洲邀请赛3月30日 小组赛A组 LGD VS Newbee
2018/03/31 DOTA
在Python中使用zlib模块进行数据压缩的教程
2015/06/26 Python
Python用threading实现多线程详解
2017/02/03 Python
python pandas消除空值和空格以及 Nan数据替换方法
2018/10/30 Python
Python获取一个用户名的组ID过程解析
2019/09/03 Python
浅谈PyTorch中in-place operation的含义
2020/06/27 Python
python 如何设置守护进程
2020/10/29 Python
使用CSS3来制作消息提醒框
2015/07/12 HTML / CSS
公司庆典邀请函范文
2014/01/13 职场文书
幼儿园教师请假制度
2014/01/16 职场文书
安全事故检讨书
2014/01/18 职场文书
应聘护理专业毕业自荐书范文
2014/02/12 职场文书
大学生村官座谈会发言材料
2014/05/25 职场文书
食品安全宣传标语
2014/06/07 职场文书
土木工程生产实习心得体会
2016/01/22 职场文书
2016党员读书思廉心得体会
2016/01/23 职场文书
浅谈CSS不规则边框的生成方案
2021/05/25 HTML / CSS
SQL Server表分区删除详情
2021/10/16 SQL Server
详解CSS中postion和opacity及cursor的特性
2022/08/14 HTML / CSS