龙空技术网

MySQL5.7升级至MySQL8.0

酒蒸蛤蜊 146

前言:

此刻姐妹们对“mysql57升级到80”大体比较关切,各位老铁们都需要剖析一些“mysql57升级到80”的相关资讯。那么小编也在网上收集了一些有关“mysql57升级到80””的相关文章,希望你们能喜欢,咱们快快来了解一下吧!

5.7 -> 8.0

checkForServerUpgrade (mysql shell 8.0工具)用法:

[root@node1 mysql]# yum -y isntall mysql-shell-8.0.19-1.el7.x86_64.rpm

mysql@node1:/home/db/mysql$ mysqlsh -- util check-for-server-upgrade { --user=root --host=localhost --port=13306 } --target-version=8.0.11 --output-format=JSON --config-path=/etc/my.cnf

工具很详细地说明了,升级之前要修改的错误,以及版本升级后默认参数更改的注意事项

一、5.7更新前检查:

1、 table和trigger检查

InnoDB tables tuse nonnative partitioning, or triggers that have a missing or empty definer or an invalid creation context (indicated by the character_set_client, collation_connection, Database Collation attributes displayed by SHOW TRIGGERS or the INFORMATION_SCHEMA TRIGGERS table)

mysqlcheck -u root -p --all-databases --check-upgrade

2、 没有不支持引擎的分区表

SELECT TABLE_SCHEMA

, TABLE_NAME

FROM INFORMATION_SCHEMA.TABLES

WHERE ENGINE NOT IN ('innodb', 'ndbcluster')

AND CREATE_OPTIONS LIKE '%partitioned%';

办法:

ALTER TABLE table_name ENGINE = INNODB;

ALTER TABLE table_name REMOVE PARTITIONING;

3、 在5.7的mysql系统表空间中没有表与8.0数字典同名的

SELECT TABLE_SCHEMA

, TABLE_NAME

FROM INFORMATION_SCHEMA.TABLES

WHERE LOWER(TABLE_SCHEMA) = 'mysql'

and LOWER(TABLE_NAME) IN

(

'catalogs',

'character_sets',

'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'

);

显示出来有同名,必须改名字

e.g

RENAME TABLE t3 to tt3 ;

4、 没有外键约束名字超过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个字符更改

5、 没有table或procedure在enum 或 set 字段长度超过255个字符或1020字节

6、 5.7中没有安装在8.0中不支持的特征

6.1 表的存储引擎在8.0中是不支持

6.2 数据开启的选项和系统参数在8.0中是被移除的

二、in-place更新

1、提交或回滚XA事务

2、加密表空间

ALTER INSTANCE ROTATE INNODB MASTER KEY;

3、设置innodb_fast_shutdown

SET GLOBAL innodb_fast_shutdown = 1; -- fast shutdown

SET GLOBAL innodb_fast_shutdown = 0; -- slow shutdown

4、关库

mysqladmin -u root -p shutdown

5、解压MySQL8.0二进制安装,并替换旧

6、开启mysql8.0,用现在的数据目录

mysqld_safe --user=mysql --datadir=/path/to/existing-datadir

如果有加密表空间,带参数--early-plugin-load指定加密插件

注意:MySQL8.0.20 mysqld_safe已被取消,直接启库就可以更新,下后操作可以不做。之前的版本继续以下操作

开启时,自动清理工作:

6.1 在—datadir目录,创建一个目录backup_metadata_57,迁移.frm, .par, .TRG, .TRN, or .isl 到backup_metadata_57

backup_metadata_57 保留旧文件系统的结构

6.2 在mysql数据库里,重命名event和proc 表 为event_backup_57 和proc_backup_57

如果这步失败,服务会恢复对--datadir的所有更改。这种情况,你应该删除所有redo log ,用相同的—datadir 开启数据库,并修改问题。用slow shutdown关闭 mysql5.7并再次开启msyql8.0 服务

7、 如果8.0开启成功,执行mysql_upgrade

mysql_upgrade -u root –p

mysql_upgrade:

7.1会检查所有与当前版本不兼容的数据库里的表,

7.2执行5.7升到8.0之间需求的修改,

7.3 更新Performance Schema, INFORMATION_SCHEMA 和 sys schema objects到8.0

Mysql_upgrade 不更新help table中内容

8、 重启数据库,确保所有的更改生效

mysqladmin -u root -p shutdown

mysqld_safe --user=mysql --datadir=/path/to/existing-datadir

标签: #mysql57升级到80 #mysql 57 升级 80