2011年12月1日 谭俊青 2 条评论
/* ivan(a.t)mysqlab.net */

package main

import (
        "syscall"
        "os"
        "log"
)

func daemon(nochdir, noclose int) int {
        var ret, ret2 uintptr
        var err uintptr

        darwin := syscall.OS == "darwin"

        // already a daemon
        if syscall.Getppid() == 1 {
                return 0
        }

        // fork off the parent process
        ret, ret2, err = syscall.RawSyscall(syscall.SYS_FORK, 0, 0, 0)
        if err != 0 {
                return -1
        }

        // failure
        if ret2 < 0 {
                os.Exit(-1)
        }

        // handle exception for darwin
        if darwin && ret2 == 1 {
                ret = 0
        }

        // if we got a good PID, then we call exit the parent process.
        if ret > 0 {
                os.Exit(0)
        }

        /* Change the file mode mask */
        _ = syscall.Umask(0)

        // create a new SID for the child process
        s_ret, s_errno := syscall.Setsid()
        if s_errno != 0 {
                log.Printf("Error: syscall.Setsid errno: %d", s_errno)
        }
        if s_ret < 0 {
                return -1
        }

        if nochdir == 0 {
                os.Chdir("/")
        }

        if noclose == 0 {
                f, e := os.OpenFile("/dev/null", os.O_RDWR, 0)
                if e == nil {
                        fd := f.Fd()
                        syscall.Dup2(fd, os.Stdin.Fd())
                        syscall.Dup2(fd, os.Stdout.Fd())
                        syscall.Dup2(fd, os.Stderr.Fd())
                }
        }

        return 0
}
// usage example: daemon(0, 0)
 

参考:http://code.google.com/p/go/issues/detail?id=227

分类: Go 标签: , ,
2011年10月1日 谭俊青 12 条评论

Manager端下载

http://download.mysqlab.net/download/DMB/dmbmanager.zip
安装:直接解压 dmbmanager.zip(比如解压至 c:\dmbmanager) ,然后打开 c:\dmbmanager 执行 setup.exe
依次执行 保存配置项、初始化系统、获取key文件,然后将申请获得的dmb.key文件保存到安装目录,即对应的目录 c:\dmbmanager
然后点启动服务。

Agent端下载

http://download.mysqlab.net/download/DMB/dmbagent.zip

安装:直接解压 dbmagent.zip 至安装目录,比如 c:\dmbagent
配置安装目录下的 dmb.ini文件,将url地址改为Manager端安装的地址
然后执行 install.bat (win7右键以管理员身份执行)

系统管理

Manager安装好之后 用浏览器打开

http://localhost:8288/ (远程用 http://ip:8288/)进行管理
默认用户名和密码为:
用户:root
密码: mysqlab.net
进入系统之后,在右上角的系统配置里面修改用户名、密码等相关信息。
其中smtp用于报警发送邮件,收件人地址及为用户信息里配置的邮件地址。

补充:
1:目前DMBManager和DMBAgent只支持Windows平台。
2:本机备份的时候IP地址请填127.0.0.1
3:实例添加/编辑的时候,my.ini 请填写windows地址,比如:c:\windows\my.ini
4:备份配置的时候,本地备份目录请填写windows目录,比如:c:\dbbackup

版本更新主要解决的问题:
1:默认配置有些填充的是linux格式目录,造成部分用户混淆,先改成windows格式;
2:v2.2可以直接获取key文件。

欢迎大家使用,如有问题请直接反馈在本blog,我会及时给予回复和和更新。

分类: MySQL 标签:
2011年4月14日 谭俊青 1 条评论

很多企业,特别是中、大型互联网企业都在大量的使用MySQL数据库,并且绝大部分情况下使用的都是InnoDB存储引擎。使用InnoDB存储引擎有很多因素,比如事务安全、自动恢复、行锁、在线备份等等特性。

MySQL数据库应用和运维中,除了数据库状态和性能监控之外,数据库的备份一直没有很好的工具去管理,DMB数据库监控及灾备系统就是为解决这一矛盾而诞生的。

