mysql - 使用 pgloader 从 Mysql 8 迁移到 postgres 失败
问题描述
我正在尝试从 MySQL 迁移到 PostgreSQL 数据库。
有什么方法可以在不修改my.cnf
文件的情况下从 MySQL 迁移到 PostgreSQL?
pgloader mysql://root:root_password@127.0.0.1/mysql_database postgresql://postgres_user:postgres_pass@127.0.0.1/postgres_database
我尝试创建这个:
create user 'pgloader'@'localhost' identified with mysql_native_password by 'pass'
但是当我尝试迁移时,我总是得到这个错误:
Failed to connect to mysql at "localhost" (port 3306) as user "pgloader": Condition QMYND:MYSQL-UNSUPPORTED-AUTHENTICATION was signalled.
解决方案
截至 2021 年 4 月,pgloader 不支持 MySQL v8 中较新的 SHA2 身份验证模式。(升级是相当多的工作。)
在过去的一年里,我遇到了 3 次这个问题。
第一种方法
对于第一个客户端,我可以根据此处的评论将 MySQL 降级到 v5.6。
第二种方法
对于具有小型数据库的第二个客户端,我一起破解了一些 shell 脚本。
- SSH 抓取
mysqldump
(绝对需要使用选项。) - 将 SQL 语法重新格式化为 postgres。
- 然后针对 postgres 目标执行。
第三种方法
我的第三个客户有更多的数据,数百个表中有 4-5TB。
这次我找到了 NMIG,一个基于 Node 的可配置数据迁移工具。经过一些调整和配置,它似乎工作得很好。
我将来肯定会接触到 NMIG。