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

2024-09-08 05:36

本文主要是介绍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

这篇关于mysql数据库8.0小版本原地升级的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1147260

相关文章

使用 sql-research-assistant进行 SQL 数据库研究的实战指南(代码实现演示)

《使用sql-research-assistant进行SQL数据库研究的实战指南(代码实现演示)》本文介绍了sql-research-assistant工具,该工具基于LangChain框架,集... 目录技术背景介绍核心原理解析代码实现演示安装和配置项目集成LangSmith 配置(可选)启动服务应用场景

oracle DBMS_SQL.PARSE的使用方法和示例

《oracleDBMS_SQL.PARSE的使用方法和示例》DBMS_SQL是Oracle数据库中的一个强大包,用于动态构建和执行SQL语句,DBMS_SQL.PARSE过程解析SQL语句或PL/S... 目录语法示例注意事项DBMS_SQL 是 oracle 数据库中的一个强大包,它允许动态地构建和执行

SQL 中多表查询的常见连接方式详解

《SQL中多表查询的常见连接方式详解》本文介绍SQL中多表查询的常见连接方式,包括内连接(INNERJOIN)、左连接(LEFTJOIN)、右连接(RIGHTJOIN)、全外连接(FULLOUTER... 目录一、连接类型图表(ASCII 形式)二、前置代码(创建示例表)三、连接方式代码示例1. 内连接(I

在MySQL执行UPDATE语句时遇到的错误1175的解决方案

《在MySQL执行UPDATE语句时遇到的错误1175的解决方案》MySQL安全更新模式(SafeUpdateMode)限制了UPDATE和DELETE操作,要求使用WHERE子句时必须基于主键或索引... mysql 中遇到的 Error Code: 1175 是由于启用了 安全更新模式(Safe Upd

使用Navicat工具比对两个数据库所有表结构的差异案例详解

《使用Navicat工具比对两个数据库所有表结构的差异案例详解》:本文主要介绍如何使用Navicat工具对比两个数据库test_old和test_new,并生成相应的DDLSQL语句,以便将te... 目录概要案例一、如图两个数据库test_old和test_new进行比较:二、开始比较总结概要公司存在多

轻松上手MYSQL之JSON函数实现高效数据查询与操作

《轻松上手MYSQL之JSON函数实现高效数据查询与操作》:本文主要介绍轻松上手MYSQL之JSON函数实现高效数据查询与操作的相关资料,MySQL提供了多个JSON函数,用于处理和查询JSON数... 目录一、jsON_EXTRACT 提取指定数据二、JSON_UNQUOTE 取消双引号三、JSON_KE

MySql死锁怎么排查的方法实现

《MySql死锁怎么排查的方法实现》本文主要介绍了MySql死锁怎么排查的方法实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录前言一、死锁排查方法1. 查看死锁日志方法 1:启用死锁日志输出方法 2:检查 mysql 错误

MySQL数据库函数之JSON_EXTRACT示例代码

《MySQL数据库函数之JSON_EXTRACT示例代码》:本文主要介绍MySQL数据库函数之JSON_EXTRACT的相关资料,JSON_EXTRACT()函数用于从JSON文档中提取值,支持对... 目录前言基本语法路径表达式示例示例 1: 提取简单值示例 2: 提取嵌套值示例 3: 提取数组中的值注意

MySQL修改密码的四种实现方式

《MySQL修改密码的四种实现方式》文章主要介绍了如何使用命令行工具修改MySQL密码,包括使用`setpassword`命令和`mysqladmin`命令,此外,还详细描述了忘记密码时的处理方法,包... 目录mysql修改密码四种方式一、set password命令二、使用mysqladmin三、修改u

查询SQL Server数据库服务器IP地址的多种有效方法

《查询SQLServer数据库服务器IP地址的多种有效方法》作为数据库管理员或开发人员,了解如何查询SQLServer数据库服务器的IP地址是一项重要技能,本文将介绍几种简单而有效的方法,帮助你轻松... 目录使用T-SQL查询方法1:使用系统函数方法2:使用系统视图使用SQL Server Configu