NinGoo@Net --- Just a simple Oracle & MySQL DBA
常用标签:

SlideShare:Web2.0在于分享

发现一个很酷的web2.0站点,SlideShare,比起Youtube,我更喜欢这个^_^

引用一个ppt看看效果如何(15 Ways to Kill Your Mysql Application Performance):

Redhat上安装Perl DBD::mysql驱动

打算熟悉下perl,自然主要用于数据库管理和监控方面的,所以需要连接数据库。Perl连接数据库可以通过DBI模块和相应数据库的DBD驱动,上一篇记录了DBI模块的安装,这里记录下DBD::mysql驱动的安装。可以从CPAN下载相应DBD驱动

安装过程很简单,下载解压:

gzip -d DBD-mysql-4.006.tar.gz
tar xvf DBD-mysql-4.006.tar

然后进入DBD-mysql-4.006目录,执行:

perl Makefile.PL
make
make test
make install

检查已经安装的Perl模块:

# ./perl-module.pl
DBD::mysql
DBI
Perl

安装DBD::mysql需要mysql_config,包含在Headers and libraries安装包中(MySQL-devel-community-5.1.23-0.rhel4.i386.rpm),并且PATH环境变量中必须包含mysql_config所在的路径。否则在执行perl Makefile.PL生成makefile的时候会报错:

Can’t exec “mysql_config”: No such file or directory at Makefile.PL line 76.

Cannot find the file ‘mysql_config’! Your execution PATH doesn’t seem
not contain the path to mysql_config. Resorting to guessed values!
Can’t exec “mysql_config”: No such file or directory at Makefile.PL line 466.

通过调用DBI->available_drivers()函数可以查看当前系统中已经安装好的所有驱动。安装好DBI和DBD::mysql后,就可以访问MySQL数据库啦,首先在test库中创建一个table:

create table test(id int,name varchar(30))

然后执行下面的Perl脚本插入一条数据并且查询得到结果:

#!/usr/bin/perl
use DBI;
my $dbh = DBI->connect("DBI:mysql:database=test;host=localhost","NinGoo","password", {'RaiseError' => 1});
my $rows = $dbh->do("INSERT INTO test (id, name) VALUES (1, 'NinGoo')");
my $query = $dbh->prepare("SELECT name FROM test");
$query->execute();
while(my $rs = $query->fetchrow_hashref()) {
    print "$rs->{'name'}\n";
}

给MySQL DBA推荐一本书

Understanding MySQL Internals一直以来,对于MySQL都是一知半解,而从Google的Blogsearch的结果来看,国内大部分关于MySQL的文章也都是限于会用的水平。照理来说,MySQL是开源软件,应该有更多的深入讨论MySQL原理、架构和实现机制的文章才对,当然,也可能我孤陋寡闻,MySQL关注得不多。四年前刚开始接触Oracle的时候,Oracle的文档以及论坛的讨论已经非常的丰富和深入,这也是我选择Oracle DBA做为这几年职业发展方向的原因之一吧。

这两年Web2.0大潮,很多创业公司都选择了MySQL数据库做为系统的数据平台,从而对于MySQL的开发人员和DBA的需求也多了起来,这是MySQL的机遇,也是MySQL DBA的机遇。MySQL有很多的优点,了解其架构和实现机制,不仅仅可以更加有效的管理和使用MySQL数据库,也可以借鉴其思想为我所用,或者触类旁通更好的理解其他的系统设计,毕竟开源的东西,只要有研究的精神,不怕没有研究的材料。不像Oracle等,很多东西只能需要靠蛛丝马迹去猜测,靠试验去验证。

大致翻了一下,这本《Understanding MySQL Internals》对于MySQL的概念、架构和实现机制的剖析还是比较到位的。目前市面上大部分的MySQL书基本上都是操作手册,能这么深入的讲解MySQL的书还真的是难得一见,得抽时间好好看看。这本书是2007年4月出版的,但至今似乎还没有中文版,看来中文MySQL图书市场还是一块待开垦的处女地^_^

Google一下能找到这本书的电子版,下载链接这里就不给了,不知道是否有版权问题呢,呵呵。

[继续阅读全文]

MySQL Proxy工作机制浅析

MySQL Proxy处于客户端应用程序和MySQL服务器之间,通过截断、改变并转发客户端和后端数据库之间的通信来实现其功能,这和WinGate之类的网络代理服务器的基本思想是一样的。代理服务器是和TCP/IP协议打交道,而要理解MySQL Proxy的工作机制,同样要清楚MySQL客户端和服务器之间的通信协议,MySQL Protocol包括认证和查询两个基本过程:

认证过程包括:

  1. 客户端向服务器发起连接请求
  2. 服务器向客户端发送握手信息
  3. 客户端向服务器发送认证请求
  4. 服务器向客户端发送认证结果

如果认证通过,则进入查询过程:

  1. 客户端向服务器发起查询请求
  2. 服务器向客户端返回查询结果

当然,这只是一个粗略的描述,每个过程中发送的包都是有固定格式的,想详细了解MySQL Protocol的同学,可以去这里看看。MySQL Proxy要做的,就是介入协议的各个过程。首先MySQL Proxy以服务器的身份接受客户端请求,根据配置对这些请求进行分析处理,然后以客户端的身份转发给相应的后端数据库服务器,再接受服务器的信息,返回给客户端。所以MySQL Proxy需要同时实现客户端和服务器的协议。由于要对客户端发送过来的SQL语句进行分析,还需要包含一个SQL解析器。可以说MySQL Proxy相当于一个轻量级的MySQL了,实际上,MySQL Proxy的admin server是可以接受SQL来查询状态信息的。

MySQL Proxy通过lua脚本来控制连接转发的机制。主要的函数都是配合MySQL Protocol各个过程的,这一点从函数名上就能看出来:

至于为什么采用lua脚本语言,我想这是因为MySQL Proxy中采用了wormhole存储引擎的关系吧,这个虫洞存储引擎很有意思,数据的存储格式就是一段lua脚本,真是创意无限啊。