当前位置: 首页 > news >正文

mysql数据库8.0小版本原地升级

mysql数据库8.0小版本原地升级

  • 准备工作
  • 升级工作
    • 停库
    • 使用新版本软件启动数据库
    • 更新环境变量
    • 重启数据库
  • 升级日志

  • OS release: CentOS 7.9
  • 升级前DB version: MySQL 8.0.30
  • 数据库升级安装包:mysql-8.0.36-linux-glibc2.12-x86_64.tar.xz
  • MySQL Shell安装包:mysql-shell-8.0.36-linux-glibc2.12-x86-64bit.tar.gz

准备工作

(1)修改认证插件

SQL> show variables like '%authentication_plugin%';
+-------------------------------+-----------------------+
| Variable_name                 | Value                 |
+-------------------------------+-----------------------+
| default_authentication_plugin | mysql_native_password |
+-------------------------------+-----------------------+
1 row in set (0.00 sec)

出于安全因素考虑,my.cnf里的认证插件如果用的是mysql_native_password,建议替换为caching_sha2_password。

[mysqld]
default_authentication_plugin=caching_sha2_password

检查用户的认证插件:

SQL> select user,host,plugin from mysql.user;
+---------------------------+---------------+-----------------------+
| user                      | host          | plugin                |
+---------------------------+---------------+-----------------------+
| appuser                   | %             | mysql_native_password |
| jeffrey                   | localhost     | mysql_native_password |
| mysql_innodb_rs_101       | %             | mysql_native_password |
| mysql_innodb_rs_173592206 | %             | mysql_native_password |
| mysql_rcadmin             | %             | mysql_native_password |
| root                      | 127.0.0.1     | caching_sha2_password |
| mysql.infoschema          | localhost     | caching_sha2_password |
| mysql.session             | localhost     | caching_sha2_password |
| mysql.sys                 | localhost     | caching_sha2_password |
+---------------------------+---------------+-----------------------+

更新用户的认证插件:

SQL> ALTER USER 'jeffrey'@'localhost' IDENTIFIED WITH caching_sha2_password BY 'new_password';

(2)弃用的参数

MySQL 8.0中不再建议使用expire_logs_days参数,而是使用binlog_expire_logs_seconds来代替。

[mysqld]
binlog_expire_logs_seconds=604800   # 日志保留7天

(3)备份工具

利用备份工具对要升级的数据库进行全库备份。

🐯 MySQL 8.0.36不再支持mysqlpump工具。数据库备份请使用mysqldump、MySQL Shell或者xtrabackup的对应版本。

(4)统计数据量

--查询所有数据库的总大小
select concat(round(sum(DATA_LENGTH/1024/1024),2),'MB') as data from information_schema.tables;--统计每个库大小
select table_schema, count(*) tables,
concat(round(sum(table_rows)/1000,2),'千行') table_rows,
concat(round(sum(data_length)/(1024*1024),2),'M') data_size,
concat(round(sum(index_length)/(1024*1024),2),'M') idx_size,
concat(round(sum(data_length+index_length)/(1024*1024*1024),2),'G') total_size
from information_schema.tables
where table_schema not in ('information_schema','performance_schema','mysql','sys')
group by table_schema order by sum(data_length+index_length) desc;

(5)升级前检查

升级前的版本:

[mysql@host01 software]$ mysql -V
mysql  Ver 8.0.30 for Linux on x86_64 (MySQL Community Server - GPL)

检查MySQL进程启动参数:

[mysql@host01 software]$ ps -ef | grep mysqld
/mysql/app/8.0/bin/mysqld_safe --defaults-file=/mydata/3306/my.cnf
/mysql/app/8.0/bin/mysqld --defaults-file=/mydata/3306/my.cnf --basedir=/mysql/app/8.0 --datadir=/mydata/3306/data --plugin-dir=/mysql/app/8.0/lib/plugin --log-error=/mydata/3306/err.log --open-files-limit=65535 --pid-file=/mydata/3306/runtime/mysql.pid --socket=/mydata/3306/runtime/mysql.sock --port=3306

检查环境变量:

