mysql 从5.7.X升到8.0.X

来源:这里教程网 时间:2026-03-01 16:03:05 作者:
序:
因为存在漏洞,客户要求需要从5.7.X升到8.0.X。
1.升级前准备
新特性:
  • 默认字符集变为utf8mb4。
  • MyISAM系统表全部换成InnoDB表。
  • JSON特性增强。
  • 支持不可见索引,支持直方图。
  • sql_mode参数默认值变化。
  • 默认密码策略变更。
  • 新增角色管理。
  • 支持窗口函数,支持Hash join。
    温馨提示:
  • 注意字符集设置。
  • 密码认证插件变更。
  • sql_mode支持问题。
    2.实操过程
    1>.把以前数据库进行备份,为了安全。如果不是很重要的可以忽略这个步骤。
    ## 路径确定
    [root@localhost u01]# pwd
    /u01/mysql
    [root@localhost u01]# cd /u01/
    ## 进行备份
    [root@localhost u01]# zip -r -p mysql.zip  mysql
    [root@localhost u01]# ll
    drwxr-xr-x. 7 mysql mysql       4096 Sep  8  2020 mysql
    -rw-r--r--  1 root  root  2651712000 Sep 23 10:41 mysql-8.0.19-linux-glibc2.12-x86_64.tar
    -rw-r--r--  1 root  root  1436641756 Sep 28 11:17 mysql.zip
      2>.解压压缩包,并且解压到/usr/local/。(安装包是我直接从同事私服下载。大家可以从网上获取)
    [root@localhost u01]# tar -xvf mysql-8.0.19-linux-glibc2.12-x86_64.tar  -C /usr/local/
    3>.文件夹重命名mysql8
    [root@localhost u01]# cd  /usr/local
     [root@localhost local]#  mv mysql-8.0.19-linux-glibc2.12-x86_64/ mmysql8
      4>.更改配置文件 /etc/my.cnf
    #8.0 sql_mode = STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION character-set-server = utf8 collation_server = utf8_general_ci basedir = /usr/local/mysql8 skip_ssl default_authentication_plugin=mysql_native_password
    5>.确认版本,关闭数据库
      [root@localhost mysql]# mysql -uroot -p'XXXXXXX'
       Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
    mysql> select version();
    +------------+
    | version()  |
    +------------+
    | 5.7.23-log |
    +------------+
    1 row in set (0.00 sec)
    mysql> show variables like  'innodb_fast_shutdown';
    +----------------------+-------+
    | Variable_name        | Value |
    +----------------------+-------+
    | innodb_fast_shutdown | 1     |
    +----------------------+-------+
    1 row in set (0.01 sec)
    mysql> set global innodb_fast_shutdown=0;
    Query OK, 0 rows affected (0.00 sec)
    mysql> shutdown;
    Query OK, 0 rows affected (0.00 sec)
    mysql> exit
    Bye
    6>.确认mysql进行已经不存在了。
    [root@localhost mysql]# ps aux | grep mysql
    root     19015  0.0  0.0 112712   952 pts/3    S+   16:57   0:00 grep --color mysql
    7>.对所有的mysql文件进行授权。
    [root@localhost mysql]#chown -R mysql.mysql /usr/local/mysql8/
    [root@localhost mysql]#chown -R mysql.mysql /etc/my.cnf
    8>.执行启动mysql (没有进行配置项修改,如果有填写,就进行修改)
    [root@localhost mysql]#/etc/init.d/mysql start
    备注一下:修改配置项: [root@localhost mysql]#vi /etc/init.d/mysql basedir=/usr/local/mysql8  # 修改basedir目录
    出现错误1: [MY-010022] [Server] Failed to Populate DD tables.
    查看日志:
    原因:错误就是反馈,有个存储过程,问题。
    处理方法:
  • 还原到mysql 5.7
  • 查找到报错的问题进行处理。
  • 然后在进行授权,启动。
    出现错误2: unknown variable 'query_cache_size=262144000'.
    查看日志:
    2021-09-28T17:36:32.905388+08:00 5 [System] [MY-013381] [Server] Server upgrade from '50700' to '80019' started.
    2021-09-28T17:36:48.994585+08:00 5 [System] [MY-013381] [Server] Server upgrade from '50700' to '80019' completed.
    2021-09-28T17:36:49.185870+08:00 0 [ERROR] [MY-000067] [Server] unknown variable 'query_cache_size=262144000'.
    2021-09-28T17:36:49.187827+08:00 0 [ERROR] [MY-010119] [Server] Aborting
    2021-09-28T17:36:51.123917+08:00 0 [System] [MY-010910] [Server] /usr/local/mysql8/bin/mysqld: Shutdown complete (mysqld 8.0.19)  MySQL Community Server - GPL.
    原因:由于mysql驱动包的版本过低导致这个问题的发生意思是query cache在MySQL5.7.20就已经过时了,而在MySQL8.0之后就已经被移除了。
    处理方法:
    在/etc/my.cnf 中删除 query_cache 相关参数。
    9>.验证mysql 版本
    mysql> select version();
    +-----------+
    | version() |
    +-----------+
    | 8.0.19    |
    +-----------+
    1 row in set (0.00 sec)
    10>.修改环境变量(修改PATH变量) [root@localhost mysql]# vi /etc/profile # 将PATH中的/usr/local/mysql/bin改为/usr/local/mysql8/bin
    #配置环境变量生效
    [root@localhost mysql]# source /etc/profile  
    11>.验证
    [root@localhost u01]# mysql -V
    mysql  Ver 8.0.19 for linux-glibc2.12 on x86_64 (MySQL Community Server - GPL)
    [root@localhost u01]# which mysql
    /usr/local/mysql8/bin/mysql
    Deployment Complete;

    游戏是我的全部图景,我将演绎所有的游戏角色,我是每个活着角色的传奇。   --开心研

  • 相关推荐