MySQL8.0就地升级到MySQL8.4.0

MySQL8.0就地升级到MySQL8.4.0

升级需求:将8.0.35升级到8.4.0,以In-Place方式直接升级到MySQL8.4.0。

数据库版本

操作系统版本

原版本

8.0.35

Centos7.9 x86_64

新版本

8.4.0

Centos7.9 x86_64

关闭现有版本MySQL,将二进制或包替换成新版本并在现有数据目录上启动MySQL并执行升级任务的方式,称为in-place升级。升级过程分为以下几步:

  1. 完成升级前检查,并处理不合规问题。
  2. 如果使用了XA事务,升级前通过命令xa recover未提交XA事务,并使用xa commit或xa rollback命令提交或回滚。
  3. 将innodb_fast_shutdown改为0或1。
  4. 关闭现版本MySQL。
  5. 升级MySQL二进制文件或软件包。
  6. 在现有数据目录上启动新版本MySQL。

MySQL8.4.0特性说明

以下整理了常用的功能变化,详细内容查阅官方文档,官方文档位置:MySQL :: MySQL 8.4 Reference Manual :: 1.4 What Is New in MySQL 8.4 since MySQL 8.0

新增功能

MySQL本地密码验证更改

从MySQL 8.4.0开始,默认情况下不再启用已弃用的 mysql_native_password 身份验证插件。要启用它,请使用 --mysql-native-password=ON (在MySQL 8.4.0中添加)启动服务器,或者在MySQL配置文件的 [mysqld] 部分中包含 mysql_native_password=ON (在MySQL 8.4.0中添加)。

InnoDB系统变量默认值更改

InnoDB系统变量默认值更改。在MySQL 8.4.0中,与 InnoDB 存储引擎相关的多个服务器系统变量的默认值发生了更改,如下表所示:

InnoDB System Variable Name
InnoDB系统变量名

New Default Value (MySQL 8.4)
新默认值(MySQL 8.4)

Previous Default Value (MySQL 8.0)
默认值(MySQL 8.0)

innodb_buffer_pool_in_core_file

OFF if MADV_DONTDUMP is supported, otherwise ON
如果支持 MADV_DONTDUMP ,则为 OFF ,否则为 ON

ON

innodb_buffer_pool_instances

If innodb_buffer_pool_size <= 1 GiB, then innodb_buffer_pool_instances=1
如果 innodb_buffer_pool_size <= 1 GiB,则 innodb_buffer_pool_instances=1

If innodb_buffer_pool_size > 1 GiB, then this is the minimum value from the following two calculated hints in the range of 1-64:
如果 innodb_buffer_pool_size > 1 GiB,则这是在1-64范围内的以下两个计算提示的最小值:

  • Buffer pool hint: Calculated as 1/2 of (innodb_buffer_pool_size / innodb_buffer_pool_chunk_size)
    缓冲池提示:按( innodb_buffer_pool_size / innodb_buffer_pool_chunk_size )的1/2计算
  • CPU hint: Calculated as 1/4 of the number of available logical processors
    CPU提示:计算为可用逻辑处理器数量的1/4

8 (or 1 if innodb_buffer_pool_size

< 1 GiB)
8(或1,如果 innodb_buffer_pool_size < 1 GiB)

innodb_change_buffering

none

all

innodb_dedicated_server

If ON[a]

, the value of innodb_flush_method

is no longer changed as in MySQL 8.0, but the calculation of innodb_redo_log_capacity

is changed from memory-based to CPU-based. For more information, see Section 17.8.12, “Enabling Automatic Configuration for a Dedicated MySQL Server”

.
如果是 ON [a] ,则 innodb_flush_method 的值不再像MySQL 8.0那样改变,但 innodb_redo_log_capacity 的计算从基于内存改为基于CPU。有关更多信息,请参见第17.8.12节“为专用MySQL服务器启用自动配置”。

OFF
变量的实际默认值为 OFF

innodb_adaptive_hash_index

OFF

ON

innodb_doublewrite_files

2

innodb_buffer_pool_instances

* 2

innodb_doublewrite_pages

128

innodb_write_io_threads

, which meant a default of 4
innodb_write_io_threads ,表示默认值为4

innodb_flush_method

on Linux innodb_flush_method 在Linux上

O_DIRECT if supported, otherwise fsync
O_DIRECT 如果支持,否则 fsync

fsync

innodb_io_capacity

10000

200

innodb_io_capacity_max

2 * innodb_io_capacity

2 * innodb_io_capacity

, with a minimum default value of 2000
2 * innodb_io_capacity ,最小默认值为2000

innodb_log_buffer_size

67108864 (64 MiB) 67108864(64 MiB)

16777216 (16 MiB) 16777216(16 MiB)

innodb_numa_interleave

ON

OFF

innodb_page_cleaners

innodb_buffer_pool_instances

4

innodb_parallel_read_threads

available logical processors / 8, with a minimum default value of 4
可用逻辑处理器/ 8,最小默认值为4

4

innodb_purge_threads