[mysql@host01 ~]$ cat /home/mysql/.bash_profile
...export MYSQL_HOME=/mysql/app/8.0
export MYSQL_PORT=3306
export MYSQL_DATA=/mydata/${MYSQL_PORT}
export PATH=$MYSQL_HOME/bin:/mysql/util:/mysql/app/mysql-shell/bin:$PATH
export LD_LIBRARY_PATH=$MYSQL_HOME/lib:$LD_LIBRARY_PATH

使用mysqlcheck工具进行检查:

mysqlcheck -h127.0.0.1 -uroot -p --all-databases --check-upgrade

(6)下载安装包

MySQL社区版安装包:https://downloads.mysql.com/archives/community/

升级工作

停库

确认所有应用连接已断开,未提交的事务都已提交或者回滚。

--检查连接会话
SQL> show processlist;--检查未提交的XA事务
SQL> xa recover;

停止数据库:

mysqladmin -h127.0.0.1 -uroot shutdownps -ef | grep mysql

使用新版本软件启动数据库

解压8.0.36的安装文件到指定路径下:

tar -xzvf mysql-shell-8.0.36-linux-glibc2.12-x86-64bit.tar.gz -C /mysql/app/
tar -xJvf mysql-8.0.36-linux-glibc2.12-x86_64.tar.xz -C /mysql/app/cd /mysql/app
mv mysql-8.0.36-linux-glibc2.12-x86_64 mysql-8.0.36
mv mysql-shell-8.0.36-linux-glibc2.12-x86-64bit mysql-shell-8.0.36

备份配置文件:

cp /mydata/3306/my.cnf /home/mysql/my.cnf.bak

修改my.cnf中的BASEDIR配置:

[mysqld]
#basedir=/mysql/app/8.0
basedir=/mysql/app/mysql-8.0.36

使用8.0.36的二进程文件启动数据库:

/mysql/app/mysql-8.0.36/bin/mysqld_safe --defaults-file=/mydata/3306/my.cnf

数据库启动过程中会自动升级数据库文件。

新开一个窗口观察升级过程中的报错信息:

tail -fn100 /mydata/3306/err.log

更新环境变量

更新数据库环境变量/home/mysql/.bash_profile

export MYSQL_HOME=/mysql/app/mysql-8.0.36
export MYSQL_PORT=3306
export MYSQL_DATA=/mydata/${MYSQL_PORT}
export PATH=$MYSQL_HOME/bin:/mysql/util:/mysql/app/mysql-shell-8.0.36/bin:$PATH
export LD_LIBRARY_PATH=$MYSQL_HOME/lib:$LD_LIBRARY_PATH

环境变量配置生效:

source /home/mysql/.bash_profile

检查数据库版本:

mysql -V

登录数据库检查版本信息:

SQL> select version();

重启数据库

停库:

SQL> shutdown;

起库:

mysqld_safe --defaults-file=/mydata/3306/my.cnf &

升级日志

升级过程中日志输出如下:

...
2024-08-29T09:45:47.430756+08:00 1 [Note] [MY-013327] [Server] MySQL server upgrading from version '80030' to '80036'.
2024-08-29T09:45:50.619324+08:00 1 [Note] [MY-012357] [InnoDB] Reading DD tablespace files
2024-08-29T09:45:50.621361+08:00 1 [Note] [MY-012356] [InnoDB] Scanned 13 tablespaces. Validated 13.
2024-08-29T09:46:06.824099+08:00 1 [Note] [MY-010006] [Server] Using data dictionary with version '80023'.
2024-08-29T09:46:06.907185+08:00 3 [Note] [MY-014066] [Server] Upgrading performance schema from version 80030 to 80033.
2024-08-29T09:46:09.654011+08:00 4 [System] [MY-013381] [Server] Server upgrade from '80030' to '80036' started.
2024-08-29T09:46:09.656741+08:00 4 [Note] [MY-013386] [Server] Running queries to upgrade MySQL server.
2024-08-29T09:46:21.691407+08:00 4 [Note] [MY-013387] [Server] Upgrading system table data.
2024-08-29T09:46:23.200896+08:00 4 [Note] [MY-013385] [Server] Upgrading the sys schema.
2024-08-29T09:46:24.626951+08:00 4 [Note] [MY-013400] [Server] Upgrade of help tables started.
2024-08-29T09:46:24.915297+08:00 4 [Note] [MY-013400] [Server] Upgrade of help tables completed.
2024-08-29T09:46:24.915519+08:00 4 [Note] [MY-013394] [Server] Checking 'mysql' schema.
2024-08-29T09:46:25.050329+08:00 4 [Note] [MY-013394] [Server] Checking 'sys' schema.
2024-08-29T09:46:25.098315+08:00 4 [System] [MY-013381] [Server] Server upgrade from '80030' to '80036' completed.
...

