资讯专栏INFORMATION COLUMN

MySQL跨大版本升级

IT那活儿 / 450人阅读
MySQL跨大版本升级
点击上方“IT那活儿”公众号,关注后了解更多内容,不管IT什么活儿,干就完了!!!

  
因现网环境数据库被扫描出漏洞存在,需对现网数据库进行版本升级,此次升级为跨大版本进行升级,为MySQL5.7-MySQL8.0的升级。



 方案描述


1. 适用范围

  • MySQL
  • 平台:Linux

2. 注意事项

  • 注意字符集设置

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

  • 密码认证插件变更

    为了避免连接问题,可以仍采用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来完成该步骤的升级。



 升级步骤


1. 下载解压安装包
# 安装包上传至原安装包目录下,我的是/usr/local/。
cd /usr/local/
# 解压安装包:
  • xz -d mysql-8.0.19-linux-glibc2.12-x86_64.tar.xz
  • tar -xvf mysql-8.0.19-linux-glibc2.12-x86_64.tar

# 文件夹重命名为mysql8:

  • mv mysql-8.0.19-linux-glibc2.12-x86_64 mysql8

# 更改文件夹所属:

  • chown -R mysql.mysql /usr/local/mysql8/

2. 更改配置文件(重要参数)
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
3. 执行升级程序
# 进入原5.7 mysql命令行,正确关闭数据库。
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.00 sec)

# 确保数据都刷到硬盘上,更改成0。

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
# 退出至终端 用mysql8.0.19客户端直接启动。
[root@centos ~]# /usr/local/mysql8/bin/mysqld_safe --defaults-file=/etc/my.cnf --user=mysql &
[1] 23333
[root@centos ~]# 20XX-0X-20T07:07:02.337626Z mysqld_safe Logging to /data/mysql/logs/error.log.
20XX-0X-20T07:07:02.366244Z mysqld_safe Starting mysqld daemon with databases from /data/mysql/data
# 可观察下错误日志看是否报错 然后重新登录测试。
[root@centos ~]# mysql -uroot -p123456
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor. Commands end with ; or g.
Your MySQL connection id is 17
Server version: 8.0.19 MySQL Community Server - GPL

Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type help; or h for help. Type c to clear the current input statement.

mysql> select version();
+-----------+
| version() |
+-----------+
| 8.0.19    |
+-----------+
1 row in set (0.00 sec)
4. 环境变量修改
# 修改PATH变量:
vi /etc/profile

# 将PATH中的/usr/local/mysql/bin改为/usr/local/mysql8/bin.

# 生效验证:
[root@centos ~]# source /etc/profile
[root@centos ~]# which mysql
/usr/local/mysql8/bin/mysql
[root@centos ~]# mysql -V
mysql Ver 8.0.19 for linux-glibc2.12 on x86_64 (MySQL Community Server - GPL)
至此我们的数据库由5.7成功升级至8.0!
总结对比MySQL安装过程及升级过程,发现二者很相似,其实升级过程并不复杂,复杂的是升级后的验证及兼容测试,特别是对于复杂的业务库,MySQL版本升级还是要小心的。真实环境建议先升级从库,验证无误后再逐步对主库进行升级。

本文作者:赵栋辉(上海新炬王翦团队)

本文来源:“IT那活儿”公众号

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/129375.html

相关文章

  • 升级 postgresql

    摘要:但如果涉及到跨大版本升级比如升级到,这种直接替换软件就不行了,因为跨版本的内部存储形式发生了变化官方对于升级提供了种方法,这里迁移我使用了来进行处理细节可以参考官方文档。 1 场景描述 最近使用 postgresql 命令行比较多,就找了个类似 mycli 工具,pgcli,这个是针对 postgresql 的,兴冲冲的安装了 brew install pgcli 没想到这货自动帮我...

    learn_shifeng 评论0 收藏0
  • CentOS 6.x 升级 Git

    摘要:准备说明公司服务器为,安装后的默认版本是,在执行命令时报错如下经过一番搜索终于找到可行的办法,即为升级版本,升级时间比较长,需要比较好的网络支持版本检测下使用检测的版本系统检测通过以上信息可知系统版本为位升级导入证书安 准备 说明 公司服务器为centos,安装git后的默认版本是1.7.1,在执行git clone命令时报错如下: fatal: HTTP request...

    _ang 评论0 收藏0

发表评论

0条评论

IT那活儿

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<