1 if available logical processors is <= 16, otherwise 4
如果可用逻辑处理器<= 16,则为1,否则为4

4

innodb_read_io_threads

available logical processors / 2, with a minimum default value of 4
可用逻辑处理器/ 2,最小默认值为4

4

innodb_use_fdatasync

ON

OFF

temptable_max_ram

3% of total memory, with a default value within a range of 1-4 GiB
总内存的3%,默认值范围为1-4 GiB

1073741824 (1 GiB) 1073741824(1 GiB)

temptable_max_mmap

0, which means OFF 0,表示 OFF

1073741824 (1 GiB) 1073741824(1 GiB)

temptable_use_mmap

OFF
在MySQL 8.0.26中弃用

ON

克隆插件

克隆插件。克隆插件版本控制要求被放宽,允许在同一系列的不同版本之间进行克隆。换句话说,只有主版本号和次版本号必须匹配,而以前点版本号也必须匹配

例如,克隆功能现在允许将8.4.0克隆到8.4.14,反之亦然。

MySQL复制

SOURCE_RETRY_COUNT变化

MySQL复制:SOURCE_RETRY_COUNT更改。 CHANGE REPLICATION SOURCE TO 语句的 SOURCE_RETRY_COUNT 选项的默认值已更改为10。这意味着,如果使用此选项和 SOURCE_CONNECT_RETRY 的默认值(60),复制副本将在两次重新连接尝试之间等待60秒,并在超时和故障切换之前以此速率继续尝试重新连接10分钟。

此更改也适用于已弃用的 --master-retry-count 服务器选项的默认值。(You应该使用 SOURCE_RETRY_COUNT 代替。)

标记的GTID

MySQL复制:标记的GTID。MySQL复制和组复制中使用的全局事务标识符(GID)的格式已经扩展,可以识别事务组,从而可以为属于特定事务组的GTID分配唯一的名称。例如,包含数据操作的事务可以通过比较它们的GTID容易地与由管理操作产生的事务区分开。

新的GTID格式是 UUID:TAG:NUMBER ,其中 TAG 是最多8个字符的字符串,通过将 gtid_next 系统变量的值设置为 AUTOMATIC:TAG (在此版本中添加)来启用(有关标记格式和其他信息,请参见变量的描述)。此标记对于当前会话中发起的所有事务都保持不变(除非使用 SET gtid_next 进行了更改),并在此类事务的提交时应用,或者在使用组复制时在认证时应用。也可以将 gtid_next 设置为 UUID:TAG:NUMBER ,以将单个事务的UUID设置为任意值,同时沿着为其分配自定义标记。 UUID 和 NUMBER 的分配与以前的MySQL版本相比没有变化。在任何一种情况下,用户都有责任确保标记对于给定的复制拓扑是唯一的。

将 gtid_next 设置为 AUTOMATIC:TAG 或 UUID:TAG:NUMBER 需要一个新的 TRANSACTION_GTID_TAG 权限,该权限是在此版本中添加的;在原始服务器上以及副本应用程序线程的 PRIVILEGE_CHECKS_APPLIER 上都是如此。这也意味着管理员现在可以将 SET @gtid_next=AUTOMATIC:TAG 或 UUID:TAG:NUMBER 的使用限制为所需的MySQL用户或角色集,以便只有与给定数据或操作域相关的用户才能提交具有分配的标记的新事务。

从MySQL的早期版本升级到MySQL 8.4时,任何已经拥有 BINLOG_ADMIN 权限的用户帐户或角色都会自动获得 TRANSACTION_GTID_TAG 权限。

弃用的功能

expire_logs_days

expire_logs_days系统变量。MySQL 8.0中不推荐使用的 expire_logs_days server系统变量已被删除。尝试在运行时获取或设置此变量,或使用等效选项( --expire-logs-days )启动mysqld,现在会导致错误。

使用 binlog_expire_logs_seconds 来代替 expire_logs_days ,它允许您指定(仅)整数天以外的到期期限。

删除的功能

Replication SQL syntax

复制SQL语法。MySQL复制中使用的一些SQL语句在MySQL的早期版本中被弃用,在MySQL 8.4中不再支持。现在,尝试使用这些语句中的任何一个都会产生语法错误。这些语句可以分为两组:与源服务器相关的语句和与副本相关的语句,如下所示:

作为这项工作的一部分, CREATE EVENT 和 ALTER EVENT 的 DISABLE ON SLAVE 选项现在已被弃用,并被 DISABLE ON REPLICA 取代。相应的术语 SLAVESIDE_DISABLED 现在也被弃用,并且不再用于事件描述中,例如在信息架构 EVENTS 表中;现在显示的是 REPLICA_SIDE_DISABLED 。

下面列出了已删除的与复制源服务器相关的语句:

  • CHANGE MASTER TO: Use CHANGE REPLICATION SOURCE TO.
  • RESET MASTER: Use RESET BINARY LOGS AND GTIDS.
  • SHOW MASTER STATUS: Use SHOW BINARY LOG STATUS.
  • PURGE MASTER LOGS: Use PURGE BINARY LOGS.
  • SHOW MASTER LOGS: Use SHOW BINARY LOGS.

