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 24 MySQL
新手入门Mysql--sql执行过程
Jun 20 MySQL
MySQL基础快速入门知识总结(附思维导图)
Sep 25 MySQL
SpringBoot连接MySQL获取数据写后端接口的操作方法
Nov 02 MySQL
MySQL数据库⾼可⽤HA实现小结
Jan 22 MySQL
分享几个简单MySQL优化小妙招
Mar 31 MySQL
MySQL脏读,幻读和不可重复读
May 11 MySQL
Mysql表数据比较大情况下修改添加字段的方法实例
Jun 28 MySQL
MySQL中正则表达式(REGEXP)使用详解
Jul 07 MySQL
jdbc中自带MySQL 连接池实践示例
Jul 23 MySQL
MySQL添加索引特点及优化问题
Jul 23 MySQL
一文解答什么是MySQL的回表
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
如何在Ubuntu下启动Apache的Rewrite功能
2013/07/05 PHP
php根据身份证号码计算年龄的实例代码
2014/01/18 PHP
[原创]php正则删除html代码中class样式属性的方法
2017/05/24 PHP
PHP在弹框中获取foreach中遍历的id值并传递给地址栏
2017/06/13 PHP
PHP析构函数destruct与垃圾回收机制的讲解
2019/03/22 PHP
PHP常用工具函数小结【移除XSS攻击、UTF8与GBK编码转换等】
2019/04/27 PHP
php基于 swoole 实现的异步处理任务功能示例
2019/08/13 PHP
laravel-admin自动生成模块,及相关基础配置方法
2019/10/08 PHP
JavaScript对表格或元素按文本,数字或日期排序的方法
2015/05/26 Javascript
jQuery插件编写步骤详解
2016/06/03 Javascript
jquery通过name属性取值的简单实现方法
2016/06/20 Javascript
vue2.0 axios前后端数据处理实例代码
2017/06/30 Javascript
鼠标拖动改变DIV等网页元素的大小的实现方法
2017/07/06 Javascript
axios发送post请求springMVC接收不到参数的解决方法
2018/03/05 Javascript
js提取中文拼音首字母的封装工具类
2018/03/12 Javascript
vue-cli3全面配置详解
2018/11/14 Javascript
BootStrap modal实现拖拽功能
2018/12/01 Javascript
使用Easyui实现查询条件的后端传递并自动刷新表格的两种方法
2019/09/09 Javascript
D3.js 实现带伸缩时间轴拓扑图的示例代码
2020/01/20 Javascript
JavaScript缺少insertAfter解决方案
2020/07/03 Javascript
Python语言实现机器学习的K-近邻算法
2015/06/11 Python
详解Python中的元组与逻辑运算符
2015/10/13 Python
安装好Pycharm后如何配置Python解释器简易教程
2019/06/28 Python
Python Django框架url反向解析实现动态生成对应的url链接示例
2019/10/18 Python
Python实现计算图像RGB均值方式
2020/06/04 Python
在IE6系列等老式浏览器中使用HTML5的新标签实现方案
2012/12/25 HTML / CSS
基于HTML5新特性Mutation Observer实现编辑器的撤销和回退操作
2016/01/11 HTML / CSS
斯凯奇美国官网:SKECHERS美国
2016/08/20 全球购物
我的applet原先好好的, 一放到web server就会有问题,为什么?
2016/05/10 面试题
初中生学习生活的自我评价
2013/11/20 职场文书
竞聘书格式及范文
2014/03/31 职场文书
先进单位申报材料
2014/12/25 职场文书
爱的承诺书
2015/01/20 职场文书
护士自我推荐信范文
2015/03/24 职场文书
通知范文怎么写
2015/04/16 职场文书
扩展多台相同的Web服务器
2021/04/01 Servers