可以看到,升级过程中主要是升级了系统表、help表、performance_schema和sys schema等数据库内部对象。

References
【1】https://www.modb.pro/db/1788223768225189888
【2】https://forums.mysql.com/read.php?30,712008,722919#msg-722919

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • vue解决“用户代理样式表“边距问题
  • 前端页面加载由模糊到清晰的实现方案
  • Sqlmap介绍及相关命令
  • 【sql】评估数据迁移复杂度调查汇报240904
  • B站(哔哩哔哩/bilibili)大数据面试题及参考答案(3万字长文)
  • 微信小程序授权登录流程以及使用到的API
  • 从电商行业的变化引出未来技术趋势
  • ThinkPHP5 5.0.23-rce远程代码执行漏洞复现
  • el-table使用#header自定义表头后脱离响应式问题处理
  • 设计模式学习[5]---装饰模式
  • 【C语言】编译原理
  • QMQTT在项目中的用法
  • 关于C++你应该知道的知识:C/C++内存管理
  • 【Python】正则表达式
  • python之异步任务
  • 〔开发系列〕一次关于小程序开发的深度总结
  • Akka系列(七):Actor持久化之Akka persistence
  • Apache Pulsar 2.1 重磅发布
  • CentOS7简单部署NFS
  • go append函数以及写入
  • iOS 系统授权开发
  • node和express搭建代理服务器(源码)
  • npx命令介绍
  • Object.assign方法不能实现深复制
  • Redis中的lru算法实现
  • seaborn 安装成功 + ImportError: DLL load failed: 找不到指定的模块 问题解决
  • Sublime Text 2/3 绑定Eclipse快捷键
  • Unix命令
  • 湖南卫视:中国白领因网络偷菜成当代最寂寞的人?
  • 七牛云假注销小指南
  • 全栈开发——Linux
  • 消息队列系列二(IOT中消息队列的应用)
  • 小试R空间处理新库sf
  • 智能合约开发环境搭建及Hello World合约
  • Linux权限管理(week1_day5)--技术流ken
  • 交换综合实验一
  • 容器镜像
  • ​​​​​​​ubuntu16.04 fastreid训练过程
  • ​2020 年大前端技术趋势解读
  • ​无人机石油管道巡检方案新亮点:灵活准确又高效
  • $HTTP_POST_VARS['']和$_POST['']的区别
  • (javaweb)Http协议
  • (Redis使用系列) SpirngBoot中关于Redis的值的各种方式的存储与取出 三
  • (vue)el-checkbox 实现展示区分 label 和 value(展示值与选中获取值需不同)
  • (编程语言界的丐帮 C#).NET MD5 HASH 哈希 加密 与JAVA 互通
  • (附源码)spring boot北京冬奥会志愿者报名系统 毕业设计 150947
  • (附源码)springboot猪场管理系统 毕业设计 160901
  • (九)c52学习之旅-定时器
  • (学习日记)2024.03.12:UCOSIII第十四节:时基列表
  • (转) ns2/nam与nam实现相关的文件
  • (转)Oracle 9i 数据库设计指引全集(1)
  • (转)大道至简,职场上做人做事做管理
  • (转)平衡树
  • (转)详解PHP处理密码的几种方式
  • .MSSQLSERVER 导入导出 命令集--堪称经典,值得借鉴!