zoukankan      html  css  js  c++  java
  • 升级MySQL8.0的历险记

    最近忙于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的新特性还需要探索,下次再聊。

  • 相关阅读:
    [转] Actor生命周期理解
    [转] Linux History(历史)命令用法 15 例
    [转] CDH6 安装文章链接收集
    [转] org.scalatest.FunSuite Scala Examples
    [转] Mock以及Mockito的使用
    关于 maven 打包直接运行的 fat jar (uber jar) 时需要包含本地文件系统第三方 jar 文件的问题
    [转] flume使用(六):后台启动及日志查看
    [转] etcd 搭建与使用
    [转] 2018年最新桌面CPU性能排行天梯图(含至强处理器)
    让 Linux grep 的输出不换行
  • 原文地址:https://www.cnblogs.com/freephp/p/15473824.html
Copyright © 2011-2022 走看看