当前位置:   article > 正文

MySQL8.0就地升级到MySQL8.4.0_mysql8.0和8.4

mysql8.0和8.4

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 。

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

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

此处列出了从 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.停止业务

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

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

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

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

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

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

场景3:记录数

  1. --查看所有数据库各容量大小
  2. select
  3. table_schema as '数据库',
  4. sum(table_rows) as '记录数',
  5. sum(truncate(data_length/1024/1024, 2)) as '数据容量(MB)',
  6. sum(truncate(index_length/1024/1024, 2)) as '索引容量(MB)'
  7. from information_schema.tables
  8. group by table_schema
  9. order by sum(data_length) desc, sum(index_length) desc;
  10. --查看所有数据库各表容量大小
  11. select
  12. table_schema as '数据库',
  13. table_name as '表名',
  14. table_rows as '记录数',
  15. truncate(data_length/1024/1024, 2) as '数据容量(MB)',
  16. truncate(index_length/1024/1024, 2) as '索引容量(MB)'
  17. from information_schema.tables
  18. order by data_length desc, index_length desc;
  19. --查看指定数据库容量大小(例:查看mysql库容量大小)
  20. select
  21. table_schema as '数据库',
  22. sum(table_rows) as '记录数',
  23. sum(truncate(data_length/1024/1024, 2)) as '数据容量(MB)',
  24. sum(truncate(index_length/1024/1024, 2)) as '索引容量(MB)'
  25. from information_schema.tables
  26. where table_schema='test'; 
  27. --查看指定数据库各表容量大小(例:查看mysql库各表容量大小)
  28. select
  29. table_schema as '数据库',
  30. table_name as '表名',
  31. table_rows as '记录数',
  32. truncate(data_length/1024/1024, 2) as '数据容量(MB)',
  33. truncate(index_length/1024/1024, 2) as '索引容量(MB)'
  34. from information_schema.tables
  35. where table_schema='test'
  36. order by data_length desc, index_length desc;
1.4.检查未提交的XA事务

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

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

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

  1. # 确保数据都刷到硬盘上,更改成0
  2. mysql -u root -p --execute="SET GLOBAL innodb_fast_shutdown=0"
  3. mysql> show variables like 'innodb_fast_shutdown';
  4. +----------------------+-------+
  5. | Variable_name | Value |
  6. +----------------------+-------+
  7. | innodb_fast_shutdown | 1 |
  8. +----------------------+-------+
  9. 1 row in set (0.00 sec)
  10. mysql> set global innodb_fast_shutdown=0;
  11. Query OK, 0 rows affected (0.00 sec)
  12. mysql> show variables like 'innodb_fast_shutdown';
  13. +----------------------+-------+
  14. | Variable_name | Value |
  15. +----------------------+-------+
  16. | innodb_fast_shutdown | 0 |
  17. +----------------------+-------+

补充说明:

  1. SET GLOBAL innodb_fast_shutdown = 1; -- fast shutdown
  2. 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.不能不具有本机分区支持存储引擎的分区表

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

  1. SELECT TABLE_SCHEMA, TABLE_NAME
  2. FROM INFORMATION_SCHEMA.TABLES
  3. WHERE ENGINE NOT IN ('innodb', 'ndbcluster')
  4. 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数据字典使用的表同名的表。要标识具有这些名称的表,请执行以下查询:

  1. SELECT TABLE_SCHEMA, TABLE_NAME
  2. FROM INFORMATION_SCHEMA.TABLES
  3. WHERE
  4. LOWER(TABLE_SCHEMA) = 'mysql'
  5. AND
  6. LOWER(TABLE_NAME) IN
  7. (
  8. 'catalogs',
  9. 'character_sets',
  10. 'check_constraints',
  11. 'collations',
  12. 'column_statistics',
  13. 'column_type_elements',
  14. 'columns',
  15. 'dd_properties',
  16. 'events',
  17. 'foreign_key_column_usage',
  18. 'foreign_keys',
  19. 'index_column_usage',
  20. 'index_partitions',
  21. 'index_stats',
  22. 'indexes',
  23. 'parameter_type_elements',
  24. 'parameters',
  25. 'resource_groups',
  26. 'routines',
  27. 'schemata',
  28. 'st_spatial_reference_systems',
  29. 'table_partition_values',
  30. 'table_partitions',
  31. 'table_stats',
  32. 'tables',
  33. 'tablespace_files',
  34. 'tablespaces',
  35. 'triggers',
  36. 'view_routine_usage',
  37. 'view_table_usage'
  38. );

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

1.6.1.5.外键约束名称检查

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

  1. SELECT TABLE_SCHEMA, TABLE_NAME
  2. FROM INFORMATION_SCHEMA.TABLES
  3. WHERE TABLE_NAME IN
  4. (SELECT LEFT(SUBSTR(ID,INSTR(ID,'/')+1),
  5. INSTR(SUBSTR(ID,INSTR(ID,'/')+1),'_ibfk_')-1)
  6. FROM INFORMATION_SCHEMA.INNODB_SYS_FOREIGN
  7. 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. --多个数据库备份成1个文件
  2. mysqldump -uroot -p --databases xiaomiaoao pijiake > /root/all-databases2213.sql
  3. --备份test数据库
  4. mysqldump -uroot -p test > /data/mysqldb/tmp/test_exp_$(date +%F).sql
7.2.目录备份

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

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

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

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

二.开始升级

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

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

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

升级过程中日志内容:

  1. [root@localhost opt]# tail -300f /mysqldb/log8/mysqld_error.log
  2. ......
  3. 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.
  4. 2024-05-08T16:35:02.695130+08:00 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started.
  5. 2024-05-08T16:35:03.457545+08:00 1 [System] [MY-013577] [InnoDB] InnoDB initialization has ended.
  6. 2024-05-08T16:35:03.477878+08:00 1 [System] [MY-011090] [Server] Data dictionary upgrading from version '80023' to '80300'.
  7. 2024-05-08T16:35:04.004278+08:00 1 [System] [MY-013413] [Server] Data dictionary upgrade from version '80023' to '80300' completed.
  8. 2024-05-08T16:35:05.563366+08:00 4 [System] [MY-013381] [Server] Server upgrade from '80035' to '80400' started.
  9. 2024-05-08T16:35:09.055973+08:00 4 [System] [MY-013381] [Server] Server upgrade from '80035' to '80400' completed.
  10. 2024-05-08T16:35:09.194856+08:00 0 [Warning] [MY-010068] [Server] CA certificate ca.pem is self signed.
  11. 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.
  12. 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.
  13. 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
  14. .......
2.3..更改环境变量

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

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

三.升级过程中所做内容

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

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

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

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

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

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

             (2).User schemas. 用户架构

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Guff_9hys/article/detail/741690
推荐阅读
相关标签
  

闽ICP备14008679号