终于把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
大家有什么问题可以留言,我尽力帮忙解决,呵呵!
Tags: GlobalTransactionIds, google patch, LOCK_stats, MySQL, mysql-5.0.37-patches, svn
September 19th, 2009 at 14:02
不错 blog也写了哇
October 23rd, 2009 at 14:10
不错的blog,学习了。。
November 12th, 2009 at 10:45
楼主 太感谢了
March 12th, 2010 at 12:34
[...] SemiSyncReplication是Google提供的一个MySQL patch,作用在于保证至少有一个slave完成了数据同步。 安装的过程很简单,但是要找对路。这里提供一个传送门,看完就会编译安装了: http://www.realzyy.com/?p=178 [...]
March 16th, 2010 at 17:13
什么事 fix-patch
March 16th, 2010 at 17:39
能详细说下 fix-patch 吗
March 17th, 2010 at 08:52
搞定,多谢楼主
June 2nd, 2010 at 23:32
写错了哦.
“就要一层一层打patch(v1->v2->v3)”
google code上说是单独打patch即可.