此处列出了删除的与复制副本相关的SQL语句:

  • START SLAVE: Use START REPLICA.
  • STOP SLAVE: Use STOP REPLICA.
  • SHOW SLAVE STATUS: Use SHOW REPLICA STATUS.
  • SHOW SLAVE HOSTS: Use SHOW REPLICAS.
  • RESET SLAVE: Use RESET REPLICA.
    此处列出了从 CHANGE REPLICATION SOURCE TO 中删除的选项:
  • MASTER_AUTO_POSITION: Use SOURCE_AUTO_POSITION.
  • MASTER_HOST: Use SOURCE_HOST.
  • MASTER_BIND: Use SOURCE_BIND.
  • MASTER_UseR: Use SOURCE_UseR.
  • MASTER_PASSWORD: Use SOURCE_PASSWORD.
  • MASTER_PORT: Use SOURCE_PORT.
  • MASTER_CONNECT_RETRY: Use SOURCE_CONNECT_RETRY.
  • MASTER_RETRY_COUNT: Use SOURCE_RETRY_COUNT.
  • MASTER_DELAY: Use SOURCE_DELAY.
  • MASTER_SSL: Use SOURCE_SSL.
  • MASTER_SSL_CA: Use SOURCE_SSL_CA.
  • MASTER_SSL_CAPATH: Use SOURCE_SSL_CAPATH.
  • MASTER_SSL_CIPHER: Use SOURCE_SSL_CIPHER.
  • MASTER_SSL_CRL: Use SOURCE_SSL_CRL.
  • MASTER_SSL_CRLPATH: Use SOURCE_SSL_CRLPATH.
  • MASTER_SSL_KEY: Use SOURCE_SSL_KEY.
  • MASTER_SSL_VERIFY_SERVER_CERT: Use SOURCE_SSL_VERIFY_SERVER_CERT.
  • MASTER_TLS_VERSION: Use SOURCE_TLS_VERSION.
  • MASTER_TLS_CIPHERSUITES: Use SOURCE_TLS_CIPHERSUITES.
  • MASTER_SSL_CERT: Use SOURCE_SSL_CERT.
  • MASTER_PUBLIC_KEY_PATH: Use SOURCE_PUBLIC_KEY_PATH.
  • GET_MASTER_PUBLIC_KEY: Use GET_SOURCE_PUBLIC_KEY.
  • MASTER_HEARTBEAT_PERIOD: Use SOURCE_HEARTBEAT_PERIOD.
  • MASTER_COMPRESSION_ALGORITHMS: Use SOURCE_COMPRESSION_ALGORITHMS.
  • MASTER_ZSTD_COMPRESSION_LEVEL: Use SOURCE_ZSTD_COMPRESSION_LEVEL.
  • MASTER_LOG_FILE: Use SOURCE_LOG_FILE.
  • MASTER_LOG_POS: Use SOURCE_LOG_POS.

此处列出了从 START REPLICA 语句中删除的选项:

  • MASTER_LOG_FILE: Use SOURCE_LOG_FILE.
  • MASTER_LOG_POS: Use SOURCE_LOG_POS.

mysql_upgrade

mysql_upgrade实用程序,在MySQL 8.0.16中被弃用,已被删除。

mysqlpump

mysqlpump实用程序。mysqlpump实用程序沿着及其辅助实用程序lz4_blog和zlib_blog,在MySQL 8.0.34中已被删除。相反,使用mysqldump或MySQL Shell的转储实用程序。

一.升级前准备

1.1.查看支持的平台

MySQL8.4.0已不支持Linux7以下的操作系统。支持的平台可查看官方文档,官方文档位置:

https://www.mysql.com/support/supportedplatforms/database.html

1.2.停止业务

确保业务已停止,保证数据一致性

--查询数据库中哪些线程正在执行
show processlist;
1.3.查看源数据库信息
#查版本
mysql -V 
或
mysql> select version();
+------------+
| version()  |
+------------+
| 8.0.35     |
+------------+
1 row in set (0.00 sec)

场景1:查询所有数据库的总大小

--查询所有数据库的总大小
use information_schema;
select concat(round(sum(DATA_LENGTH/1024/1024),2),'MB') as data from TABLES;--统计一下所有库数据量
SELECT
SUM(AVG_ROW_LENGTH*TABLE_ROWS+INDEX_LENGTH)/1024/1024 AS total_mb
FROM information_schema.TABLES; --统计每个库大小
SELECT
table_schema,SUM(AVG_ROW_LENGTH*TABLE_ROWS+INDEX_LENGTH)/1024/1024 AS total_mb
FROM information_schema.TABLES group by table_schema;  

场景2:查看指定数据库的大小

use information_schema;
select concat(round(sum(DATA_LENGTH/1024/1024),2),'MB') as data from TABLES where table_schema='pijiake';

场景3:记录数