DMB系统中备份配置中总共有7种备份模式,下面将针对它们分别介绍,什么样的情况下应该选择什么样的备份模式,以实现最高效的备份,且尽可能的减少对业务的影响。

  • MYSQLDUMP:
    • 调用MySQL系统的mysqldump命令进行备份。其中在只有InnoDB的情况下,可以实现在线热备,不会影响线上业务;在有MyISAM表的情况下,在备份过程当中会增加全局锁,这时候系统是只读的。备份之后会生成 master信息,可以通过备份的SQL文件和master_info.sql 创建slave服务。
  • IBBACKUP_ALL:
    • 备份所有的InnoDB和MyISAM表,在没有MyISAM表的情况下,备份过程中不会对线上业务造成影响,属于在线热备;如果存在MyISAM表,那么在备份完InnoDB之后,备份MyISAM的过程中MySQL数据库是只读的。备份会生成master_info.sql,用于创建slave。
  • IBBACKUP_INNODB:
    • 针对只有InnoDB表的情况,不会备份MyISAM表,属于在线热备,不会造成写堵塞。备份会生成master_info.sql,用于创建slave。
  • IBBACKUP_NONBLOCK:
    • 针对只有InnoDB的情况,不备份MyISAM表,属于在线热备,对系统不造成任何堵塞。备份不生成master_info.sql,不能用该备份创建slave,只用于备份用。
  • XTRABACKUP_ALL: 同 IBBACKUP_ALL
  • XTRABACKUP_INNODB: 同 IBBACKUP_INNODB
  • XTRABACKUP_NONBLOCK: 同 IBBACKUP_NONBLOCK

说明:

  1. 备份模式中以IBBACKUP开头的调用的是 ibbackup,以XTRABACKUP开头的调用的是xtrabackup。
  2. 所有备份都包含MySQL数据库系统库mysql和配置文件my.ini
  3. 在不清楚的情况下备份模式可以选择MYSQLDUMP、IBBACKUP_ALL、XTRABACKUP_ALL 。
  4. IBBACKUP、XTRABACKUP都属于物理备份,恢复速率比MYSQLDUMP要大,能缩短恢复时间。
  5. 其中 IBBACKUP_NONBLOCK、XTRABACKUP_NONBLOCK不会调用flush操作,因此在任何情况下都不会影响在线业务。而其他几种备份模式因为为了取得master info信息,有些会在瞬间加上全局锁然后释放,在极端情况下会对数据库造成一定影响。具体情况以及针对现有MySQL的patch会在后续的blog中加以阐述。
2011年4月13日 谭俊青 3 条评论

作者:谭俊青@MySQL实验室(转载请保留该行及作者信息和原文链接,谢谢!)

NoSQL最近很火,因为它在K/V存储的优异性能表现,催生出很多产品,比如:Memcached、MongoDB、Redis、TT等等. 然而他们或多或少都有自己的某些缺陷,比如存在单点、数据安全持久化等等。然而这些随着新的技术和思路的在MySQL上面产品化,这些东西会被慢慢取代,MySQL重回她的王者地位。在这之前我说过Memcached会被MySQL+handler socket取代,现在情况有所变化,为了兼容现有大量的Memcache客户端,将handler socket用memcached替换掉,就出现了如下构架:

MySQL+InnoDB with Memcached

MySQL+InnoDB with Memcached 具有大量的优势: … 【阅读全文·MySQL实验室】

2011年4月12日 谭俊青 4 条评论

在去年MySQL用户大会的时候,Sun发布了MySQL5.5。今天Oracle MySQL在MySQL User Conference 2011(MySQL用户大会)又扔出了个重磅炸弹,MySQL5.6发布

列举下MySQL5.6部分新特性:

  • InnoDB现在可以限制大量表打开的时候内存占用过多的问题(比如这里提到的)(第三方已有补丁)
  • InnoDB性能加强。如分拆kernel mutex;flush操作从主线程分离;多个perge线程;大内存优化等
  • InnoDB死锁信息可以记录到 error 日志,方便分析
  • MySQL5.6支持延时复制,可以让slave跟master之间控制一个时间间隔,方便特殊情况下的数据恢复。
  • 表分区功能增强
  • MySQL行级复制功能加强,可以降低磁盘、内存、网络等资源开销(只记录能确定行记录的字段即可)
  • Binlog实现 crash-safe
  • 复制事件采用crc32校验,增强master/slave 复制数据一致性
  • 新增 log_bin_basename (以前variables里面没有binlog位置信息,对数据库的监管很不方便)

更多信息见:http://dev.mysql.com/doc/refman/5.6/en/mysql-nutshell.html

