MySQL 8.0 数据复制到 5.7

场景

公司后端机子给前端连接协同开发,但是又不太方便,正好我手上公司的电脑没有用,就准备拿来当专门的后端接口开发服务器

然后就开始在本子上新搭一个环境,并迁移 代码 和 数据库

问题

MySQL 8.0 迁移数据库到 5.7 时,尝试了导出SQL、NavCat备份,都出现了错误,导致结束后很多表没有(恢复失败)
查看错误信息提示:编码错误/表不存在

解决

网上查阅资料后认为是
因为高版本向低版本 导入/导出 数据库,存在版本兼容问题
具体来说就是:

字符集由utf8mb4替换为utf8
排序规则由utf8mb4_0900_ai_ci替换为utf8_general_c

尝试对 SQL 文件做字符替换,当然实现方式非常多,可以用编辑器轻松实现
我这里是直接使用Linux下的sed命令,用Windows自带的 WSL

其实也没有咋用过,然后就遇到了:
想要把 sql 文件,从Windows文件系统复制到 WSL 的文件系统中,第一反应想当然地就在文件管理器直接复制一份到 WSL 磁盘

感觉挺合理,但事实是被告知“权限不足”
也不知道怎么才能足,网上查资料好像是不能这么干的(至少是不推荐)
正确的做法是通过 WSL 的盘符访问Windows文件系统中的文件

# 复制wondows盘符下的文件到WSL文件系统
cp /mnt/c/源路径/源文件 /目标路径/目标文件

然后再执行操作

sed -i "s/utf8mb4_0900_ai_ci/utf8_general_ci/g" /data/backup/app.sql
sed -i "s/utf8mb4/utf8/g" /data/backup/app.sql

最后在 CMD 用source命令执行 SQL,导入数据库

2023/9/30

面试提到这里被问到 MySQL 8.0 和 5.7 有什么区别?具体体现在 SQL 语句上有什么区别?

啊?!我从学的时候用的就是 8.0,就只是做了个迁移,我又没用过我怎么知道有什么区别

本文作者:YaosGHC

本文链接:https://www.cnblogs.com/yaocy/p/17089504.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   YaosGHC  阅读(842)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
💬
评论
📌
收藏
💗
关注
👍
推荐
🚀
回顶
收起