--查看所有数据库各容量大小
select
table_schema as '数据库',
sum(table_rows) as '记录数',
sum(truncate(data_length/1024/1024, 2)) as '数据容量(MB)',
sum(truncate(index_length/1024/1024, 2)) as '索引容量(MB)'
from information_schema.tables
group by table_schema
order by sum(data_length) desc, sum(index_length) desc;--查看所有数据库各表容量大小
select
table_schema as '数据库',
table_name as '表名',
table_rows as '记录数',
truncate(data_length/1024/1024, 2) as '数据容量(MB)',
truncate(index_length/1024/1024, 2) as '索引容量(MB)'
from information_schema.tables
order by data_length desc, index_length desc;--查看指定数据库容量大小(例:查看mysql库容量大小)
select
table_schema as '数据库',
sum(table_rows) as '记录数',
sum(truncate(data_length/1024/1024, 2)) as '数据容量(MB)',
sum(truncate(index_length/1024/1024, 2)) as '索引容量(MB)'
from information_schema.tables
where table_schema='test'; --查看指定数据库各表容量大小(例:查看mysql库各表容量大小)
select
table_schema as '数据库',
table_name as '表名',
table_rows as '记录数',
truncate(data_length/1024/1024, 2) as '数据容量(MB)',
truncate(index_length/1024/1024, 2) as '索引容量(MB)'
from information_schema.tables
where table_schema='test'
order by data_length desc, index_length desc;
1.4.检查未提交的XA事务

如果您将XA事务与 InnoDB 一起使用,请在升级之前运行 XA RECOVER 以检查未提交的XA事务。如果返回结果,则通过发出 XA COMMIT 或 XA ROLLBACK 语句提交或回滚XA事务。

#检查没有未提交的xa事务
mysql> xa recover;
Empty set (0.00 sec)
1.5.确保数据都刷到硬盘上

如果您正常运行MySQL服务器,并将 innodb_fast_shutdown 设置为 2 (冷关闭),请通过执行以下语句之一来配置它以执行快速或慢速关闭:

# 确保数据都刷到硬盘上,更改成0
mysql -u root -p --execute="SET GLOBAL innodb_fast_shutdown=0"
或
mysql> 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;
Query OK, 0 rows affected (0.00 sec)
mysql> show variables like 'innodb_fast_shutdown';
+----------------------+-------+
| Variable_name        | Value |
+----------------------+-------+
| innodb_fast_shutdown | 0     |
+----------------------+-------+

补充说明:

SET GLOBAL innodb_fast_shutdown = 1; -- fast shutdown
SET GLOBAL innodb_fast_shutdown = 0; -- slow shutdown
1.6.升级前的初步检查
mysqlcheck -u root -p --all-databases --check-upgrade
1.6.1.初步检查的内容有
1.6.1.1.不得存在以下问题
  • 不能有使用过时数据类型或函数的表。
  • 不能有孤立的 .frm 文件。
  • 触发器不能有缺失的或空的定义符或无效的创建上下文
1.6.1.2.不能不具有本机分区支持存储引擎的分区表

不能有使用不具有本机分区支持的存储引擎的分区表。要识别此类表,请执行以下查询:

SELECT TABLE_SCHEMA, TABLE_NAMEFROM INFORMATION_SCHEMA.TABLESWHERE ENGINE NOT IN ('innodb', 'ndbcluster')AND CREATE_OPTIONS LIKE '%partitioned%';

查询报告的任何表都必须更改为使用 InnoDB 或不分区。要将表存储引擎更改为 InnoDB ,请执行以下语句:

ALTER TABLE table_name ENGINE = INNODB;

要使已分区表成为非分区表,请执行以下语句:

ALTER TABLE table_name REMOVE PARTITIONING;
1.6.1.3.关键字

MySQL 8.4中可能保留了一些以前没有保留的关键字。参见第11.3节“关键字和保留字”。这可能会导致以前用作标识符的单词变为非法。若要修复受影响的语句,请使用标识符引号。

1.6.1.4.数据字典使用的表同名的表检查

MySQL系统数据库中不能有与MySQL 8.4数据字典使用的表同名的表。要标识具有这些名称的表,请执行以下查询:

SELECT TABLE_SCHEMA, TABLE_NAME
FROM INFORMATION_SCHEMA.TABLES
WHERE LOWER(TABLE_SCHEMA) = 'mysql'AND LOWER(TABLE_NAME) IN('catalogs','character_sets','check_constraints','collations','column_statistics','column_type_elements','columns','dd_properties','events','foreign_key_column_usage','foreign_keys','index_column_usage','index_partitions','index_stats','indexes','parameter_type_elements','parameters','resource_groups','routines','schemata','st_spatial_reference_systems','table_partition_values','table_partitions','table_stats','tables','tablespace_files','tablespaces','triggers','view_routine_usage','view_table_usage');

必须删除或重命名查询报告的任何表(使用 RENAME TABLE )。这还可能需要对使用受影响表的应用程序进行更改。

1.6.1.5.外键约束名称检查

不能有外键约束名称超过64个字符的表。使用此查询可标识约束名称过长的表:

