MySQL 5.1的新特性
把08年左右自己写的东西翻出来凑个数,主要是翻译的MySQL reference相关章节
MySQL 5.1的新特性
MySQL在版本5.1中增加了很多新特性,其中的row based replication是mmrd要求必须满足的条件。目前为止,也许是出于谨慎或者稳定性的目的,MySQL 5.1虽然已经出到版本5.1.26了,仍然是Release Candidate Development Release,不能用于生产环境。不过SUN和MySQL公司还是声称将于近期推出可供生产环境使用的Release版本。下面我们列出主要的MySQL的主要新特性并进行简单介绍。
Partitioning分区
数据库分区是一种物理数据库设计技术,虽然分区技术可以实现很多效果,但其主要目的是为了在特定的SQL操作中减少数据读写的总量以缩减响应时间。分区主要有两种形式:(这里一定要注意行和列的概念(row是行,column是列))
水平分区(Horizontal Partitioning):这种形式分区是对表的行进行分区,通过这样的方式不同分组里面的物理列分割的数据集得以组合,从而进行个体分割(单分区)或集体分割(1个或多个分区)。所有在表中定义的列在每个数据集中都能找到,所以表的特性依然得以保持。举个简单例子:一个包含十年发票记录的表可以被分区为十个不同的分区,每个分区包含的是其中一年的记录。
垂直分区(Vertical Partitioning):这种分区方式一般来说是通过对表的垂直划分来减少目标表的宽度,使某些特定的列被划分到特定的分区,每个分区都包含了其中的列所对应的行。举个简单例子:一个包含了大text和BLOB列的表,这些text和BLOB列又不经常被访问,这时候就要把这些不经常使用的text和BLOB了划分到另一个分区,在保证它们数据相关性的同时还能提高访问速度。
在数据库供应商开始在他们的数据库引擎中建立分区(主要是水平分区)时,DBA和建模者必须设计好表的物理分区结构,不要保存冗余的数据(不同表中同时都包含父表中的数据)或相互联结成一个逻辑父对象(通常是视图)。这种做法会使水平分区的大部分功能失效,有时候也会对垂直分区产生影响。
分区带来的好处有很多,这里列出两点:
性能的提升(Increased performance):在扫描操作中,如果MySQL的优化器知道哪个分区中才包含特定查询中需要的数据,它就能直接去扫描那些分区的数据,而不用浪费很多时间扫描不需要的地方 了。需要举个例子,百万行的表划分为10个分区,每个分区就包含十万行数据,那么查询分区需要的时间仅仅是全表扫描的十分之一了,很明显的对比。同时对十万行的表建立索引的速度也会比百万行的快得多得多。如果你能把这些分区建立在不同的磁盘上,这时候的I/O读写速度就提升很多了。
对数据管理的简化(Simplified data management):分区技术可以让DBA对数据的管理能力提升。通过优良的分区,DBA可以简化特定数据操作的执行方式。例如:DBA在对某些分区的内容进行删除的同时能保证余下的分区的数据完整性(这是跟对表的数据删除这种大动作做比较的)。
此外分区是由MySQL系统直接管理的,DBA不需要手工的去划分和维护。
Row-based replication
MySQL5.1以前的replication都是statement replication,它把在master端提交的语句记录到binlog并传播到它的各个salve服务器,slave服务器读取并翻译提交对应的statement语句。从5.1.5开始,MySQL就支持另一种复制手段:row-based replication。这种复制方式不同于statement replication,它在binlog中记录的是修改更新语句对MySQL数据表行数据的影响,实际上记录的是表结构信息和具体的各行数据信息。在5.1.8中还推出了两种方式的组合mixed形式的复制并做为MySQL 5.1的缺省复制模式。它默认采用statement replication,而只有在特别的情况下才采用row-based replication。
行复制的引入能够避免一些master和slave环境不同引起的问题的出现,所有的字段和对应的值都被复制到slave段,从而保持slave和master数据的一致性。
Plugin API.
MySQL5.1提供了一套灵活的plugin api,它可以在不重启服务器的基础上实时地装载和卸载各种不同的组件。这些plugin API可以包括(不限于):全文检索,存储引擎和服务器扩展等方面。例如:plugin full-text parsers就允许用户在索引文本上添加他们自己的输入过滤器,从而可以在PDF或者其他文件类型的文本上实现全文检索的目的。pre-parser full-text plugin将从文本中分析和抽取出具体的信息并传给MySQL本身的全文检索模块。
Event scheduler
事件调度器是在 MySQL 5.1中新增的另一个特色功能,可以作为定时任务调度器,取代部分原先只能用操作系统任务调度器才能完成的定时功能。例如,Linux中的crontab只能精确到每分钟执行一次,而MySQL的事件调度器则可以实现每秒钟执行一个任务,这在一些对实时性要求较高的环境下就非常实用了。
事件调度器是定时触发执行的,在这个角度上也可以称作是”临时的触发器”。触发器只是针对某个表产生的事件执行一些语句,而事件调度器则是在某一个 (间隔)时间执行一些语句。事件是由一个特定的线程来管理的,也就是所谓的”事件调度器”。启用事件调度器后,拥有 SUPER 权限的账户执行SHOW PROCESSLIST就可以看到这个线程了。通过设定全局变量event_scheduler 的值即可动态的控制事件调度器是否启用。
Server log tables
在版本5.1之前,MySQL的general query log和slow query log都是写在日志文件中的。5.1中就灵活多了。日志记录可以写在日志文件中,也可以写在mysql数据库中的表general_log和slow_log中。如果开启了logging的功能,用户可以选择它们其中的一个或者全都记录对应的日志信息。可以通过控制选项–log-output来决定日志信息的记录方式。
Upgrade program
mysql_upgrade工具可以检查所有现有数据表来查看它是否与现有的MySQL服务器的版本兼容,并且在必要的时候修复它们。在每一次MySQL升级时,都应该使用该工具来检查一下。
MySQL Cluster replication
Replication现在可以支持MySQL cluster之间的复制机制了,并且,现在也支持在MySQL cluster和非cluster之间的复制。
MySQL Cluster disk data storage
在MySQL 5.1.6版本以前,NDBCLUSTER存储引擎只能在内存中使用。之后,cluster的数据就可以存储在磁盘上了(不包括索引数据)。这使得MySQL cluster对内存的依赖减少了。
Improved backups for MySQL Cluster
在老版本的MySQL cluster中,cluster数据备份过程中单个节点的错误将导致整个备份过程的失败。但是新版本中不会出现这个问题。
MySQL Cluster NDB 6.x
在MySQL Cluster NDB 6.x中改进了很多并且还增加了一些新的特性。
Backup of tablespaces
mysqldump现在支持导出tablespaces的选项。可以使用-Y或者–all-tablespaces来启用该功能。
Improvements to INFORMATION_SCHEMA
相比5.0,5.1版本的MySQL在它的元数据数据库information_schema中提供了更多的信息。在这个数据库中新的数据表包括:FILES, EVENTS, PARTITIONS, PROCESSLIST, ENGINES, and PLUGINS.
XML functions with XPath support
在MySQL 5.1中,可以利用ExtractValue()返回匹配XPath串中XML片段的内容。也可以使用UpdateXML()来用一个XML片段元素来替换XPath串中的某一段XML片段元素,并返回替换后的串。
Load emulator
mysqlslap工具用来模拟客户端压力并报告每一步的时间消耗。它模拟很多个client连接MySQL server的情况。