Sun今日宣布收购Mysql

Sun公司(NASDAQ: JAVA) 今日发表声明称,出资10亿$收购Mysql AB,希望能够籍此在数据库市场分得一大杯羹。现如今,已经有相当一部分大公司使用mysql,比如Facebook, Google, Nokia, Baidu and China Mobile,mysql作为一个open source databases,取得这样的成绩实属不易。Sun的这一收购行为,不仅能在数据库市场同oracle,microsoft以及ibm形成有力竞争,更能和它的其它开源产品一起,巩固Sun在开源世界的地位。

SANTA CLARA, CA January 16, 2008 Sun Microsystems, Inc. (NASDAQ: JAVA) today announced it has entered into a definitive agreement to acquire MySQL AB, an open source icon and developer of one of the world’s fastest growing open source databases for approximately $1 billion in total consideration. The acquisition accelerates Sun’s position in enterprise IT to now include the $15 billion database market. Today’s announcement reaffirms Sun’s position as the leading provider of platforms for the Web economy and its role as the largest commercial open source contributor.

Mysql作为LAMP黄金组合中的M,实在功不可没,它的易用性以及良好表现给许多php应用提供了强劲的动力。但不知从此以后,LAMP黄金组合是否还能风光再现(或者该换成LAPP了?)。

原文:Sun Microsystems Announces Agreement to Acquire MySQL, Developer of the World’s Most Popular Open Source Database

MySQL Proxy的Alpha版本发布

MySQL Proxy的Alpha版本发布。下面是官方的介绍。

What is MySQL Proxy?

MySQL Proxy is a simple program that sits between your client and MySQL server(s) that can monitor, analyze or transform their communication. Its flexibility allows for unlimited uses; common ones include: load balancing; failover; query analysis; query filtering and modification; and many more.

看起来,这个东西能做负载均衡,故障恢复以及query过滤之类事情,如果性能很好,bug少少的话,等它的正式版发布后,我会考虑拿它来做些事情,毕竟,这些都是php开发者经常会要面对的事情。期待!!

几张关于php的小图

php beauty

php beauty

首先贴两张php的小卡通,不是太喜欢美式风格的画风。

dolphin mysql

这张漫画是一头大象正在烧烤海豚。php的传统logo是一头大象,而mysql一贯是以海豚作为标志的,那么这幅图说的是php化身的大象正在大力烧烤mysql dophin?

其实是PostgreSQL在烘烤可怜的Mysql,面目憎狞.

MYSQL的FOUND_ROWS()函数

UPDATE:FOUND_ROWS()函数貌似还存在一些问题,见http://bugs.mysql.com/bug.php?id=18454

mysql 4.1中新增了FOUND_ROWS()函数,这个函数的说明是这样的:

For a SELECT with a LIMIT clause, the number of rows that would be returned were there no LIMIT clause

A SELECT statement may include a LIMIT clause to restrict the number of rows the server returns to the client. In some cases, it is desirable to know how many rows the statement would have returned without the LIMIT, but without running the statement again. To obtain this row count, include a SQL_CALC_FOUND_ROWS option in the SELECT statement, and then invoke FOUND_ROWS() afterward:

比如说有段sql需要取出一张表的前10行,同时又需要取出符合条件的总数。这在某些翻页操作中很常见

SELECT SQL_CALC_FOUND_ROWS * FROM tbl_name
WHERE id > 100 LIMIT 10;

在上一查询之后,你只需要用FOUND_ROWS()就能获得查询总数,这个数目是抛掉了LIMIT之后的结果数:

SELECT FOUND_ROWS();

其中第一个sql里面的SQL_CALC_FOUND_ROWS不可省略,它表示需要取得结果数,也是后面使用FOUND_ROWS()函数的铺垫。

php 5.2 + pdo_mysql安装

这天在一台redhat的机器上安装php 5.2+pdo_mysql,走了些弯路,浪费了不少时间.记录一下:

首先我按照之前记录的手册安装php,参数上有些变化,configure参数增加了–with-pdo=shared –with-pdo-mysql=shared

最后得到一些错误提示:

checking for MySQL support for PDO... yes, shared
checking for mysql_config... /usr/bin/mysql_config
./configure: line 3038: -e: command not found
./configure: line 3039: -e: command not found
checking for mysql_query in -lmysqlclient... no
configure: error: mysql_query missing!?

于是暂时去掉了pdo-mysql模块的安装,直接安装pecl.php.net上最新的PDO_MYSQL

tar -xf PDO_MYSQL.tar
cd PDO_MYSQL-1.0.1
phpize
./configure

仍然出现之前的错误提示.很郁闷,在google上搜索了一下,有个最粗鲁最暴力的办法就是直接修改configure,绕过mysql_query的检测,这样能够编译成功,但是使用的时候调用pdo_mysql模块失败.

偶在这个问题上是卡了很久,在google的搜索结果里一个个比对,最后一个比较有建设性的提示是让俺回去查glibc的版本.

rpm -qa|grep glibc

这样看到这台机器上的glibc版本是2.3,而我下载安装的mysql却是for glibc 2.2,难怪会编译失败. 安装对应版本的mysql之后问题解决.

wordpress迁移

