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 Name | New Default Value (MySQL 8.4) | Previous Default Value (MySQL 8.0) |
innodb_buffer_pool_in_core_file | OFF if MADV_DONTDUMP is supported, otherwise ON | ON |
innodb_buffer_pool_instances | If innodb_buffer_pool_size <= 1 GiB, then 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:
| 8 (or 1 if 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” . | 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_flush_method on Linux innodb_flush_method 在Linux上 | O_DIRECT if supported, otherwise 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 |
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 | 4 |
innodb_purge_threads | 1 if available logical processors is <= 16, otherwise 4 | 4 |
innodb_read_io_threads | available logical processors / 2, with a minimum default value of 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 | 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 | 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. 用户架构