MySQL8.0就地升级到MySQL8.4.0

news2024/12/30 1:01:50

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_NAME
    FROM INFORMATION_SCHEMA.TABLES
    WHERE 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_FOREIGN
   WHERE 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.coloradmin.cn/o/1672880.html

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

相关文章

小红薯视频作品一键克隆,解放双手自动搬运【永久脚本+使用教程】

软件介绍&#xff1a; 小红薯作品搬运神器&#xff0c;软件只需要复制对方的作品链接即可一键克隆搬运到自己的小红书上&#xff0c;再也不用手动去复制粘贴了&#xff0c;批量起号搬运必备神器 设备需求&#xff1a; 电脑 链接&#xff1a;https://pan.baidu.com/s/11MzBqER…

Automa:一键自动化,网页数据采集与工作流程优化专家

Automa&#xff1a;解锁自动化浏览器潜能&#xff0c;赋能工作效率&#xff0c;让复杂任务变得简单- 精选真开源&#xff0c;释放新价值。 概览 Automa是一款创新的网页自动化工具&#xff0c;专为寻求提升工作效率、简化数据收集过程的现代工作者设计。它融合了先进的数据抓取…

SpringAI集成本地AI大模型ollama(调用篇)非常简单!!

一&#xff0c;前提准备本地ai模型 1&#xff0c;首先需要去ollama官网下载开源ai到本地 网址&#xff1a;Ollama 直接下载到本地&#xff0c;然后启动ollama 启动完成后&#xff0c;我们可以在cmd中执行ollama可以看到相关命令行 2&#xff0c; 下载ai moudle 然后我们需要…

【MQTT】paho.mqtt.c 库的“介绍、下载、交叉编译” 详解,以及编写MQTT客户端例子源码

&#x1f601;博客主页&#x1f601;&#xff1a;&#x1f680;https://blog.csdn.net/wkd_007&#x1f680; &#x1f911;博客内容&#x1f911;&#xff1a;&#x1f36d;嵌入式开发、Linux、C语言、C、数据结构、音视频&#x1f36d; ⏰发布时间⏰&#xff1a;2024-05-13 1…

《系统架构设计师教程(第2版)》第11章-未来信息综合技术-01-信息物理系统(CPS)技术概述

文章目录 1. 信息物理系统&#xff08;CPS&#xff09;1.1 来源1.2 定义1.3 本质 2. CPS的实现2.1 CPS 的体系架构2.1.1 单元级2.1.2 系统级2.1.3 SoS级 2.2 CPS 的技术体系2.2.1 感知和自动控制1&#xff09;智能感知技术2&#xff09;虚实融合控制技术 2.2.2 工业软件2.2.3 工…

常用的内外网文件传输方式及优缺点

在现代企业环境中&#xff0c;内外网文件传输是一项至关重要的任务。这涉及到数据的安全性、传输效率以及操作的便捷性等多个方面。 每种方式都有其独特的优缺点&#xff0c;下面我们将逐一进行分析。 1、FileLink 优势&#xff1a;FileLink是一款专用于企业内外网隔离后的文…

Cocos Creator 3.8.x 透明带滚动功能的容器

ScrollView 是一种带滚动功能的容器 1、删除ScrollView下Sprite组件的SpriteFrame 2、ScrollView下scrollBar的Sprite组件的Color设为&#xff1a;FFFFFF00 3、ScrollView下view的Graphics组件的FillColor设为&#xff1a;FFFFFF00

python下载及安装

1、python下载地址&#xff1a; Python Releases for Windows | Python.orgThe official home of the Python Programming Languagehttps://www.python.org/downloads/windows/ 2、python安装 &#xff08;1&#xff09; 直接点击下载后的可执行文件.exe &#xff08;2&…

高频电源模块TL22010-T2整流模块TL22010-T3用途

直流屏充电模块TL22010-T2电源模块TL22010-T3&#xff0c;整流模块TL11010-T3&#xff0c;其他TL系列型号有&#xff1a;TL11020-T3&#xff0c;TL11010-T2&#xff0c;TL11020-T2&#xff0c;TL22010-T&#xff0c;TL-22010-T&#xff0c;TL-11010-T&#xff0c;TL-22005-T&am…

Django5.0入门基本使用

