技术分享 | MySQL8.0升级到8.4的详细流程(linux)
本文为墨天轮数据库管理服务团队第185期技术分享,内容原创,作者为技术顾问杨明翰,如需转载请联系小墨(VX:modb666)并注明来源。如需查看更多文章可关注【墨天轮】公众号。 升级前评估 备份策略: 停库与切换 停止服务:sudo systemctl stop mysqld(或mysql、mysql.service,视安装源) 确认端口释放:ss -lntp | grep :3306 无进程为宜 配置官方仓库(选择8.4 LTS轨道) RHEL/CentOS/Oracle Linux(DNF/YUM): Debian/Ubuntu(APT): 执行升级 启动与校验 基础健康检查: 兼容性调优 回滚预案 目标:找出引用的父表列未具备“完全匹配的唯一索引”的外键,并输出建议创建唯一键与重复值检查语句 检测与建议生成 使用说明: 目标:找出非整数类型的AUTO\_INCREMENT列并输出建议(转换为整数或移除该属性) 检测与建议生成 使用说明: 将上述检测查询加入升级前检查环节,并把生成的建议语句按业务重要性与低峰窗口分批执行。 在预生产环境先做一次完整演练:执行备份、停库、升级、DDL整改、回归测试、性能对比,最终形成可复用的变更流水线。 升级后关注数据目录中的mysql\_upgrade\_history记录,纳入配置与审计流程。 墨天轮从乐知乐享的数据库技术社区蓄势出发,全面升级,提供多类型数据库管理服务。墨天轮数据库管理服务旨在为用户构建信赖可托付的数据库环境,并为数据库厂商提供中立的生态支持。
1、Linux 升级清单
2、外键清理脚本草案(检测并生成建议)
-- 列出引用父表列未匹配任何唯一索引(主键/唯一键)的外键
WITH fk_cols AS (
SELECT
CONSTRAINT_SCHEMA, CONSTRAINT_NAME,
TABLE_SCHEMA, TABLE_NAME,
REFERENCED_TABLE_SCHEMA AS R_SCHEMA,
REFERENCED_TABLE_NAME AS R_TABLE,
REFERENCED_COLUMN_NAME AS R_COL,
ORDINAL_POSITION
FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE
WHERE REFERENCED_TABLE_SCHEMA ISNOT NULL
),
fk_groups AS (
SELECT
CONSTRAINT_SCHEMA, CONSTRAINT_NAME, R_SCHEMA, R_TABLE,
GROUP_CONCAT(CONCAT('`',R_COL,'`') ORDERBY ORDINAL_POSITION) AS R_COLS
FROM fk_cols
GROUPBY CONSTRAINT_SCHEMA, CONSTRAINT_NAME, R_SCHEMA, R_TABLE
),
uniq_idx AS (
SELECT
TABLE_SCHEMA, TABLE_NAME, INDEX_NAME,
GROUP_CONCAT(CONCAT('`',COLUMN_NAME,'`') ORDERBY SEQ_IN_INDEX) AS U_COLS
FROM INFORMATION_SCHEMA.STATISTICS
WHERE NON_UNIQUE =0
GROUPBY TABLE_SCHEMA, TABLE_NAME, INDEX_NAME
)
SELECT
fg.CONSTRAINT_SCHEMA, fg.CONSTRAINT_NAME, fg.R_SCHEMA, fg.R_TABLE, fg.R_COLS,
CONCAT(
'/* REVIEW */ ALTER TABLE `', fg.R_SCHEMA, '`.`', fg.R_TABLE,
'` ADD UNIQUE KEY `uk_for_', fg.CONSTRAINT_NAME, '` (', fg.R_COLS, ');'
) AS suggest_add_unique,
CONCAT(
'/* CHECK DUPLICATES */ SELECT ', REPLACE(fg.R_COLS,'`',''),
', COUNT(*) FROM `', fg.R_SCHEMA, '`.`', fg.R_TABLE,
'` GROUP BY ', REPLACE(fg.R_COLS,'`',''), ' HAVING COUNT(*)>1 LIMIT 10;'
) AS check_duplicates
FROM fk_groups fg
LEFTJOIN uniq_idx ui
ON ui.TABLE_SCHEMA = fg.R_SCHEMA AND ui.TABLE_NAME = fg.R_TABLE AND ui.U_COLS = fg.R_COLS
WHERE ui.INDEX_NAME ISNULL
ORDERBY fg.R_SCHEMA, fg.R_TABLE, fg.CONSTRAINT_NAME;3、AUTO\_INCREMENT 清理脚本草案(检测并生成建议)
-- 检测非整数类型的AUTO_INCREMENT列
SELECT
TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME, DATA_TYPE,
CONCAT(
'/* OPTION A: convert to BIGINT */ ALTER TABLE `', TABLE_SCHEMA, '`.`', TABLE_NAME,
'` MODIFY `', COLUMN_NAME, '` BIGINT NOT NULL AUTO_INCREMENT;'
) AS suggest_convert_to_bigint,
CONCAT(
'/* OPTION B: remove AUTO_INCREMENT */ ALTER TABLE `', TABLE_SCHEMA, '`.`', TABLE_NAME,
'` MODIFY `', COLUMN_NAME, '` ', UPPER(DATA_TYPE), ' NOT NULL;'
) AS suggest_remove_auto_increment
FROM INFORMATION_SCHEMA.COLUMNS
WHERE EXTRA LIKE'%auto_increment%'
AND DATA_TYPE NOTIN ('tinyint','smallint','mediumint','int','bigint')
ORDERBY TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME;4、额外建议

墨天轮数据库服务官网:https://www.modb.pro/service