起因
All in boom的Nas服务器Docker装了MySQL的服务器,升级后发生开机启动失败问题。
分析后原因应该是磁盘挂载问题,导致MySQL的服务有时候读写失败导入G掉,与飞牛Nas升级系统和MySQL镜像可能都有关。
分析出原因后,没有解决方案,加上被MyAQL坑了几次,决定换数据库。
换数据度流程
中间试过很多方案,都总是失败,最后成功方案如下:
MySQL8.6.4 导出数据 > 修正SQL为兼容5.7 > MySQL5.7导入数据 > 创建pg数据库 > 编辑pgloader配置文件 > 导入数据到postgres > 修改pgsql的schem
MySQL8.6.4导出数据
由于pgloader在2022年就停止维护了,8.0以上的版本似乎不通直接导入pgsql,需先导出数据
注意:只导出个人数据库,系统数据度导出,在5.7版本导入会报错
mysqldump -u root -p --databases 数据库1 数据库2 > user_db.sql
SQL修正,兼容5.7
sed -i 's/utf8mb4_0900_ai_ci/utf8mb4_general_ci/g' user_db.sql
sed -i 's/utf8mb4/utf8/g' user_db.sql
MySQL5.7导入数据
先卸载8.6.4,再安装5.7(建议用docker安装,能两个同时存在)
进入5.7的终端
mysql -u root -p < user_db.sql
创建要导入的pg数据库
默认postgres数据库已安装,sql创建数据库
CREATE DATABASE 数据库名;
创建pgloader的文件
创建userdb.load
LOAD DATABASE
FROM mysql://用户:密码@127.0.0.1:3306/数据库名
INTO postgresql://用户:密码@172.17.0.1:8117/数据库名
WITH include drop, create tables, create indexes, reset sequences;
cast type varchar when (= precision 0) to text drop typemod,
type char when (= precision 0) to text drop typemod;
导入数据到pgsql
pgloader userdb.load
修改导schema为public
ALTER SCHEMA public RENAME TO null;
ALTER SCHEMA mysql中的数据库名 RENAME TO public;
最后
有几个数据库,就从load文件之前创建数据库开始几遍,分别导入
导入成功后,修改相关软件的dburl或数据库即可
postgresql://用户:密码@主机地址:端口/数据库名?currentSchema=public
评论区