SELECT TABLE_SCHEMA, TABLE_NAME
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_NAME IN(SELECT LEFT(SUBSTR(ID,INSTR(ID,'/')+1),INSTR(SUBSTR(ID,INSTR(ID,'/')+1),'_ibfk_')-1)FROM INFORMATION_SCHEMA.INNODB_SYS_FOREIGNWHERE LENGTH(SUBSTR(ID,INSTR(ID,'/')+1))>64);

对于约束名称超过64个字符的表,请删除该约束,然后使用不超过64个字符的约束名称将其添加回来(使用 ALTER TABLE )。

1.6.1.6.sql_mode检查

必须没有由 sql_mode 系统变量定义的过时SQL模式。尝试使用过时的SQL模式会阻止MySQL 8.4启动。应该修改使用过时SQL模式的应用程序以避免使用它们。

1.6.1.7.视图检查

不能有显式定义的列名超过64个字符的视图(在MySQL 5.7中允许列名超过255个字符的视图)。为避免升级错误,应在升级前更改此类视图。目前,识别列名超过64个字符的视图的唯一方法是使用 SHOW CREATE VIEW 检查视图定义。您还可以通过查询InformationSchema VIEWS 表来检查视图定义。

1.6.1.8.ENUM 或 SET 列元素长度检查

表或存储过程中的单个 ENUM 或 SET 列元素的长度不得超过255个字符或1020个字节。在MySQL 8.4之前, ENUM 或 SET 列元素的最大组合长度为64K。在MySQL 8.4中,单个 ENUM 或 SET 列元素的最大字符长度为255个字符,最大字节长度为1020个字节。(The 1020字节限制支持多字节字符集)。在升级到MySQL 8.0之前,请修改任何超过新限制的 ENUM 或 SET 列元素。否则将导致升级失败并出现错误。

1.6.1.9.lower_case_table_names 参数设置

如果您打算在升级时将 lower_case_table_names 设置更改为1,请确保在升级之前将架构和表名重新命名。否则,可能会由于架构或表名大小写不匹配而导致失败。您可以使用以下查询来检查是否有包含Unicode字符的架构和表名:

mysql> select TABLE_NAME, if(sha(TABLE_NAME) !=sha(lower(TABLE_NAME)),'Yes','No') as UpperCase from information_schema.tables;

注意:

如果升级到MySQL 8.4由于上述任何问题而失败,服务器会将所有更改恢复到数据目录。在这种情况下,删除所有重做日志文件,并在现有数据目录上重新启动MySQL 8.3服务器以解决错误。重做日志文件( ib_logfile* )默认位于MySQL数据目录中。修复错误后,在再次尝试升级之前执行缓慢关机(通过设置 innodb_fast_shutdown=0 )。

7.备份数据库

为了更快的回退,文档采用目录备份的方式。

7.1.逻辑备份
--多个数据库备份成1个文件
mysqldump -uroot -p  --databases  xiaomiaoao pijiake  > /root/all-databases2213.sql--备份test数据库
mysqldump -uroot -p test > /data/mysqldb/tmp/test_exp_$(date +%F).sql 
7.2.目录备份

如果升级失败能更快的回退

--查看进程  确定使用的配置文件 安装目录
[root@localhost ~]# ps -ef | grep mysql
mysql      2232      1  0 13:10 ?        00:00:30 /mysqldb/mysql8/bin/mysqld --defaults-file=/mysqldb/my8.cnf--确定安装目录和数据目录
[root@localhost ~]# cat /mysqldb/my8.cnf | grep dir
basedir=/mysqldb/mysql8  #mysql安装根目录
datadir=/mysqldb/data8 #mysql数据文件所在目录--停止数据库
systemctl stop mysqld
或
mysql -uroot -p
shutdown;
或
mysqladmin -u root -p shutdown[root@localhost ~]# ps -ef | grep mysql
无输出--安装目录备份
cp -r /mysqldb/mysql8 /mysqldb/mysql8_bak_`date +%F`
--数据目录备份
cp -r /mysqldb/data8 /mysqldb/data8_bak_`date +%F`
--配置文件备份
cp /mysqldb/my8.cnf /mysqldb/my8.cnf_bak_`date +%F`
8.下载并安装新版本MySQL软件
#1.安装介质上传至/opt/下
#2.创建目录
mkdir -p /data/mysqldb840
#3.解压安装包
cd /opt
tar -xvf mysql-8.4.0-linux-glibc2.17-x86_64.tar.xz  -C /data/mysqldb840
#4.文件夹重命名为mysql8 
mv /data/mysqldb840/mysql*  /data/mysqldb840/mysql840
#5.更改文件夹所属
chown -R mysql.mysql /data/mysqldb840/mysql840
9.更改配置文件

从MySQL 8.4.0开始,默认情况下不再启用已弃用的 mysql_native_password 身份验证插件。要启用它,请使用 --mysql-native-password=ON (在MySQL 8.4.0中添加)启动服务器,或者在MySQL配置文件的 [mysqld] 部分中包含 mysql_native_password=ON (在MySQL 8.4.0中添加)。

