tgresql的数据库怎么迁移到mysql-CSDN

checkpoint_timeout = 1h

MySQL数据库迁移到PostgreSQL

mysql数据库迁移_mysql数据库迁移费用mysql数据库迁移_mysql数据库迁移费用


mysql数据库迁移_mysql数据库迁移费用


查了不少资料,也尝试了一些,采用的办法如下:

1. 导出mysql表定义(无数据)

mysqldump --no-data [dbname] >dbdef.sql

2. 使用mysql2tgres把脚本转换为pgsql

4. 导出mysql数据:

mysqldump -v -nt --complete-insert=TRUE --compact --no-create- --skip-quote-names [dbname] >dbdata.sql

老一些版本的pgsql如果不支持批量插入的话还需要加上--extended-insert=FALSE,这个性能损失巨大。

5. 转义符

mysql默认字符串里的''是转义符,而pgsql默认不是,修改tgresql.conf:

backslash_quote = on

escape_string_warning = off

数据导入完成后可以改回默认值。

5. pgsql里导入表定义和数据

psql -d [dbname]

psql -d [dbname]

7. 自增主键(字段)的处这是我以前写的一个简单的查找xml值的一个方法,使用该方法可以比较方便的获得xml的值,相比xml模块来说比较轻巧defgetValue(xmlcontent,type):start=''end=''ifxmlcontent.find(start)==-1orxmlcontent.find(end)==-1:return""else:sid=xmlcontent.find(start)+len(type)+2eid=xmlcontent.find(end)returnxmlcontent[sid:eid]例如:a='''Jim12'''name=getValue(a,'name')age=getValue(a,'age')在这获得了数据之后再写到数据库不过是一条简单的INSERT语句罢了理

由于导入数据时此字段都是有值的,所以pgsql里面seq并不会增加,可以用如下语句设置自增列的当前值:

SELECT setval('sample_id_seq',max(id)) from sample;

,如果数据量大,导入时考虑性能可以先把主键、索引、约束都去掉,导入完成后再加上。另外,psql客户端从管道导入数据似乎不够快,可以用tcp方式psql -h localhost ,还有一些为大数据量导入优化的参数,大概列一下:

autovacuum = off

wal_ll = minimal

archive_mode = off

full_page_writes = off

checkpoint_segments = 50

maintenance_work_mem视内存情况尽量大点

用python将几个mysql数据库的数据同步到一个mysql里面

fsync =standard_conforming_strings = off off

MySQL安装目录下的data文件夹的数据库能够到另一台电脑的MYSQL安装目录下的data文件夹里并读取?

6. 重建trigger

二边的版本和安装配置环境都一样的话,是可以的,前,二边的MYSQL都要Stop。 注意,必须把data中的所有文件全部过去

3. 上面生成的脚本还不一定很完美,可以尝试导入pgsql,调试错误并手动修改之。我遇到的问题就只有一个,mysql列定义中的zerofill需要手工去掉。一些unsinged定义会生成constraint,如果不需要可以去掉。另外,trigger都有问题,只能后面手工重建

要通过MySQL导出数据库,然后把导出的数据库到另台机器上;

在另台机器上启动MySQL,然后选择导入的数据库

一般没事,大胆,测试一下没问题就可以,一部分也行。

只要测试一下没问题就可以,能读取,不乱码,能写入,就可以了。