翼度科技»论坛 编程开发 mysql 查看内容

MySQL8.0就地升级到MySQL8.4.0的方法

5

主题

5

帖子

15

积分

新手上路

Rank: 1

积分
15
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升级。升级过程分为以下几步:

  • 完成升级前检查,并处理不合规问题。
  • 如果使用了XA事务,升级前通过命令xa recover未提交XA事务,并使用xa commit或xa rollback命令提交或回滚。
  • 将innodb_fast_shutdown改为0或1。
  • 关闭现版本MySQL。
  • 升级MySQL二进制文件或软件包。
  • 在现有数据目录上启动新版本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 NameInnoDB系统变量名
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:TAGUUID:TAG:NUMBER 需要一个新的 TRANSACTION_GTID_TAG 权限,该权限是在此版本中添加的;在原始服务器上以及副本应用程序线程的 PRIVILEGE_CHECKS_APPLIER 上都是如此。这也意味着管理员现在可以将 SET @gtid_next=AUTOMATIC:TAGUUID: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.升级前的初步检查
  1. 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 ,请执行以下语句:
  1. ALTER TABLE table_name ENGINE = INNODB;
复制代码
要使已分区表成为非分区表,请执行以下语句:
  1. 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字符的架构和表名:
  1. 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 )。

1.7.备份数据库

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

1.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
复制代码
1.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`
复制代码
1.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
复制代码
1.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命令行 正确关闭数据库法1:mysqladmin -uroot -p shutdown[root@mysql]# mysql -uroot -pEnter 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:   0Warnings: 17Notices:  0#检查没有未提交的xa事务
  2. mysql> xa recover;
  3. Empty set (0.00 sec)# 确保数据都刷到硬盘上,更改成0mysql> 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 mysqlroot       6330   6202  0 07:35 pts/0    00:00:00 mysql -uroot -p -P2213 testroot       6466   6202  0 09:18 pts/0    00:00:00 mysql -uroot -proot       6522   6293  0 09:58 pts/1    00:00:00 mysql -uroot -proot       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。
  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. 用户架构
到此这篇关于MySQL8.0就地升级到MySQL8.4.0的方法的文章就介绍到这了,更多相关MySQL8.0升级到8.4.0内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

来源:https://www.jb51.net/database/3221890kn.htm
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

举报 回复 使用道具