需注释掉配置文件中default_authentication_plugin参数,替换为mysql_native_password=ON。

更改/etc/my.conf配置

vi /mysqldb/my8.cnf
#认证策略解决登录ERROR 2059 (HY000): Authentication plugin 'caching_sha2_password' cannot be loaded#
#default_authentication_plugin = mysql_native_password#add by MySQL8.4.0
mysql_native_password=ON

mysql从5.7平滑升级到8.0.27_linux mysql 5.7.6 平滑升级-CSDN博客

二.开始升级

2.1.关闭数据库
--1.进入原5.7 mysql命令行 正确关闭数据库
法1:
mysqladmin -uroot -p shutdown[root@mysql]# mysql -uroot -p
Enter password: 
#使用mysql shell 命令util.checkForServerUpgrade('root@127.0.0.1:3307', {"password":"XXXXX", "targetVersion":"8.0.26", "configPath":"/etc/my3307.cnf"}) 检查升级到目标版本8.0.26,确认没有error级别的问题
Errors:   0
Warnings: 17
Notices:  0#检查没有未提交的xa事务
mysql> xa recover;
Empty set (0.00 sec)# 确保数据都刷到硬盘上,更改成0
mysql> 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;
Query OK, 0 rows affected (0.00 sec)
mysql> show variables like 'innodb_fast_shutdown';
+----------------------+-------+
| Variable_name        | Value |
+----------------------+-------+
| innodb_fast_shutdown | 0     |
+----------------------+-------+mysql> shutdown;
Query OK, 0 rows affected (0.00 sec)mysql> exit#查看进程和端口后,已无输出记录,确保已停止
[root@localhost mysqldb8]# ps -ef | grep mysql
root       6330   6202  0 07:35 pts/0    00:00:00 mysql -uroot -p -P2213 test
root       6466   6202  0 09:18 pts/0    00:00:00 mysql -uroot -p
root       6522   6293  0 09:58 pts/1    00:00:00 mysql -uroot -p
root       6603   6551  0 10:14 pts/3    00:00:00 grep --color=auto mysql
[root@localhost mysqldb8]# ss -ntl | grep 2213
2.2.用mysql8.4.0客户端直接启动数据库

因目标版本8.4.0,直接在现有数据目录上启动新版本MySQL。

cd /data/mysqldb840/mysql840
bin/mysqld_safe --user=mysql --datadir=/mysqldb/data8 &

升级过程中日志内容:

[root@localhost opt]# tail -300f /mysqldb/log8/mysqld_error.log
......
2024-05-08T16:35:02.692061+08:00 0 [Warning] [MY-013907] [InnoDB] Deprecated configuration parameters innodb_log_file_size and/or innodb_log_files_in_group have been used to compute innodb_redo_log_capacity=536870912. Please use innodb_redo_log_capacity instead.
2024-05-08T16:35:02.695130+08:00 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started.
2024-05-08T16:35:03.457545+08:00 1 [System] [MY-013577] [InnoDB] InnoDB initialization has ended.
2024-05-08T16:35:03.477878+08:00 1 [System] [MY-011090] [Server] Data dictionary upgrading from version '80023' to '80300'.
2024-05-08T16:35:04.004278+08:00 1 [System] [MY-013413] [Server] Data dictionary upgrade from version '80023' to '80300' completed.
2024-05-08T16:35:05.563366+08:00 4 [System] [MY-013381] [Server] Server upgrade from '80035' to '80400' started.
2024-05-08T16:35:09.055973+08:00 4 [System] [MY-013381] [Server] Server upgrade from '80035' to '80400' completed.
2024-05-08T16:35:09.194856+08:00 0 [Warning] [MY-010068] [Server] CA certificate ca.pem is self signed.
2024-05-08T16:35:09.194920+08:00 0 [System] [MY-013602] [Server] Channel mysql_main configured to support TLS. Encrypted connections are now supported for this channel.
2024-05-08T16:35:09.221684+08:00 0 [System] [MY-010931] [Server] /data/mysqldb840/mysql840/bin/mysqld: ready for connections. Version: '8.4.0'  socket: '/mysqldb/mysql.sock'  port: 3306  MySQL Community Server - GPL.
2024-05-08T16:35:09.228009+08:00 0 [System] [MY-011323] [Server] X Plugin ready for connections. Bind-address: '::' port: 33060, socket: /tmp/mysqlx.sock
.......
2.3..更改环境变量

因basedir由/mysqldb/mysql8 变成了/data/mysqldb840/mysql840,故相关环境变量修改如下