2011年4月5日 谭俊青 7 条评论

为了这系统宅了很多个周末,又一个小长假过去了, DMB v2.1终于可以那得出手了,现在分享出来让朋友们使用,希望能得到更多更好的建议。DMB 对InnoDB存储引擎支持在线热备(ibbackup, xtrabackup等),还可以根据用户需求选择备份模式,是否加锁获取Master信息等。
“DMB数据库监控及灾备系统(监控、备份) for MySQL” 简单介绍见 http://www.mysqlab.net/tool/dmb/

Manager端下载

安装:直接解压 dmbmanager.zip(比如解压至 c:\dmbmanager) ,然后打开 c:\dmbmanager 执行 setup.exe
依次执行 保存配置项、初始化系统、获取key文件,然后将申请获得的dmb.key文件复制到安装目录,即 c:\dmbmanager
然后点启动服务,或者等待服务器重启,dmbmanager服务将自动启动。
Agent端下载
安装:直接解压 dbmagent.zip 至安装目录,比如 c:\dmbagent
配置安装目录下的 dmb.ini文件,将url地址改为Manager端安装的地址
然后执行 install.bat (win7右键以管理员身份执行)
系统管理
Manager安装好之后 用浏览器打开
http://localhost:8288/ (远程为:http://ipaddress:8288)进行管理
默认用户名和密码为:
用户: root
密码: mysqlab.net
进入系统之后,在右上角的系统配置里面修改用户名、密码等相关信息。
其中smtp用于报警发送邮件,收件人地址及为用户信息里配置的邮件地址。

– ———————
update: 2011/10/1
根据朋友们的反馈信息,这里补充几点。
1:目前DMBManager和DMBAgent只支持Windows平台。
2:本机备份的时候IP地址请填127.0.0.1
3:实例添加/编辑的时候,my.ini 请填写windows地址,比如:c:\windows\my.ini
4:备份配置的时候,本地备份目录请填写windows目录,比如:c:\dbbackup
– ———————

2011年2月14日 谭俊青 4 条评论

作者:谭俊青@MySQL实验室
测试日期:2010/01/28

硬件环境:
– ———————————————————————-
CPU: Intel(R) Xeon(R) CPU E5620 @ 2.40 GHz ( x 2)
Memory: 32GB
Disk: 300GB*4, Raid 10 , BBU(wb)
– ———————————————————————-

MySQL配置:
– ———————————————————————
innodb_buffer_pool_size = 8G
innodb_additional_mem_pool_size = 20M
innodb_log_file_size = 128M
innodb_log_buffer_size = 8M
innodb_flush_log_at_trx_commit = 2
innodb_lock_wait_timeout = 50
innodb_file_per_table = 1
innodb_thread_concurrency = 0
query_cache_size = 0
– ———————————————————————

sysbench r/w 测试
– ———————————————————————
oltp-table-size=1000000
oltp-test-mode=complex
– ———————————————————————

测试结果如下:
– ———————————————————————

– ———————————————————————

结论:
– ———————————————————————
在低并发情况下,MySQL5.1跟MySQL5.5性能持平,而实际应用中大部分并发数都低于10,因此绝大部分用户没有必要立即更换至5.5版本;
在高并发情况下,MySQL5.5的性能优势明显。

2010年12月2日 谭俊青 2 条评论

半年之前我有幸参加了MySQL2010用户大会,Oracle/Sun在会上公布了MySQL5.5的新特性,这次MySQL5.5改进的地方非常之多,当中引入的Google patch for MySQL中的半同步Semi-synchronous Replication,一个可用于高可用解决方案的新特性。谭俊青@MySQL实验室

MySQL5.5的在复制/同步方面的改进:

  • 保证主从服务器上数据的一致性(同步)
  • 能立检测到复制的异常
  • Crashed Salve能自动从错误中恢复同步
  • 在环形复制中用户能够指定跳过某实例事件
  • 主从复制中能自动适应字段类型的转换

MySQL半同步复制(semi-synchronous replication)

