最近将mysql8.0版本降级到5.7版本,记录一下过程
备份旧数据
将8.0版本中要保留的数据备份,直接用navicat或者dump导出都行
移除8.0
- 打开任务管理器,选择服务
- 找到MySql,右键停止
- 使用管理员运行cmd,然后执行
sc delete mysql
命令,删除服务
安装5.7
- 解压MySql5.7
- 在目录内创建data文件夹、my.ini文件
- 修改my.ini为以下内容,安装目录和数据目录修改为自己电脑对应路径
[mysql]
# mysql客户端默认字符集
default-character-set=utf8
[mysqld]
# 端口
port=3306
# mysql的安装目录
basedir=D:\Applications\mysql-5.7.34-winx64
# mysql的数据存放目录
datadir=D:\Applications\mysql-5.7.34-winx64\data
# 允许最大连接数
max_connections=200
# 服务端使用的默认字符集
character-set-server=utf8
# 创建新表时的默认存储引擎
default-storage-engine=INNODB
# 跳过表验证
skip-grant-tables=1
- 环境变量Path中删除8.0版本的,添加5.7版本
- 在MySql的bin目录中打开cmd
- 依次执行
mysqld --initialize
,mysqld --install
,net start mysql
- 输入
mysql -u root -p
直接登录,不用输密码,然后输入use mysql;
- 输入
update `user` set `authentication_string` = password('你的密码'),password_last_changed=now() where `user` = 'root';
- 修改my.ini,删除最后一行
skip-grant-tables
- 在cmd中依次输入
net stop mysql
,net start mysql
重启服务
这个时候就可以用你设置的密码登录了,如果使用status;
命令查看详情时,报如下错误:
ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.
这是因为mysql自身的安全机制,可以不用在意,直接修改密码即可
alter user 'root'@'localhost' identified by '你的密码';
迁移数据
MySql8.0在字符集上发生了改动,因此我们修改从8.0导出的sql文件的字符集即可,这里我直接用记事本的替换功能,用记事本打开之后,依次点击编辑->替换
- utf8mb4_0900_ai_ci替换为utf8_general_ci
- utf8_croatian_ci替换为utf8_general_ci
- utf8mb4_general_ci替换为utf8_general_ci
- utf8mb4替换为utf8
导入过程中可能会报错Error Code: 1153 - Got a packet bigger than 'max_allowed_packet' bytes
这是因为mysql默认的导入文件大小限制导致的
使用命令 SHOW VARIABLES LIKE '%max_allowed_packet%';
,即可查看
默认为4194304,即4194304/1024/1024=4M,当备份文件超过4M的时候就会报错
打开my.ini,搜索max_allowed_packet
,没有就自行添加一行,将其值改为超过备份文件的值
然后net stop mysql
,net start mysql
重启服务即可
替换完成之后即可直接通过sql文件导入了