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 相关文章推荐
浅析InnoDB索引结构
Apr 05 MySQL
MySQL如何使用使用Xtrabackup进行备份和恢复
Jun 21 MySQL
MySQL的安装与配置详细教程
Jun 26 MySQL
浅析MySQL如何实现事务隔离
Jun 26 MySQL
MySQL系列之四 SQL语法
Jul 02 MySQL
Node-Red实现MySQL数据库连接的方法
Aug 07 MySQL
浅谈mysql哪些情况会导致索引失效
Nov 20 MySQL
SQL优化老出错,那是你没弄明白MySQL解释计划用法
Nov 27 MySQL
MySQL七大JOIN的具体使用
Feb 28 MySQL
深入理解mysql事务隔离级别和存储引擎
Apr 12 MySQL
MySQL 条件查询的常用操作
Apr 28 MySQL
Mysql将字符串按照指定字符分割的正确方法
May 30 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 字符串函数收集
2010/03/29 PHP
Thinkphp批量更新数据的方法汇总
2016/06/29 PHP
利用Laravel事件系统如何实现登录日志的记录详解
2017/05/20 PHP
YII2框架中actions的作用与使用方法示例
2020/03/13 PHP
jquery创建div 实现代码
2009/04/27 Javascript
javascript搜索框点击文字消失失焦时文本出现
2014/09/18 Javascript
基于jQuery实现交互体验社会化分享代码附源码下载
2016/01/04 Javascript
HTML中setCapture、releaseCapture 使用方法浅析
2016/09/25 Javascript
BootStrap tooltip提示框使用小结
2016/10/26 Javascript
js返回顶部实例分享
2016/12/21 Javascript
微信小程序实现分享到朋友圈功能
2018/07/19 Javascript
区分vue-router的hash和history模式
2020/10/03 Javascript
python mysqldb连接数据库
2009/03/16 Python
Python多进程编程技术实例分析
2014/09/16 Python
用Python编写一个国际象棋AI程序
2014/11/28 Python
python学习笔记--将python源文件打包成exe文件(pyinstaller)
2018/05/26 Python
python调用java的jar包方法
2018/12/15 Python
PyQt5的PyQtGraph实践系列3之实时数据更新绘制图形
2019/05/13 Python
对python3 sort sorted 函数的应用详解
2019/06/27 Python
Python input函数使用实例解析
2019/11/22 Python
Python求两个字符串最长公共子序列代码实例
2020/03/05 Python
python:删除离群值操作(每一行为一类数据)
2020/06/08 Python
详解css3 object-fit属性
2018/07/27 HTML / CSS
css3设置box-pack和box-align让div里面的元素垂直居中
2014/09/01 HTML / CSS
IE9下html5初试小刀
2010/09/21 HTML / CSS
中国最大的名表商城:万表网
2016/08/29 全球购物
英国最受欢迎的在线隐形眼镜商店:VisionDirect.co.uk
2018/12/06 全球购物
Lungolivigno Fashion官网:高级时装在线购物
2020/10/17 全球购物
对教师的评语
2014/04/28 职场文书
青年志愿者活动方案
2014/08/17 职场文书
党员干部四风问题整改措施思想汇报
2014/10/12 职场文书
2014年体育工作总结
2014/11/24 职场文书
会计工作岗位职责
2015/02/03 职场文书
详解MongoDB的条件查询和排序
2021/06/23 MongoDB
Python办公自动化之教你如何用Python将任意文件转为PDF格式
2021/06/28 Python
Python四款GUI图形界面库介绍
2022/06/05 Python