MySQL 5.7迁移升级8.0版本

MySQL版本升级问题

由于OpenSSL等一些安全漏洞的原因,需要升级MySQL版本。
原本MySQL 5.7.30是使用安装包安装的,计划使用安装包升级补丁5.7.33,升级过程中2个步骤遇到认证问题:
第一个是在备份数据库的时候,安装包明知是升级,却不用配置的密码执行mysqldump,日志:

Backup files will be dumped to "C:\ProgramData\MySQL\MySQL Server 5.7\Backup\mysql_dump-2021-02-24T16.49.36.sql".

Starting process with command: C:\Program Files\MySQL\MySQL Server 5.7\bin\mysqldump.exe --user=root --host=localhost --port=3306 --default-character-set=utf8 --routines --events --single-transaction=TRUE --all-databases --result-file="C:\ProgramData\MySQL\MySQL Server 5.7\Backup\mysql_dump-2021-02-24T16.49.36.sql"...
mysqldump: Got error: 1045: Access denied for user 'root'@'localhost' (using password: NO) when trying to connect
Process for mysqldump, with ID 7640, was run successfully and exited with code 2.
Ended configuration step: Backing up MySQL database

只好在配置文件中加入

skip-grant-tables=1

但是到执行安全配置时再次因为认证问题失败。

MySQL Installer直接升级失败

日志:

Beginning configuration step: Applying security settings

Attempting to update security settings.
Unable to update security settings. Authentication to host 'localhost' for user 'root' using method 'mysql_native_password' failed with message: Access denied for user 'root'@'localhost' (using password: NO)
Ended configuration step: Applying security settings

删除所有ProgramData下的配置仍然失败,遂放弃5.7.30→5.7.33的升级安装,索性升级最新的8.0.22(zip版)。

备份数据库

使用旧版本运行mysqldump.exe,字符集指定utf8mb4,如果只写utf8,可能产生utf8mb3和utf8mb4的混淆。以下以gitea数据库为例:

mysqldump.exe --user=root -p --host=localhost --port=3306 --default-character-set=utf8mb4 --routines --events --single-transaction=TRUE --databases gitea --result-file="D:\backup\mysql_dump-gitea.sql"

还原数据库

对新版本mysql进行初始化、新建服务等操作,停止旧版本服务,然后执行gitea数据库的还原:

mysqld --initialize --console
mysql -u root -p < D:\backup\mysql_dump-gitea.sql

执行的时间视数据量大小。

总结

通过mysqldump导出数据库的方式可以比较简单的完成MySQL 5.7到8.0版本的升级工作。本质上就是新版本安装配置+数据迁移。
注:这里都是INNODB的数据库类型,不涉及与MyISAM的转换。数据无价,谨慎操作!

你可能感兴趣的:(MySQL 5.7迁移升级8.0版本)