默认情况下MySQL的复制是异步的,Master上所有的更新操作写入Binlog之后并不确保所有的更新都被复制到Slave之上。异步操作虽然效率高,但是在Master/Slave出现问题的时候,存在很高数据不同步的风险,甚至可能丢失数据。
MySQL5.5引入半同步复制功能的目的是为了保证在master出问题的时候,至少有一台Slave的数据是完整的。在超时的情况下也可以临时转入异步复制,保障业务的正常使用,直到一台salve追赶上之后,继续切换到半同步模式。
Master:
INSTALL PLUGIN rpl_semi_sync_master SONAME ‘semisync_master.so’;
SET GLOBAL rpl_semi_sync_master_enabled=1;
SET GLOBAL rpl_semi_sync_master_timeout=1000; (1s, default 10s)
Slave:
INSTALL PLUGIN rpl_semi_sync_slave SONAME ‘semisync_slave.so’;
SET GLOBAL rpl_semi_sync_slave_enabled=1;

复制心跳(用户检测复制是否中断)

MySQL5.5提供的新的配置master_heartbeat_period,能够在复制停止工作和出现网络中断的时候帮助我们迅速发现问题。

启用方法:

STOP SLAVE;

CHANGE MASTER TO master_heartbeat_period= milliseconds;

START SLAVE;

Slave自动恢复同步

在MySQL5.5版本之前,MySQL Slave实例在异常终止服务之后,可能导致复制中断,并且relay binlog可能损坏,在MySQL再次启动之后并不能正常恢复复制。在MySQL5.5中这一问题得到了解决,MySQL可以自行丢弃顺坏的而未处理的数据,重新从master上获取源数据,进而回复复制。

跳过指定复制事件

在多Master或环形复制的情况下,处于复制链条中间的服务器异常,可以通过

CHANGE MASTER TO MASTER_HOST=xxx IGNORE_SERVER_IDS=y

跳过出问题的MySQL实例。

自动转换字段类型

MySQL5.1在基于语句的复制下,支持部分的字段转换,但是行级的会报错。MySQL5.5语句和行级复制都已支持。还可以通过 SLAVE_TYPE_CONVERSIONS 控制转换的方向。

2010年11月24日 谭俊青 6 条评论

记得半年多前写过MySQL vs NoSQL ,且一直以来我比较坚持用数据库存储K/V数据,因为不只是对数据安全等能提供保障,主要是发现大部分系统的qps根本就没那么高,能上4k的水平已经很少了,这点MySQL完全可以满足,因为优化好的K/V请求,在MySQL的SQL层上能实现每核心5k左右的qps,而这一数据在HandlerSocket出来之后,得到了更大的提升。

HandlerSocket plugin for MySQL 已经出来一段时间了, 鉴于HandlerSocket和InnoDB的健壮、安全性, 可以预见HandlerSocket取代Memcached等NoSQL存储/Cache,已经是大势所趋。

HandlerSocket 是MySQL的一个插件,用于跳过MySQL的SQL层面,直接访问内部的InnoDB存储引擎,从而充分发挥InnoDB的性能优势;此外,InnoDB的ACID特性,可以保障数据的安全。

初步对比了下,HandlerSocket Plugin for MySQL性能跟Memcached差不多,原文中的测试数据显示更胜Memcached一筹,接下来准备跟ndbapi的性能进行对比测试,为系统构架提供参考。

                           approx qps     server CPU util
MySQL via SQL                105,000      %us 60%  %sy 28%
memcached                    420,000      %us  8%  %sy 88%
MySQL via HandlerSocket      750,000      %us 45%  %sy 53%

HandlerSocket源码地址:https://github.com/ahiguti/HandlerSocket-Plugin-for-MySQL/

HandlerSocket的客户端:

HandlerSocket Client for Perl

HandlerSocket Client for Python

HandlerSocket Client for PHP

HandlerSocket Client for Java

– ————————————-
update: 2011/04/08
在Dell R710 双四核 E5620 下,mysql版本为5.1.54,未修改任何源码,采用php的handler-socket扩展,测试结果稳定在33万+QPS,其中mysqld占用cpu约为50%

分类: MySQL, nosql 标签: ,
2010年11月11日 谭俊青 3 条评论

手头上有一份9个月前的测试数据,当时帮一位朋友讲服务器换成小机之后,性能没法达到预计的目标,在优化的过程中在128线程的小机上做了简单的测试,发现MySQL在多核心机器上并发性能表现还不错。

当中红色的是 MySQL 5.1.44, 蓝色的是MySQL 5.5.2-m2.

要说明的是测试TPS不高,主要是sun的小机cpu主频太低。

