mysql2pgsql
从 MySQL 迁移到 PostgreSQL 涉及多个步骤,包括数据导出、数据转换、数据导入和应用程序代码更新。以下是一个详细的指南来帮助你完成这一迁移:
- 准备工作
- 备份数据库: 在迁移前,确保你有一个最新的 MySQL 数据库备份
- 安装工具: 确保你已经安装了
pgloader,这是一个常用的工具来从 MySQL 迁移到 PostgreSQL。你可以使用 brew 安装:
brew install pgloader
1
- 导出 MySQL 数据
你可以使用 mysqldump 来导出 MySQL 数据库:
mysqldump -u username -p database_name > database_name.sql
1
# pgloader 迁移
- 使用 pgloader 进行迁移
pgloader 可以直接从 MySQL 迁移到 PostgreSQL,而无需手动转换 SQL 文件。以下是一个示例命令:
pgloader mysql://username:password@localhost/mysql_db_name postgresql://username:password@localhost/pg_db_name
1
如果你使用的是 8.0+ 版本,你可能会遇到 UNSUPPORTED-AUTHENTICATION 的问题,如下,自行查阅 stackflow 解决
pgloader - Failed to connect to mysql at "localhost" (port 3306) as user "root": Condition QMYND:MYSQL-UNSUPPORTED-AUTHENTICATION was signalled. stackoverflow (opens new window)
- 手动数据转换(如有必要)
如果有特定的复杂数据转换需求,可能需要手动调整 SQL 文件。例如,某些数据类型在 MySQL 和 PostgreSQL 之间有差异,需要转换
- 创建 PostgreSQL 数据库
在 PostgreSQL 中创建目标数据库:
createdb -U postgres pg_db_name
1
- 导入数据
如果你已经使用 pgloader 迁移数据,这一步可以跳过。否则,你可以使用 psql 导入数据:
psql -U username -d pg_db_name -f database_name.sql
1
- 转换应用程序代码
更新你的应用程序代码,以使用 PostgreSQL 驱动和查询语法。你可能需要修改以下内容:
- 数据库连接字符串: 将 MySQL 的连接字符串替换为 PostgreSQL 的连接字符串
- SQL 查询:MySQL 和 PostgreSQL 在某些 SQL 语法上有所不同,需要调整。例如:
AUTO_INCREMENT转换为SERIAL或BIGSERIALNOW()转换为CURRENT_TIMESTAMPLIMIT和OFFSET语法可能需要调整ENUM类型可能需要转换为CHECK约束
- 测试
全面测试你的应用程序,确保所有功能在 PostgreSQL 上正常运行
# 使用 py-mysql2pgsql 迁移
todo
# link
上次更新: 2024/12/01, 17:09:08