场景
公司后端机子给前端连接协同开发,但是又不太方便,正好我手上公司的电脑没有用,就准备拿来当专门的后端接口开发服务器
然后就开始在本子上新搭一个环境,并迁移 代码 和 数据库
问题
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,导入数据库