分类: MySQL 标签:
2010年10月12日 谭俊青 2 条评论
刚在群里发现朋友发的,据说是Google的招聘笔试题,不知道真假,觉得有趣,分享下。
Google的2011年校园招聘宣讲会分别在北大和清华举行,其中北大本来是350人的会场,去了大约600多人,爆满,那场面绝对是人山人海,彩旗飘飘。经过了大约一个小时多的宣讲和问答,开始现场笔试环节,一共10个选择题和三个算法题,只有选择题答对了6个以上的人才有机会让面试官看你后面的算法题。然后明天下午会通知笔试通过的人进行面试,google的效率就像其搜索引擎一样迅速,效率可见一般。
其中前10个选择题中有一个特别雷人的,题如下:
现在北京有一套房子,价格200万,假设房价每年上涨10%,一个软件工程师每年固定能赚40万。如果他想买这套房子,不贷款,不涨工资,没有其他收入,每年不吃不喝不消费,那么他需要几年才能攒够钱买这套房子?
a, 5年
b, 7年
c, 8年
d, 9年
e, 永远买不起
==========================================================
y1 = 1.1^x * 200
y2 = 40 * x
用中学的作图解题,上面的曲线和下面的直线是没有交点的。
———-
另外不作图简单计算也方便
1:200/40=5, 1.1^5*200 >322
2: 322/40>8, 1.1 ^8*200>400
3: 400/40 >10, 1.1 ^10*200>500
已经看出来了,后面的增长每年已经超过40,因此可知道答案
———-
f(x)=y1-y2
求导,得解
———-
如果将题目改一下呢?如果每年的工资也已10%的速率增长呢?是否有交点?
分类: MySQL 标签:
2010年9月15日 谭俊青 1 条评论

最近利用空闲时间用Python编写DMB,遇到编辑器Wing IDE输入中文的时候显示乱码,一番折腾之后放才解决问题。

解决步骤(下面以win7 64, Wing IDE 3.2 为例):

1:打开目录 C:\Program Files (x86)\Wing IDE 3.2\bin\gtk-bin\etc\pango

2:备份文件 pango.aliases

3:以administrator打开文本编辑器(不然后面编辑之后不让保存)编辑文件 pango.aliases,将内容修改为

courier = "microsoft yahei"

sans = "microsoft yahei"
serif = "microsoft yahei"
monospace = "microsoft yahei"
# from MySQL实验室(mysqlab.net)

然后保存,再打开Wing IDE的时候已经解决中文显示乱码问题。

分类: python 标签: , ,
2010年9月1日 谭俊青 1 条评论

MySQL实验室

1. MySQL中并发和隔离控制机制

  • Meta-data元数据锁:在table cache缓存里实现的,为DDL(Data Definition Language)提供隔离操作。一种特别的meta-data元数据类型,叫Name Lock。(SQL层)
  • 表级table-level数据锁(SQL层)
  • 存储引擎特有机制 — row locks行锁,page locks页锁,table locks表级,版本控制(在引擎中实现)
  • 全局读锁 — FLUSH TABLES WITH READ LOCK(SQL层)

【阅读全文·MySQL实验室】

分类: MySQL 标签: , , ,
2010年8月27日 谭俊青 没有评论

下载:MySQL之自由斗士- 浴火重生的海豚

Presentation的内容包括:

2010年8月27日 谭俊青 11 条评论

MySQL Cluster使用不那么广泛,除了自身构架因素、适用的业务有限之外,另一个重要的原因是其安装配置管理相对复杂繁琐,总共有几十个操作步骤,需要DBA花费几个小时才能搭建或完成升级。MySQL Cluster 7.1推出了MySQL Cluster Manager,MySQL Cluster的安装、升级管理等操作,将DBA原本需要几个小时的工作,节省到通过若干个命令即可完成,还能避免操作的失误。MySQL Cluster Manager的基本工作原理如下图所示:

MySQL Cluster将要被部署的机器上安装好 MySQL Cluster Manager Agent之后,通过现有的mysql客户端即可连接操作使用。可以连接任何一台机器上的Agent,它们之间能相互通信。Agent默认连接端口为:1862,即可如此连接: mysql -h hostname -u username -p -P 1862

连接之后即可通过Agent对集群系统进行交互、管理。

【阅读全文·MySQL实验室】

Pages: Prev 1 2 3 4 5 6 7 Next