以下文字转载自https://www.yuliu.tech/archives/520/
备份旧数据
将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文件导入了
评论抢沙发