迁移 MySQL8.1+ 到 PostgreSQL17

省流就是别用 pgloader , 它已经不支持新版 mysql 和 postgresql 了

安装 NMIG

NMIG 是一个用 node 写的 mysql 到 postgresql 的迁移工具, 截至目前支持 mysql 8.4 到 postgresql 17 的迁移

node: >= 18

bash
git clone https://github.com/AnatolyUss/nmig
cd nmig
npm install
npm run build

配置 NMIG

config 目录下的几个 json 配置文件都要看一下, config.json 是基本配置, 定义了源数据库和目标数据库的连接信息.

json
{
  "source": {
    "host": "127.0.0.1",
    "port": 3306,
    "database": "sample_stuff",
    "charset": "utf8mb4",
    "supportBigNumbers": true,
    "user": "root",
    "password": "0123456789"
  },
  "target": {
    "host": "127.0.0.1",
    "port": 5432,
    "database": "sample_stuff",
    "charset": "UTF8",
    "user": "postgres",
    "password": "0123456789"
  },
}

data_types_map.json 定义迁移时数据类型的映射关系, 默认配置可能不适合你的业务情况.

比如它默认把 mysql 的 bool 类型 (tinyint(1)) 转换为 postgresql 的 smallint , 你可能希望它转换为 boolean

json
{
  "tinyint": {
    "increased_size": "int",
    "type": "boolean",
    "mySqlVarLenPgSqlFixedLen": true
  },
}

迁移数据

执行迁移命令, 测试 100w 左右数据花了几十秒, 不算很慢, 如果卡住可以切断重试

bash
npm start

Q.E.D.
Nginx 迷思之请求缓冲与 Go 的分块传输编码