登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

li.angshan 的博客

关注数据计算领域

 
 
 

日志

 
 
 
 

google patch  

2010-12-15 17:12:48|  分类: mysql 升级 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

google patch

google发布了一系列MySQL patch,很好很强大。其中一个patch的功能是将binlog镜像同步到slave上,详情参考http://code.google.com/p/google-mysql-tools/wiki/GlobalTransactionIds

但是google code,乃至整个万维网上,对于打补丁的具体细节都是语焉不详。我在经历了两天的make摧残之后,不忍大家再遭如此酷刑,就在本篇blog里面写点具体细节吧。

1、SVN
知道google的patch都在哪里吗?别找了,用svn直接下载吧。Linux用户执行svn checkout http://google-mysql-tools.googlecode.com/svn/trunk/就可以把所有google patch一网打尽,基本上一分钟时间就足够下载完所有的patch了。
windows用户需要去http://tortoisesvn.net/downloads下载一个客户端。安装完之后,在explorer里面点击右键就可以看见下载的选项了,把http://google-mysql-tools.googlecode.com/svn/trunk/输进去即可下载!

2、MySQL Server
google patch只能加在某些版本的MySQL之上。比如说,GlobalTransactionIds这个patch有两个版本,分别能加在5.0.37(社 区版)和5.0.68(企业版)之上。所以请千万根据patch上面的版本号下载相应的MySQL Server,否则patch是打不上去的。我发现http://mirror.provenscaling.com/mysql/上面的版本还是相当齐全的,大家可以上去下载。

3、打patch
下完了想要的google patch和相应的MySQL Server后,就到了最为考验人品的一步了,那就是“和”!
将MySQL Server源码解压,然后使用patch命令去加载google patch。这里提示一下,有用的参数就只有两个,一个是–input,另外一个是-p(具体值取决于当前目录)。打完patch之后,先make clean再编译源码,人品好的话,一次就能通过了。人品不好的,再接着往下看。

4、怎么解决编译出错的问题
google patch的代码可移植性实际上是很差的。本来就能成功编译的MySQL Server源码包,很可能打完patch之后在相同的环境下就不能编译了。以下是我总结的一些问题:
首先,确认一下你的gcc版本,很多patch只能在gcc 4.1以上的版本中正常编译。如果用Redhat Linux的话,强烈建议在Redhat Linux5上面进行编译安装。
其次,确认一下patch是逐层打上的。我想要测试的GlobalTransactionIds功能包含在patch v3内,但是如果只打patch v3的话,编译是通不过的。这时就要一层一层打patch(v1->v2->v3)。不过有一个patch叫做mysql-5.0.37- patches,懒惰的话,直接用这个patch就好了。
再其次,确认一下代码贡献者是否提出了相应的解决方案。比如说打完mysql-5.0.37-patches后,往往还要再打一个fix-patch才能 完全正常得通过编译,否则往往会报LOCK_stats的编译错误。而后面这个patch是不存在于google code上的,只能去看google code的bug列表。

这里把fix-patch的内容贴出来,免得大家还得找梯子去下载:
— base/sql/mysql_priv.h 2008-08-20 02:35:37.000000000 +0100
+++ mysql-5.0.37/sql/mysql_priv.h 2008-08-20 02:33:37.000000000 +0100
@@ -1317,7 +1317,7 @@
LOCK_slave_list, LOCK_active_mi, LOCK_manager, LOCK_global_read_lock,
LOCK_global_system_variables, LOCK_user_conn,
LOCK_prepared_stmt_count,
- LOCK_bytes_sent, LOCK_bytes_received;
+ LOCK_bytes_sent, LOCK_bytes_received, LOCK_stats;
#ifdef HAVE_OPENSSL
extern pthread_mutex_t LOCK_des_key_file;
#endif

大家有什么问题可以留言,我尽力帮忙解决,呵呵!

  评论这张
 
阅读(342)| 评论(0)

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018