MySQL5.1新特性(一)日志的增强
对于MySQL,很多印象其实都是来自比较老的4.x版本,实际上MySQL在后续的5.0,5.1和6.0版本中还是做出了很多的改进,特别是原来一些动不动要重启的操作,慢慢的都可以在线做了,如果要做企业级数据库,在线操作的支持是必不可少的。由于我们在产品库中大量开始使用5.1,所以打算写一个系列短文,介绍一些个人觉得比较实用的新特性。因为MySQL这样的开源软件,版本分支比较多,所以每篇文章涉及的一些小版本可能不太一样。
MySQL有很多种日志,包括error log,general query log,binary log,slow query log等。在以前的版本,这些日志的开启或者关闭,都是需要重启服务器的,而且都是记录到日志文件。从MySQL5.1.6版开始,general query log和slow query log开始支持写到文件或者数据库表两种方式,并且日志的开启,输出方式的修改,都可以在Global级别动态修改。
如果说日志是写到文件还是表,对于DBA来说不是那么在乎的话,那么可以动态的开启关闭日志真的可以说是DBA们梦寐以求的。尤其是slow log query,以前一直在头疼,开启吧,可能影响性能,不开吧,对于一些性能差的SQL又没有其他好用的捕获方式。因为开还是不开,涉及到重启服务的问题。
下面演示一下通过设置几个Global级别参数来开启关闭general query log和slow log query的过程:
root@NinGoo>select version(); +---------------+ | version() | +---------------+ | 5.1.25-rc-log | +---------------+ 1 row in set (0.00 sec)
设置日志输出方式为文件
root@NinGoo>set global log_output=file; Query OK, 0 rows affected (0.00 sec)
设置general log和slow query log的日志文件路径
root@NinGoo>set global general_log_file='/tmp/general.log'; Query OK, 0 rows affected (0.00 sec) root@NinGoo>set global slow_query_log_file='/tmp/slow.log'; Query OK, 0 rows affected (0.00 sec)
开启general log和slow query log,相应的,关闭只要设置参数为off
root@NinGoo>set global general_log=on; Query OK, 0 rows affected (0.04 sec) root@NinGoo>set global slow_query_log=on; Query OK, 0 rows affected (0.02 sec)
如果设置log_output=table的话,则日志结果会记录到名为gengera_log和slow_log的两张表中,这两张表的默认引擎都是CSV,其实就是将日志保存为CSV文件格式了。当然,也可以将这两张表改为MyISAM引擎,这不是问题。
更多关于MySQL5.1日志的新特性,请参考MySQL 5.1 Reference Manual
Drizzle:MySQL的瘦身运动
在Google Blogsearch中搜索MySQL关键字,发现一条有意思的消息,MySQL技术总监Brian Aker在OOSCON (O’Reilly Open Source Convention) 上宣布要推出MySQL的瘦身版本Drizzle,将4.1版本后逐步加入的一些高级特性如存储过程,视图等从核心代码剔除,改为可选模块,同时精简存储引擎的支持。毕竟不是所有的应用都需要那些特性,而且代码越多,稳定性也将受到更大的威胁,精简重构对于那些只需要最简单的select/insert/update/delete的用户来说,倒不失一个好消息。
在Sun收购MySQL后,有传言说Sun打算闭源部分代码。现在MySQL又准备推出基于GPL v2的开源版本Drizzle,这和红帽的Redhat企业版+Fedora社区版的策略何其相似,也从侧面印证了Sun闭源部分代码的传言可能是确有其事了。进入2008年后,云计算的概念红的发紫,Drizzle的出生也不能不借助云计算的影响力,据说这个项目的主要面向“Web基础架构后端和云计算组件”,但我看是醉翁之意不在酒吧,将社区版独立一个Drizzle出来,企业版才好名正言顺的走向盈利的大道嘛,只是不知道目前的社区版本将会何去何从呢?
MySQL命令行的几个用法(续二)
前面两篇(看这里,看这里)介绍了MySQL命令行的一些技巧,这里再介绍下通过配置文件来设置MySQL命令行的这些参数。
通过/etc/my.cnf配置文件的[mysql]部分,可以设置MySQL命令行的一些运行参数。例如:
[mysql] prompt=\\u@\\d \\r:\\m:\\s> pager='less -S' tee='/tmp/mysql.log'
通过prompt设置显示用户名,当前数据库和当前时间,注意在配置文件里最好使用双斜杠:
root@poster 10:26:35>
通过pager设置使用less来显示查询结果,-S表示截断超过屏幕宽度的行,一行太长MySQL的显示格式就显得很乱,如果要看完整的行,建议使用\G将行垂直输出。当然,你也可以添加更多less的参数来控制输出。
tee则将MySQL执行的所有输出保存到一个日志文件中,即使使用less -S截断了超长行,在日志中还是会记录整个的结果,另外,前面通过prompt设置了当前时间显示,这样也便于在日志文件中查看每次操作的时间。由于tee的结果是附加到文件中的,日志文件需要定期清除。
缓存为王:Memcached和MySQL的结合应用
在计算机和网络的世界里,缓存无处不在,从CPU的寄存器到一级缓存二级缓存,从硬盘的文件到阵列卡的缓存到文件的缓存,从浏览器的缓存到web服务器的缓存到数据库的缓存,Cache is King。
Memcached是一个分布式的内存缓存系统,在很多大型网站中都有成功的应用案例。设计思想说起来也很简单,服务器端保存精悍而独立,基本上就是一个slab对象缓存管理器,而在客户端实现负载均衡,采用hash算法来选择不同的服务端缓存key-value数据。
Fotolog的Frank同学最近在MySQL官方网站上做了一个Memcached结合MySQL应用的webinar:
