MySql到PostgreSql的迁移
我的PostgreSQL安装在Windows上。如何将数据从MySQL数据库迁移到PostgreSQL? 我读过很多书。没有任何帮助:( 谢谢 我的行动:MySql到PostgreSql的迁移,mysql,postgresql,migration,dump,Mysql,Postgresql,Migration,Dump,我的PostgreSQL安装在Windows上。如何将数据从MySQL数据库迁移到PostgreSQL? 我读过很多书。没有任何帮助:( 谢谢 我的行动: mysql转储: mysqldump -h 192.168.0.222 --port 3307 -u root -p --compatible=postgresql synchronizer > c:\dump.sql 在pgsql上创建数据库同步器 导入转储: psql -h 192.168.0.100 -d synchroniz
mysqldump -h 192.168.0.222 --port 3307 -u root -p --compatible=postgresql synchronizer > c:\dump.sql
psql -h 192.168.0.100 -d synchronizer -U postgres -f C:\dump.sql
psql:C:/dump.sql:17: NOTICE: table "Db_audit" does not exist, skipping
DROP TABLE
psql:C:/dump.sql:30: ERROR: syntax error at or near "("
СТРОКА 2: "id" int(11) NOT NULL,
^
psql:C:/dump.sql:37: ERROR: syntax error at or near ""Db_audit""
СТРОКА 1:LOCK TABLES "Db_audit" WRITE;
^
psql:C:/dump.sql:39: ERROR: relation "Db_audit" does not exist
СТРОКА 1:INSERT INTO "Db_audit" VALUES (4068,4036,4,1,32,'2010-02-04 ...
^
psql:C:/dump.sql:40: ERROR: relation "Db_audit" does not exist
СТРОКА 1:INSERT INTO "Db_audit" VALUES (19730,2673,2,2,44,'2010-11-23...
^
psql:C:/dump.sql:42: ERROR: syntax error at or near "UNLOCK"
СТРОКА 1:UNLOCK TABLES;
^
psql:C:/dump.sql:48: NOTICE: table "ZHNVLS" does not exist, skipping
DROP TABLE
psql:C:/dump.sql:68: ERROR: syntax error at or near "("
СТРОКА 2: "id" int(10) unsigned NOT NULL,
^
psql:C:/dump.sql:75: ERROR: syntax error at or near ""ZHNVLS""
СТРОКА 1:LOCK TABLES "ZHNVLS" WRITE;
^
psql:C:/dump.sql:77: WARNING: nonstandard use of escape in a string literal
СТРОКА 1:...???????? ??? ???????','10','4607064820115','0','','??????-??...
^
ПОДСКАЗКА: Use the escape string syntax for escapes, e.g., E'\r\n'.
Cancel request sent
psql:C:/dump.sql:77: WARNING: nonstandard use of escape in a string literal
СТРОКА 1:...??????????? ????????','10','4602784001189','0','','???????? ...
我在MySQL->Postgresql迁移方面的经历不是很愉快,所以我不得不接受Daniel关于CSV文件的建议 在我的例子中,我手动重新创建了模式,然后使用mysqldump和pg_restore一个接一个地导入所有表 因此,虽然这个转储/恢复可能对数据有效,但您很可能对模式不太走运。我还没有尝试过任何商业解决方案,所以看看其他人怎么说,祝您好运 更新:我查看了流程遗留下来的代码,下面是我实际操作的方式 在我的PostgreSQL数据库中有一个稍微不同的模式,所以一些表被连接,一些被拆分。这就是为什么不选择直接导入的原因,我的案例可能比您描述的更复杂,这个解决方案可能有些过分 对于PG数据库中的每个表,我编写了一个查询,从MySQL数据库中选择相关数据。如果两个数据库中的表基本相同,并且没有连接,那么就可以这么简单
select * from mysql_table_name
然后,我将该查询的结果导出到XML,为此,您需要像这样运行它:
echo "select * from mysql_table_name" | mysql [CONNECTION PARAMETERS] -X --default-character-set=utf8 > mysql_table_name.xml
psql [CONNECTION PARAMETERS] -f FILENAME -1
这将创建具有以下结构的简单XML文件:
<resultset statement="select * from mysql_table_name">
<row>
<field name="some_field">field_value</field>
...
</row>
...
</resultset>
XML->SQL转换中唯一的技巧是识别数字,并将其取消引号
总而言之:mysql可以生成XML形式的查询结果,您也可以使用它。比这要复杂一些。这里有大量文档: 在这里,您还可以找到转换脚本。在我相当简单的例子(30个表,10000条记录)中,我使用了一个perl脚本: 它通过mysql转储文件,生成了一个pg转储文件,有以下问题 我正在导入Heroku,所以我使用了他们的pgbackups插件,它几乎完美无瑕 关注的问题
我使用py-mysql2pgsql将一个大型MySQL数据库转换为Postgres。它可以很好地处理大多数情况。不过,我不得不根据自己的需要对其进行修补 默认情况下,它从MySQL读取数据并写入Postgres。但您可以要求它在加载到Postgres之前将架构和/或数据写入文件以进行检查。您可以使用 这是在PHP convertor上编写的还有一个非常好的python转换器,由gitlab创建者维护:
这个项目的原始fork已经过时了。对我来说,使用这个脚本一切都运行得很好。最好使用一些自动化迁移过程的程序。 即使您熟悉所有的gotchas,手动完成每一步也可能需要很多时间,尤其是当您的db“很大”时 试试看 此工具功能强大,易于使用。 它映射数据类型,迁移约束、索引、PK和FK,与MySQL数据库中的完全相同。
在后台,它使用PostgreSQL COPY,因此数据传输非常快。这里有一个项目,它通过几个命令将当前MySQL数据库迁移到PostgreSQL,包括索引和外键。它还允许定义名称、索引和列类型分区,以便覆盖默认行为
我希望它对任何有兴趣将当前项目迁移到PG的人都有用,在我们的例子中,我们获得了大约20%的性能提升。您能将mysql中的数据备份到csv或类似的sql文件吗?如果可以,您应该能够创建数据库,然后使用pgadminmak恢复脚本symko,我已经重新创建了shema。请您描述一下如何使用mysqldump和pg_restore一步一步地从表中复制数据。我尝试了这个方法,但出现了错误“FromMySqlToPostgreSql”-数据库迁移工具版权所有2015 Anatoly Khaytovich--迁移开始…--脚本终止。说明原因:--FromMySqlToPostgreSql::createSchema--无法创建新架构…--PDO异常代码:0--文件:/Users/admin/Downloads/FromMySqlToPostgreSql master/migration/FromMySqlToPostgreSql/FromMySqlToPostgreSql.php--第300行--消息:找不到驱动程序-------------------------------------------看起来您没有PDO驱动程序…安装它:MySQL:sudo apt get Install php5 MySQL或对于PostgreSQL:sudo apt get Install php5 pgsql