#更改环境变量
[root@localhost ~]# vi .bash_profile
...
MYSQL_DATA=/data/mysqldb/data
#mysql8.0弃用
#export PATH=$PATH://mysqldb/mysql8/bin
#export MYSQL_HOME=/mysqldb/mysql8
#add for mysql8.4.0
export MYSQL_HOME=/data/mysqldb840/mysql840
export PATH=$PATH:/data/mysqldb840/mysql840/bin#生效环境变量
[root@localhost ~]# source .bash_profile#查看版本
[root@localhost ~]# mysql -V
mysql  Ver 8.4.0 for Linux on x86_64 (MySQL Community Server - GPL)
或
[root@localhost ~]# mysql -uroot -p
root@localhost :(none) 10:40:24>select version();
+-----------+
| version() |
+-----------+
| 8.4.0     |
+-----------+
1 row in set (0.00 sec)root@localhost :(none) 10:40:30>exit
2.4.更改配置文件
vi /mysqldb/my8.cnf
basedir=/mysqldb/mysql8  #mysql安装根目录
替换为
basedir=/data/mysqldb840/mysql840  #mysql安装根目录可用下面的批量替换
:%s#/mysqldb/mysql8#/data/mysqldb840/mysql840#g
2.5.配置系统服务
--配置mysql8系统服务
cp /usr/lib/systemd/system/mysqld.service /usr/lib/systemd/system/mysqld.service_bak_20240508[root@localhost ~]# cat /usr/lib/systemd/system/mysqld.service
[Unit]
Description=MySQL Server
Documentation=man:mysqld(8)
Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html
After=network.target
After=syslog.target[Install]
WantedBy=multi-user.target[Service]
User=mysql
Group=mysql
ExecStart=/data/mysqldb840/mysql840/bin/mysqld --defaults-file=/data/mysqldb/my.cnf
LimitNOFILE=65536  
LimitNPROC=65536
2.6.重新启动数据库
--关闭数据库
mysql -uroot -p
shutdown;--通过系统服务重启数据库
systemctl start mysqld
systemctl status mysqld

三.升级过程中所做内容

安装新版本的MySQL可能需要升级现有安装的以下部分:

  • mysql 系统架构,其中包含存储MySQL服务器运行时所需信息的表。mysql 模式表分为两大类:

(1).数据字典表,用于存储数据库对象元数据。

(2).系统表(即剩余的非数据字典表),用于其他操作目的。

  • 其他架构,其中一些是内置的,可以被认为是由服务器“拥有”的,而其他则不是:

(1).performance_schema 、 INFORMATION_SCHEMA 、 ndbinfo 和 sys 架构。

             (2).User schemas. 用户架构

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/837185.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

对比学习笔记

这里写目录标题 什么是对比学习计算机视觉中的对比学习对比学习在NLP中的应用 什么是对比学习 对比学习是在没有标签的前提下学习样本之间的是否相似&#xff0c;其实和二分类比较相似&#xff0c;判断两个图像是不是属于同一个类别。换句话来说就是把相近的分布推得更近&…

用Arm CCA解锁数据的力量

安全之安全(security)博客目录导读 目录 CCA将如何改变Arm架构呢? 在实践中部署CCA 释放数据和人工智能的全部力量和潜力 早期计算中最大的挑战之一是管理计算资源&#xff0c;以最大化计算效率同时提供给不同程序或用户分配资源的分离。这导致了我们今天大多数使用的时间…

MinIO学习笔记

MINIO干什么用的&#xff1a; AI数据基础设施的对象存储 为人工智能系统提供数据支持&#xff0c;数据存储&#xff1b;对象存储&#xff08;Object Storage&#xff09;是一种数据存储架构&#xff0c;它以对象为单位来处理、存储和检索数据&#xff0c;每个对象都包含了数据本…

ModuleSim 仿真找不到模块 module is not defined

提示如下&#xff1a; # vsim -t 1ps -L altera_ver -L lpm_ver -L sgate_ver -L altera_mf_ver -L altera_lnsim_ver -L cycloneive_ver -L rtl_work -L work -voptargs""acc"" pulse_generator_tb # Start time: 14:26:25 on May 10,2024 # ** Note: (…

开关电源功率测试方法:输入、输出功率测试步骤

在现代电子设备中&#xff0c;开关电源扮演着至关重要的角色&#xff0c;其效率和稳定性直接影响到整个系统的性能。因此&#xff0c;对开关电源进行功率测试成为了电源管理的重要环节。本文将详细介绍如何使用DC-DC电源模块测试系统对开关电源的输入输出功率进行准确测量&…

网络安全之OSPF进阶

该文针对OSPF进行一个全面的认识。建议了解OSPF的基础后进行本文的一个阅读能较好理解本文。 OSPF基础的内容请查看&#xff1a;网络安全之动态路由OSPF基础-CSDN博客 OSPF中更新方式中的触发更新30分钟的链路状态刷新。是因为其算法决定的&#xff0c;距离矢量型协议是边算边…

Python | Leetcode Python题解之第87题扰乱字符串

题目&#xff1a; 题解&#xff1a; class Solution:def isScramble(self, s1: str, s2: str) -> bool:cachedef dfs(i1: int, i2: int, length: int) -> bool:"""第一个字符串从 i1 开始&#xff0c;第二个字符串从 i2 开始&#xff0c;子串的长度为 le…

5.13号模拟前端面试10问

