异构数据库数据同步(从Progress到MySQL)
一直想写点东西,但却迟迟没有开始,今天无意中回到ERP100这个网站,发现有了QAD的专区,于是,一时热血沸腾,写了点东西,就借此机会将内容也发到这里吧,呵呵。
其实内容都是本人写的,不过为了图方便,在ERP100中写完了,然后直接Copy到这里,偷了点懒,呵呵。
以下是正文,在ERP100中的地址是
http://bbs.erp100.com/forum.php?mod=viewthread&tid=74269&page=1&extra=#pid438182
由于小弟接触QAD也只有短短几年时间,目前也只是刚刚入门的菜鸟级别,希望借此机会与熟悉QAD软件的前辈一起交流,呵呵。
项目名称:
异构数据库数据同步(从Progress到MySQL)
背景介绍:
我现在公司使用的QAD版本很老,是85g的,于是,要升级到eb2.1,但由于有很多水晶报表是直接连到QAD后台取数的,而eb2.1对连接数限制在1个,因此,公司决定将QAD的数据同步导入到MySQL数据库中,这样,只要将水晶报表的连接重新指向MySQL,就可以正常使用了。
实现思路:
要实现实时同步,最直接的就是触发器了,通过在触发器中分析各字段的值,生成SQL语句,并存入文本文件中,然后,定期调用一段Java程序,读取文本中的SQL语句,将数据插入MySQL数据库中。
注:当时在项目分析阶段,实际还有1套方案,也是通过触发器记录被修改的数据,然后写入一个自定义表的Raw字段,然后,定时执行一段Progress程序,将修改写入到MySQL中,但由于这个方案需要多占用一个Licence,因此,最终被放弃。
实现方法:
1. 设置Trigger
进入Data Dictionary(数据字典),点 Edit -> Modify Table,在弹出的窗口中输入要建Trigger的表名,例如 pt_mstr,然后,在之后的窗口中,在最下面的按钮中可以找到 Trigger 的按钮,进去之后就到了Trigger的设置界面了,这里我们主要在 Write 和 Delete 上面设置(其实,QAD的参考手册上好像是推荐的Replication-Write 和 Replication-Delete,但当时测试的时候好像有点问题,因此,没有使用。另外,Create不用管,因为,触发了Create之后一定会触发Write的),在第一个栏位填入Trigger要执行的程序(一般以.t结尾),将后面的CRC检验设置为no(否则,程序在执行时会报错),设置完后点F4退出,并在弹出的窗口中点击保存,这样,Trigger就设好了。
2. 编写Trigger代码
先看下面的代码:
TRIGGER PROCEDURE FOR WRITE OF PT_MSTR OLD BUFFER OLD_PT_MSTR./*修改数据时的Trigger*/
TRIGGER PROCEDURE FOR DELETE OF PT_MSTR./*删除数据时的
相关文档:
第一种:查Slow query的SQL语法:
log_slow_queries = /var/log/mysql/mysql-slow.log
long_query_time = 2 (超过2秒的SQL语法记录起来,设短一点来记录除错也是一种方法.)
第二种:设MySQL Replication用binlog:
log_bin = /var/log/mysql/mysql-bin.log (此档要用mysqlbinlog解来看,
mysqlbinl ......
1. 连接mysql:
mysqlbinmysql -h主机地址 -u 用户名 -p 用户密码
2.退出mysql:exit
3. 修改密码:
mysqlbinmysqladmin -uroot -p(oldpassword) password newpassword
4.增加用户:
添加一个用户test1 密码为ABC;让他可以在任何主机上登录,并对所有数据库有查询、插入、修改、删除的权限。首先用以root用户连入
mysq ......
以下的文章是MySQL grant语法的详细解析,如果你对MySQL grant语法的相关的实际操作有兴趣的话,你就可以对以下的文章点击观看了。我们大家都知道MySQL数据库赋予用户权限命令的简单格式可概括为:
grant 权限 on 数据库对象 to 用户
一、grant 普通数据用户,查询、插入、更新、删除 数据库中所有表数据的权利。
grant ......
写入时,先做encode:
public static String encode(String src) {
String result = null;
try {
result = new String(src.getBytes("gbk"), "ISO-8859-1");
} catch (UnsupportedEncodingException uee) {
System.err.println(uee);
}
return result;
}
读出时,再做decode:
public static String deco ......