文章目录 一、安装1、安装django环境2、创建项目3、启动服务器4、创建第一个应用&#xff08;1&#xff09;创建应用&#xff08;2&#xff09;编写视图&#xff08;3&#xff09;映射url&#xff08;4&#xff09;测试 二、核心概念1、django.urls 函数&#xff08;1&#xff…

本周日直播:基于动力学软件CarSim 2024的车辆性能及控制算法开发在线直播课

CarSim2024 为乘用车和轻型卡车的性能模拟提供了最准确、最详细、最高效的方法。经过汽车工程师二十年的实际验证,CarSim 已成为分析汽车动力学、开发主动控制器、计算汽车性能功能和设计下一代主动安全系统的首选工具。 直播版本:2024.0 CarSim 2024 的优势: 全球有 110 …

化学式的分子量计算——字符转数字

【题目描述】 给出一种物质的分子式&#xff08;不带括号&#xff09;&#xff0c;求分子量。本题中的分子式只包含4种原子&#xff0c;分别为C, H, O, N&#xff0c;原子量分别为12.01, 1.008, 16.00, 14.01&#xff08;单位&#xff1a;g/mol&#xff09;。例如&#xff0c;…

实验名称:TCP 连接管理

目录 前言 TCP报文段格式 TCP建立连接 TCP释放连接 实验目的 实验原理 实验步骤 1. 启动WireShark&#xff0c;设置抓包状态 2. 访问指定服务器 &#xff0c;通过Wireshark抓取通信数据报文 3. 分析TCP连接建立的三次握手和连接释放的四次握手过程 原始数据记录 实验…

ubuntu下使用docker安装es和kibana以及ik分词器还有logstash

友情提醒&#xff1a;es和kibana的版本最好一致 0.准备工作 mkdir -p /home/elasticsearch/data/ mkdir -p /home/elasticsearch/config/ mkdir -p /home/elasticsearch/plugins/ chmod -R 777 /home/elasticsearch 编写配置文件 echo http.host: 0.0.0.0 http.cors.ena…

上传到 PyPI

将软件包上传到 PyPI&#xff08;Python Package Index&#xff09;&#xff0c;您需要遵循以下步骤&#xff1a; 准备软件包&#xff1a;确保您的软件包满足以下要求&#xff1a; 包含一个 setup.py 文件&#xff0c;用于描述软件包的元数据和依赖项。包含软件包的源代码和必要…

【Mac】Adobe2022~2024软件安装前必读

前言 安装2022-2024 adobe 系列软件之前&#xff0c;一定要先安装好Adobe Creative Cloud&#xff08;ACC&#xff09;&#xff0c;没有这个软件安装启动都会报错&#xff01;因为从Adobe 2022版本开始重写了Creative Cloud模块&#xff0c;必须联网才能使用。 温馨提示 安装…

【408真题】2009-10

“接”是针对题目进行必要的分析&#xff0c;比较简略&#xff1b; “化”是对题目中所涉及到的知识点进行详细解释&#xff1b; “发”是对此题型的解题套路总结&#xff0c;并结合历年真题或者典型例题进行运用。 涉及到的知识全部来源于王道各科教材&#xff08;2025版&…

数字水印 | Python 基于离散小波变换 DWT 的图像水印嵌入(上)

&#x1f34d;原文&#xff1a; 基于 dwt (离散小波变换) 实现彩色图像水印嵌入部分_1.0 &#x1f34d;写在前面&#xff1a; 本文在原文的基础上进行了代码补全。 正文 本文的内容主要为&#xff1a;水印图像经过 A r n o l d \mathsf{Arnold} Arnold 置乱算法后&#xff0…

Django模型进阶

接上一节 4.查询数据 在Django中&#xff0c;正向查询&#xff08;Forward Query&#xff09;和反向查询&#xff08;Reverse Query&#xff09;是ORM&#xff08;Object-Relational Mapping&#xff0c;对象关系映射&#xff09;中用于处理数据库表间关系时的两种查询方式&a…

代码随想录 打卡day23,24,25

1 二叉搜索树的最小绝对差 注意审题&#xff0c;题目当值说到是一个二叉搜索树&#xff0c;因此我们只需进行中序遍历即可&#xff0c;然后得到一个有序数组之后进行编辑&#xff0c;统计出来最小差。 class solution{ private:vector<int> vec;void traversal(TreeNode…