MySQL 5.7 升级到8.0

Posted 江洋大运

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL 5.7 升级到8.0相关的知识,希望对你有一定的参考价值。

1.升级之前需要了解

①了解下mysql5.7和8.0的不同

  • 默认字符集由latin1变为utf8mb4。

  • MyISAM系统表全部换成InnoDB表。

  • JSON特性增强。

  • 支持不可见索引,支持直方图。

  • sql_mode参数默认值变化。

  • 默认密码策略变更。

  • 新增角色管理。

  • 支持窗口函数,支持Hash join

②注意事项

  • 注意字符集设置。为了避免新旧对象字符集不一致的情况,可以在配置文件将字符集和校验规则设置为旧版本的字符集和比较规则。

  • 密码认证插件变更。为了避免连接问题,可以仍采用5.7的mysql_native_password认证插件。

  • sql_mode支持问题。8.0版本sql_mode不支持NO_AUTO_CREATE_USER,要避免配置的sql_mode中带有NO_AUTO_CREATE_USER。

  • 是否需要手动升级系统表。在MySQL 8.0.16版本之前,需要手动的执行mysql_upgrade来完成该步骤的升级,在MySQL 8.0.16版本及之后是由mysqld来完成该步骤的升级。


2.具体升级过程

https://downloads.mysql.com/archives/community/

①上传mysql8.0 软件包,并解压

[root@mysql-1 ~]# tar -xf mysql-8.0.25-linux-glibc2.12-x86_64.tar[root@mysql-1 ~]# tar -xf mysql-8.0.25-linux-glibc2.12-x86_64.tar.xz[root@mysql-1 ~]# mv mysql-8.0.25-linux-glibc2.12-x86_64 /application/mysql8.0[root@mysql-1 ~]# chown -R mysql.mysql /application/mysql8.0/

②备份修改配置文件

[root@mysql-1 ~]# cp /etc/my.cnf /etc/my7.5.cnf[root@mysql-1 ~]# vim /etc/my.cnf[mysqld]user=mysqlbasedir=/application/mysql8.0datadir=/data/mysqlsocket=/tmp/mysql.sockserver_id=6socket=/tmp/mysql.socklog_error=/data/logs/mysql.loglog_bin=/data/logs/mysql-binport=3306##8.0配置sql_mode = STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTIONcharacter-set-server = utf8collation_server = utf8_general_ciskip_ssldefault_authentication_plugin=mysql_native_password[mysql]socket=/tmp/mysql.sock

③进入mysql 5.7 数据库,命令行正常关闭数据库

[root@mysql-1 ~]# mysql -uroot -proot -e "select version();"mysql: [Warning] Using a password on the command line interface can be insecure.+-----------+| version() |+-----------+| 5.7.26 |+-----------+[root@mysql-1 ~]# mysql -uroot -prootmysql> show variables like 'innodb_fast_shutdown';+----------------------+-------+| Variable_name | Value |+----------------------+-------+| innodb_fast_shutdown | 1    |+----------------------+-------+1 row in set (0.00 sec)mysql> set global innodb_fast_shutdown=0;mysql> shutdown;mysql> exit

④修改systemd管理启动mysqld

[root@mysql-1 ~]# cp /etc/systemd/system/mysqld.service /etc/systemd/system/mysqld8.servicecat >/etc/systemd/system/mysqld8.service <<EOF[Unit]Description=MySQL ServerDocumentation=man:mysqld(8)Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.htmlAfter=network.targetAfter=syslog.target[Install]WantedBy=multi-user.target[Service]User=mysqlGroup=mysqlExecStart=/application/mysql8.0/bin/mysqld --defaults-file=/etc/my.cnfLimitNOFILE = 5000EOF

⑤修改环境变量

[root@mysql-1 ~]# vim /etc/profileexport PATH=/application/mysql8.0/bin:$PATH

⑥启动数据库

[root@mysql-1 ~]# systemctl start mysqld8[root@mysql-1 ~]# netstat -tunlp | grep 3306tcp6 0 0 :::33060 :::* LISTEN 67380/mysqld tcp6       0      0 :::3306                 :::*                    LISTEN      67380/mysqld

以上是关于MySQL 5.7 升级到8.0的主要内容,如果未能解决你的问题,请参考以下文章

MySQL 5.7升级8.0过程(详解)

MySQL MGR从5.7滚动升级至8.0

将MySQL版本从5.7升级到8.0的操作过程和注意事项

centos 5.7 之前的服务器无法升级到 8.0。服务器启动失败

查询(HAVING 子句)在 Mysql 版本 5.7 和 8.0 之间的行为不同

mysql 5.7升级8.0 ERROR 1726 (HY000): Storage engine