1.介绍箭头函数和普通函数的区别 箭头函数和普通函数在JavaScript中有一些重要的区别。以下是关于这些区别的详细解释&#xff1a; 语法结构上的差异&#xff1a; 箭头函数使用更简洁的语法&#xff0c;它不需要使用function关键字&#xff0c;而是使用一个箭头&#xff08;…

第三方组件element-ui

1、创建 选vue2 不要快照 vue2于vue3差异 vue2main。js import Vue from vue import App from ./App.vueVue.config.productionTip falsenew Vue({render: h > h(App), }).$mount(#app)vue3 main.js vue2不能有多个跟组件&#xff08;div&#xff09;

牛客网刷题 | BC82 乘法表

目前主要分为三个专栏&#xff0c;后续还会添加&#xff1a; 专栏如下&#xff1a; C语言刷题解析 C语言系列文章 我的成长经历 感谢阅读&#xff01; 初来乍到&#xff0c;如有错误请指出&#xff0c;感谢&#xff01; 描述 输出九九乘法表&am…

ASP.NET医药进销存系统

摘 要 目前&#xff0c;大中型城市的多数药品店已经实现了商品管理、客户管理、销售管理及销售管理等的信息化和网络化&#xff0c;提高了管理效率。但是&#xff0c;在大多数小药品店&#xff0c;药品店管理仍然以传统人工管理为主&#xff0c;特别是在药品的采购、销售、库…

污水设备远程监控

随着环保意识的日益增强&#xff0c;污水处理作为城市建设和环境保护的重要一环&#xff0c;越来越受到社会各界的关注。然而&#xff0c;传统的污水处理设备管理方式往往存在着效率低下、响应速度慢、维护成本高等问题。为了解决这些痛点&#xff0c;HiWoo Cloud平台凭借其强大…

【数据结构】栈和队列OJ面试题

20. 有效的括号 - 力扣&#xff08;LeetCode&#xff09; 思路&#xff1a;由于C语言没有栈的接口&#xff0c;所以我们需要自己造一个“模子”。我们直接copy之前的实现的栈的接口就可以了&#xff08;可以看我之前的博客【数据结构】栈和队列-CSDN博客copy接口&#xff09;&…

BGP基础配置实验

BGP基础配置实验 一、实验拓扑 初始拓扑&#xff1a; 最终拓扑&#xff1a; 二、实验要求及分析 实验要求&#xff1a; 1&#xff0c;R1为AS 100区域&#xff1b;R2、R3、R4为AS 200区域且属于OSPF协议&#xff1b;R5为AS 300区域&#xff1b; 2&#xff0c;每个设备上都有…

全面监控:系统日志分析与记录

全面监控&#xff1a;系统日志记录 系统日志是记录计算机系统各种活动和事件的文件或数据库。它们包含了系统的运行状态、错误信息、警告、用户操作记录等。 系统管理员和软件开发人员经常使用系统日志来诊断问题、监视系统性能和跟踪用户活动。 日志记录通常包括时间戳、事…

I. Integer Reaction

Problem - I - Codeforces 看到最小值最大值&#xff0c;二分答案。 思路&#xff1a;每次二分时开两个集合&#xff0c;分别表示 0 0 0颜色和 1 1 1颜色。如果是 c c c颜色&#xff0c;先将值存入 c c c颜色&#xff0c;之后在 ! c !c !c颜色中找大于等于 m i d − a mid - a…

软件设计师笔记(三)-设计模式和算法设计

本文内容来自笔者学习zst 留下的笔记&#xff0c;都是零碎的要点&#xff0c;查缺补漏&#xff0c;希望大家都能通过&#xff0c;记得加上免费的关注&#xff01;谢谢&#xff01;本章主要以下午题出现形式为主&#xff01; 文章编辑于&#xff1a;2024-5-13 13:43:47 目录 1…

数据分离和混淆矩阵的学习

1.明确意义 通过训练集建立模型的意义是对新的数据进行准确的预测&#xff08;测试集的准度高才代表good fit&#xff09;&#xff1b; 2.评估流程 3.单单利用准确率accuracy进行模型评估的局限性 模型一&#xff1a;一共1000个数据&#xff08;分别为900个1和100个0&#x…

Adobe After Effects AE v24.3.0 解锁版 (视频合成及视频特效制作)

Adobe系列软件安装目录 一、Adobe Photoshop PS 25.6.0 解锁版 (最流行的图像设计软件) 二、Adobe Media Encoder ME v24.3.0 解锁版 (视频和音频编码渲染工具) 三、Adobe Premiere Pro v24.3.0 解锁版 (领先的视频编辑软件) 四、Adobe After Effects AE v24.3.0 解锁版 (视…

AI网络爬虫:用kimichat自动批量提取网页内容

首先&#xff0c;在网页中按下F12键&#xff0c;查看定位网页元素&#xff1a; 然后在kimi中输入提示词&#xff1a; 你是一个Python编程专家&#xff0c;要完成一个爬取网页内容的Python脚本&#xff0c;具体步骤如下&#xff1a; 在F盘新建一个Excel文件&#xff1a;提示词…