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 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步