存档

‘MySQL’ 分类的存档

mysql ha 相对完整的方案快要面世了

2009年4月3日 谭俊青 11 条评论

方案采用google的replication semi-sync patch 保证数据的一致性
A <-> B 互成salve
写针对vip 由 heartbeat / keepalive 控制
负责服务监控是自己写的一个daemon,当监控到服务不可用时,让heartbeat / keepalive 切换vip 到backup上,backup 接管之后,应用完日志即可启用对外服务。

当然,当中有很多细节,比如如何判断服务可用性以及切换之后什么条件下才能让backup接管,保证数据的完整。
以及在原来的master起来之后,让它成为当前db的backup…

周末整理,然后发布出来,算是下周的任务文章。

分类: MySQL HA 标签:

MySQL Tips 实用的小技巧

2009年3月27日 谭俊青 没有评论

#/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;

#……

分类: MySQL 标签:

分库分表(sharding)后主键全局唯一性的解决方案

2009年3月27日 谭俊青 21 条评论

随着数据量的增大,在数据库的扩展上通常遇到切分时保证键值的唯一性问题,遇到这种情况,通常有如下几种相对简单的解决方案:

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;
}
取模测试均分性很好。
转载请注明出处,谢谢。
分类: MySQL, MySQL Innodb, php 标签: , ,
Pages: Prev 1 2 3 4 5 6