前一阵服务器出了些小问题,因此不得不将现有的wordpress做一备份迁移。好在迁移之后还算幸运,整个过程比较顺利,因此现在系统又开始跑起来了。你可能会觉得迁移不是什么太麻烦的事情,不过对于一个几年没挪过窝,东西又烂又多,数据库打包都有8m,虚拟主机权限很少的人来说,这可是一档子大事情。

mysql 4 to mysql 4.1

首先面对的问题,是虚拟主机上的数据库又生了,4.0跳到4.1,老江湖都知道,mysql 4.1新增了字符集,一个没弄好就是页面乱码伺候。

另外一个问题,是前面提过的,原来的数据库用phpmyadmin打包出来,有8M,再用phpmyadmin导入是不用指望,在没有shell权限的情况下,要把这个数据导进去也挺麻烦。

最后用个意想不到的办法,就轻易解决了上面俩问题 —— 我们知道,大容量的mysql数据的导入导出,还是命令行导出方便,虽然说我没有虚拟主机的shell权限,但是php本身还是有办法调用shell的(感谢主机提供者,没有开启安全模式),按照这个思路,我首先将sql上传到服务器,然后用一行php脚本就完成了数据的导入:

<?php `mysql -uroot -pxxxxxx dbname < db.sql`?>

导入mysql之后的字符集是latin,和以前一致,程序不用做修改就可以投入使用了。

上一次迁移:plog 2 wordpress

mysql 5.1新功能 -- 按日期分区

mysql 5.1已经到了beta版,官方网站上也陆续有一些文章介绍,比如上次看到的Improving Database Performance with Partitioning。在使用分区的前提下,可以用mysql实现非常大的数据量存储。今天在mysql的站上又看到一篇进阶的文章 —— 按日期分区存储。如果能够实现按日期分区,这对某些时效性很强的数据存储是相当实用的功能。下面是从这篇文章中摘录的一些内容。

错误的按日期分区例子

最直观的方法,就是直接用年月日这种日期格式来进行常规的分区:

mysql>  create table rms (d date)
    ->  partition by range (d)
    -> (partition p0 values less than ('1995-01-01'),
    ->  partition p1 VALUES LESS THAN ('2010-01-01'));

上面的例子中,就是直接用”Y-m-d”的格式来对一个table进行分区,可惜想当然往往不能奏效,会得到一个错误信息:

ERROR 1064 (42000): VALUES value must be of same type as partition function near ‘),
partition p1 VALUES LESS THAN (‘2010-01-01′))’ at line 3

上述分区方式没有成功,而且明显的不经济,老练的DBA会用整型数值来进行分区:

mysql> CREATE TABLE part_date1
    ->      (  c1 int default NULL,
    ->  c2 varchar(30) default NULL,
    ->  c3 date default NULL) engine=myisam
    ->      partition by range (cast(date_format(c3,'%Y%m%d') as signed))
    -> (PARTITION p0 VALUES LESS THAN (19950101),
    -> PARTITION p1 VALUES LESS THAN (19960101) ,
    -> PARTITION p2 VALUES LESS THAN (19970101) ,
    -> PARTITION p3 VALUES LESS THAN (19980101) ,
    -> PARTITION p4 VALUES LESS THAN (19990101) ,
    -> PARTITION p5 VALUES LESS THAN (20000101) ,
    -> PARTITION p6 VALUES LESS THAN (20010101) ,
    -> PARTITION p7 VALUES LESS THAN (20020101) ,
    -> PARTITION p8 VALUES LESS THAN (20030101) ,
    -> PARTITION p9 VALUES LESS THAN (20040101) ,
    -> PARTITION p10 VALUES LESS THAN (20100101),
    -> PARTITION p11 VALUES LESS THAN MAXVALUE );
Query OK, 0 rows affected (0.01 sec)

搞定?接着往下分析

Continue reading “mysql 5.1新功能 -- 按日期分区”

命令行下简单做到mysql的数据导入导出

在命令行下mysql的数据导出有个粉好用的工具mysqldump,,它的参数有一大把,可以这样查看:

mysqldump 

我最常用的:

mysqldump -uroot databasefoo table1 table2 > foo.sql

这样就可以将数据库databasefoo的表table1,table2以sql形式导入foo.sql中,其中-uroot参数表示访问数据库的用户名是root,如果有密码还需要加上-p参数

mysql的数据导入也是相当便捷的,如:

mysql -uroot databasefoo < foo.sql

这样就可以将foo.sql的数据全部导入数据库databasefoo

mysql 5.1的计划任务 – Event

mysql的网站上多了一个关于5.1新特性Event(事件)的介绍 ,咋一看象是windows的计划任务,细一看,呵呵,正是如此.假如你有这样的需求–在今年年底之前,每天给我查查用户表里新增了哪些美女,说不定就可以用上Events特性了,下面是新建立Event的语法

[sql]CREATE EVENT
e                               /* 事件名 */
ON SCHEDULE
EVERY 1 WEEK                    /* 执行间隔 */
DO
INSERT INTO t VALUES (0);       /* SQL statement */
[/sql]

而要开启或关闭这个特性,只要执行下面的sql:
[sql]SET GLOBAL event_scheduler = 1; /*0是关闭*/[/sql]

不管怎么说,mysql的新版本是越来越强大了,但是在实际的项目中,还没有机会用上它们,很难说性能上是不是会打上折扣
原文地址:http://dev.mysql.com/tech-resources/articles/event-feature.html