之所以我比较关注libdrizzle是因为其兼容mysql协议,并且支持非堵塞执行sql,我的mystate.monitor正好需要。
另外它是BSD协议的,支持多server并发处理等
原文:http://www.oddments.org/?p=38
目前是0.2版本,下载地址:https://launchpad.net/libdrizzle/+download
编译:http://drizzle.org/wiki/Compiling#libdrizzle
api调用在源码里面有examples,非常cool!
这次在chinaunix上看大家对这个系统中的备份部分表现出很大的兴趣。

dboa数据库自动化系统截图
更多图片及讨论至: http://www.mysqlab.net/bbs/viewthread.php?tid=2
对于mysql主从数据一致性一直是大家所关注的,但是苦于没有很好的解决办法,google提供了一个非常好的补丁 OnlineDataDrift
这个补丁的原理:
针对每张表会产生一个checksum的校验sql序列,然后执行它们,并将结果插入到特定表中。
同时这些执行的sql语句会被写入到binlog,从而会在所有slave的同一个status点上执行,也将结果插入到特定表中
当这些sql执行完之后,会比较这些特定的记录,从而找出不一致的数据。
reference: http://code.google.com/p/google-mysql-tools/wiki/OnlineDataDrift
从官方网站http://dev.mysql.com/downloads/mysql/5.1.html#downloads 下载源码
解压后你会发现 strorage 目录下有 个 ibmdb2i 目录

ibmdb2i引擎
方案采用google的replication semi-sync patch 保证数据的一致性
A <-> B 互成salve
写针对vip 由 heartbeat / keepalive 控制
负责服务监控是自己写的一个daemon,当监控到服务不可用时,让heartbeat / keepalive 切换vip 到backup上,backup 接管之后,应用完日志即可启用对外服务。
当然,当中有很多细节,比如如何判断服务可用性以及切换之后什么条件下才能让backup接管,保证数据的完整。
以及在原来的master起来之后,让它成为当前db的backup…
周末整理,然后发布出来,算是下周的任务文章。
#/etc/my.cnf
[mysql]
prompt=”\\u:\\d> ”
pager=more
#更多请参考:
http://www.mysqlab.net/docs/refman/en-5.1/page/mysql-commands.html
#将库中是myisam引擎的表转成innodb
select concat(‘alter table ‘, TABLE_SCHEMA, ‘.’, TABLE_NAME, ‘ engine=innodb;’) from information_schema.TABLES where ENGINE=’Myisam’ and TABLE_SCHEMA<>’mysql’ and TABLE_SCHEMA<>’information_schema’ into outfile ‘/tmp/ivan_alter.sql’ ;
source /tmp/ivan_alter.sql
#看都有哪些sql没走索引
set global log_queries_not_using_indexes=on;
# 临时提高innodb的性能,比如在raid卡电池没电的时候,风险自担。
set global innodb_flush_log_at_trx_commit = 2;
#……
随着数据量的增大,在数据库的扩展上通常遇到切分时保证键值的唯一性问题,遇到这种情况,通常有如下几种相对简单的解决方案:
1 UUID 这种方案的优点是实现和管理简单,缺点是占用空间大,查询效率低下。
2 Sequence Number 优点是实现和管理简单,确定是有性能瓶颈和单点问题。
3 不同的集群采用的起始点或者增长间隔不同 这种方案实现简单,但是后期管理麻烦。
除了上述解决方案之外其实还有很多简单可行的办法,但是通用性不太好,在各种解决方案的接触上,本人总结出一个实现和性能上都很好的解决方案,那就是采用时间戳加毫秒数再加随机数来解决,存储字段采用bigint。
下面给出php代码实现:
function ivan_fetch_unique_bigint_id
()
{
$start_timestamp =
1238119411;
$ivan_len =
3;
$time =
explode( ‘ ‘,
microtime());
$id =
($time[1] –
$start_timestamp) .
sprintf(‘%06u’,
substr($time[0],
2,
6));
if ($ivan_len >
0) {
$id .=
substr(sprintf(‘%010u’,
mt_rand()),
0,
$ivan_len);
}
return $id;
}
取模测试均分性很好。
–
转载请注明出处,谢谢。
–
不管是原创还是翻译,以后坚持每个礼拜更新1篇,请大家监督。
最近评论