Mysql8.0降级到5.7并迁移数据

以下文字转载自https://www.yuliu.tech/archives/520/

备份旧数据

将8.0版本中要保留的数据备份,直接用navicat或者dump导出都行

移除8.0

  1. 打开任务管理器,选择服务
  2. 找到MySql,右键停止
  3. 使用管理员运行cmd,然后执行sc delete mysql命令,删除服务

安装5.7

  1. 解压MySql5.7
  2. 在目录内创建data文件夹、my.ini文件
  3. 修改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
  1. 环境变量Path中删除8.0版本的,添加5.7版本
  2. 在MySql的bin目录中打开cmd
  3. 依次执行mysqld –initialize,mysqld –install,net start mysql
  4. 输入mysql -u root -p直接登录,不用输密码,然后输入use mysql;
  5. 输入update `user` set `authentication_string` = password(‘你的密码’),password_last_changed=now() where `user` = ‘root’;
  6. 修改my.ini,删除最后一行skip-grant-tables
  7. 在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文件导入了

分享到:
赞(0)