MariaDB社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 3122|回复: 0
打印 上一主题 下一主题

mysql主从服务同步复制中值不对问题?

[复制链接]
跳转到指定楼层
1#
发表于 2009-3-4 08:34:08 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在主服务器(linux)上通过hibernate  update 一条记录时产生二进制日志文件记录信息,但是二进制日志文件记录信息是将update语句中字段(包括数值类型)的值都以字符串形式转为十六进制的值;在从服务(linux)上执行二进制日志文件记录信息时,先判断字段类型,如果要赋值字段是数值类型,将十六进制的值转换为十进制(而不是字符串形式)进行赋值,这样就造成同步复制遇到数值类型时值就不对或者溢出.其它类型字段都正常.在主从服务器window环境下,不存在以上那种情况,window环境下二进制日志文件记录信息中update语句中字段(包括数值类型)的值都以字符串形式进行传输.

附上日志文件内容如下,留意红色字体
linux环境下生成的二进制日志文件内容片段:
DELIMITER /*!*/;
# at 4841
#090301 18:52:26 server id 1  end_log_pos 5362  Query thread_id=30 exec_time=0 error_code=0
use pospdb/*!*/;
SET TIMESTAMP=1235904746/*!*/;
SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=1, @@session.unique_checks=1/*!*/;
SET @@session.sql_mode=0/*!*/;
/*!\C gbk *//*!*/;
SET @@session.character_set_client=28,@@session.collation_connection=28,@@session.collation_server=28/*!*/;
update pospdb.sys_parameter_tbl set totalUpperLimit=0x33303030302E3030, commPeriod=NULL, checkingTime=0x30302030302033202A202A203F, SendsettleUpTime=NULL, serviceSettleUpTime=NULL, codeVersion=0x303031, dataClearPeriod=NULL, checkDateInt=2, settleUpTime=NULL, createSettleUpTime=NULL, uploadQccTime=0x3030203030203133202A202A203F, uploadJJTime=NULL, uploadotherTime=NULL, sendTransactionTime=0x3020302F3133202A202A202A203F, sendErrorMsgTime=NULL where id=1
/*!*/;
DELIMITER ;
# End of log file
ROLLBACK /* added by mysqlbinlog */;
/*!50003 SET [email=COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/]COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/[/email];

window环境下生成的二进制日志文件内容片段:
BEGIN;
# at 168
#090228 16:13:10 server id 1  end_log_pos 469  Query thread_id=2 exec_time=0 error_code=0
SET TIMESTAMP=1235808790;
update pospdb.sys_parameter_tbl set totalUpperLimit='30000.00', commPeriod=NULL, checkingTime='00 00 3 * * ?', SendsettleUpTime=NULL, serviceSettleUpTime=NULL, codeVersion='001', dataClearPeriod=NULL, checkDateInt=2, settleUpTime=NULL, createSettleUpTime=NULL, uploadQccTime='00 00 13 * * ?', uploadJJTime=NULL, uploadotherTime=NULL, sendTransactionTime='0 0/59 * * * ?', sendErrorMsgTime=NULL where id=1;
# at 637
#090228 16:13:10 server id 1  end_log_pos 664  Xid = 109
COMMIT;
还留意一点,这种情况可能跟hibernater在linux环境下生成的sql语句有关,因为在在服务上直接执行update语句时不存在以上那情况.生成的日志文件传输字段值都以字符串形式.请路过朋友帮忙看一下,谢谢了.
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 转播转播 分享分享 分享淘帖 顶 踩
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|Archiver|小黑屋|手机版|MariaDB社区 ( 京ICP备07012489号    |
业务联系: QQ:48474881; 邮箱: 48474881@qq.com; 电话:13911732319
声明:本站部分文章是网友转载,若未经作者同意或署名有误,请联系网站管理员。

GMT+8, 2024-11-1 16:25 , Processed in 0.072612 second(s), 22 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表