ITPub博客

首页 > 数据库 > MySQL > PG-Mysql迁移(采用powerdesigner)

PG-Mysql迁移(采用powerdesigner)

原创 MySQL 作者:wzgchen 时间:2015-11-13 11:02:07 0 删除 编辑
PG-Mysql对象迁移:
1.采用ODBC驱动来连接PG,正常可以看到sequence和database等,database、table,sequence要选中
2.创建一个物理模型:File->New Model->Physical Date Model
3.创建一个ODBC连接:驱动前面装过
4.反转物理模式:File->Reverse enginees->database
5.断开连接:Database-Disconnect
6.修改数据库模型:Database->Change current DBMS
7.生成SQL脚本:Database->Generate Database->user不要选中,prifix owner不要选中,保存脚本后,点x,不要确认


数据迁移:
PG导出SV格式表C
\copy gewaconfig to '/tmp/gewaconfig.sql' CSV HEADER;
\copy mgdb_size_agg to '/tmp/mgdb_size_agg.sql' CSV HEADER;
\copy mongo_data_dble to '/tmp/mongo_data_dble.sql' CSV HEADER;
\copy mongo_data to '/tmp/mongo_data.sql' CSV HEADER;
\copy monitor_item to '/tmp/monitor_item.sql' CSV HEADER;


Mysql导入CSV表:
LOAD DATA LOCAL INFILE '/root/mongo_data.sql'
 INTO TABLE mongo_data
 CHARACTER SET utf8
 FIELDS TERMINATED BY ',';

LOAD DATA LOCAL INFILE '/root/gewaconfig.sql'
 INTO TABLE gewaconfig
 CHARACTER SET utf8
 FIELDS TERMINATED BY ',' ENCLOSED BY '"';


增量同步要点:
1.将truncate 动作去掉。
2.找到增量的数据位置。
3.为了解决update修改数据,在业务停止后重新抽取最近30分钟的增量数据进来,以解决数据状态修改的记录未抽取。
4.删除最近30分钟的数据
5.去掉其中重复的数据
6.在PG->Mysql中,PG的null值到Mysql中会成空字符串'',PG中的空数字型值,到Mysql中变成0,PG中空的日期型值,到Mysql中会变成成0000-00-00,要注意。
tips:PG--MYSQL空字符串的处理:
在postgres中该字段是'',转到mysql后是null
PG:select * from api_info where nettype='';
MYSQL:select * from api_info where nettype is null;
先将非空约束去掉,抽数据进来,然后update t8 set name ='' where name is null;
在将非空约束加上


7.关于表数据存储时要区分大小写,则要指定数据库、表、列的校验编码:utf8_bin
8.关于存储智能手机类的特殊表情字符,则要用utf8mb4编码,该编码是utf8的超集
9.在使用mysql时TIMESTAMP类型,配置explicit_defaults_for_timestamp=true参数,则TIMESTAMP的行为如下:
  • TIMESTAMP如果没有显示声明NOT NULL,是允许NULL值的,可以直接设置改列为NULL,而没有默认填充行为。
  • TIMESTAMP不会默认分配DEFAULT CURRENT_TIMESTAMP 和 ON UPDATE CURRENT_TIMESTAMP属性。
在MySQL 5.6.6之前,TIMESTAMP的默认行为:
  • TIMESTAMP列如果没有明确声明NULL属性,默认为NOT NULL。(而其他数据类型,如果没有显示声明为NOT NULL,则允许NULL值。)设置TIMESTAMP的列值为NULL,会自动存储为当前timestamp。
  • 表中的第一个TIMESTAMP列,如果没有声明NULL属性、DEFAULT或者 ON UPDATE,会自动分配 DEFAULT CURRENT_TIMESTAMP和ON UPDATE CURRENT_TIMESTAMP 属性。
  • 表中第二个TIMESTAMP列,如果没有声明为NULL或者DEFAULT子句,默认自动分配’0000-00-00 00:00:00′。插入行时没有指明改列的值,该列默认分配’0000-00-00 00:00:00′,且没有警告。

如果没有配置explicit_defaults_for_timestamp=true
create table t2 (id int,m_update1 timestamp,m_update2 timestamp not null,m_update3 timestamp null);
desc t2;
| m_update1 | timestamp | NO   |     | CURRENT_TIMESTAMP   | on update CURRENT_TIMESTAMP |
| m_update2 | timestamp | NO   |     | 0000-00-00 00:00:00 |                             |
| m_update3 | timestamp | YES  |     | NULL                |                             |

如果字段是timestamp,且没有指定其它属性则为CURRENT_TIMESTAMP
如果指定为null,则就为null,该设为比较保险
如果指定为not null,则为 0000-00-00 00:00:00,非法数据

如果配置了explicit_defaults_for_timestamp=true,则m_update1 timestamp就为null,其它的不变。




来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/91975/viewspace-1836271/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2015-05-01

  • 博文量
    383
  • 访问量
    179290