微软宣布已修复 Hotmail 漏洞

国外媒体报道,微软日前宣布,已修复Hotmail一项密码重置系统漏洞,该漏洞允许黑客控制网络邮箱账户。据悉,该漏洞存在于Hotmail密码重置功能,黑客能够使用Firefox浏览器插件Tamper Data拦截HTTP重置密码要求,更改数据,锁定并进入用户账户。

4月初,计算机安全人员发现此安全漏洞,并很快通知微软。但该漏洞的细节在网络论坛泄露,本周早些时候,据称黑客攻破每个账户的价格仅为20美元。

微软宣布,已经发布漏洞修复补丁。微软在其安全响应Twitter上表示,“周五,我们解决了密码重置功能漏洞,目前一切处置妥当。”

据悉,目前受到此漏洞影响的Hotmail账户数量尚不清楚,摩洛哥黑客曾大肆利用该漏洞,窃取了1300万个Hotmail账户。

软件安全公司Sophos高级技术顾问格雷厄姆 克鲁雷(Graham Cluley)称,“若Hotmail用户因不明原因无法登入账户,则可能遭遇黑客攻击。黑客不仅仅对破解账户有兴趣,更热衷于窃取用户身份信息或借已攻入账户攻击更多账户。”

去年,谷歌、雅虎和Hotmail邮箱用户均遭遇一系列钓鱼攻击。黑客获取网络邮箱账户,然后用该账户向数千账户发出钓鱼邮件信息。

文/赛迪网

IBM Power7 出 Linux 版 与 HP 和 DELL 竞争

IBM将推出第一款完全采用Linux的Power服务器,和x86阵营的服务器厂商竞争,比如惠普和戴尔。这款新的Power服务器型号为 “PowerLinux 7R2”,“7R2”表示基于Power7处理器的双路机架服务器,面向大型数据分析,主要针对非结构化数据分析应用,如IBM InfoSphere Streams或者InfoSphere BigInsight,来为客户传递那些来自SAP或者开原基础架构服务的应用解决方案。

IBM PowerLinux 7R2系统配备了两颗主频3.55GHz Power7处理器、32GB内存、两块300GB硬盘,四个1Gb网络控制器,还包括SAS RAID控制器和DVD驱动器,报价为21,282美金。相比x86服务器上的vSphere 5.0 Enterprise,这款PowerLinux服务器上的PowerVM虚拟化软件仅仅能支持Linux,并不支持AIX 6.2、i5以及更早的操作系统版本。另一方面,7R2每个核心支持4个线程,支持硬件虚拟化,每个虚拟机支持16个虚拟CPU,对内存支持没有限制;而 VMware则是限制每个插槽支持64GB虚拟内存和8个CPU内核。

 

IBM PowerLinux预安装了Red Hat Enterprise Linux 6或SUSE Linux Enterprise Server 11 SP1,已经配置好。IBM还提供了一个安装工具包和几乎完整的软件开发包,包含SDK;一个高级工具链包括最新的GNU工具以及组合、测试和IBM支持 工具;Fedora和Debian也可以装在7R2服务器上,但不是由IBM来支持。

尽管IBM是Linux发展的主要推动者,但是在过去的12年中开源操作系统都是运行在IBM主机上,IBM并非是Linux服务器的典型供应商。 这主要原因在于IBM的专有硬件:Power7主要用于商业应用和超级计算机,IBM并未将Linux引入这些系统。IBM在2004年已经将Think 制造和营销业务出售给联想,包括笔记本、PC和服务器。

除了AIX Unix和i操作系统,PowerLinux的推出让IBM小型机用户还可以选择Linux系统,这是很有吸引力的,因为当前IBM系统是装备了硬件虚拟 化组件,操作系统运行在逻辑分区上,即便是只有一个操作系统。但是,IBM还是面临着x86市场中英特尔和AMD的威胁,因为它们的处理器在双路服务器中 要更常见。

10个有趣的 PHP 教程

1. 整合 pChart 和 Google Analytics
在这篇文章中,你可以学到如何整合 pChart(一个 php 图表库) 和 Google Analytics 以获得你想要的结果。

2. 用 PHP 创建 Instagram 效果
在这个教程中,你将看到如何利用 PHP 和 ImageMagick 创建复古等等类似 Instagram 的效果。

3. PHP 投票系统
在这个教程中,作者解释了如何用 PHP 创建一个简单的投票系统。这个系统将是纯 PHP 开发,没有 JavaScript 客户端增强。它演示了如何使用 OOP 风格的的编码来创建这类系统。

4. 用 CodeIgniter 和 MySQL 来创建每日问答
这个教程讲解了如何用 CodeIgniter 和 MySQL 来创建一个小应用。这个应用向访问者展示一个问题,并允许访问者发表答案。

5. 转换 HEX 到 RGB
如果你有做跟颜色相关的 web 应用的话,你会需要一个转换不同格式颜色代码的函数。这个 PHP 代码可以把 HEX 格式的颜色转换成 RGB 格式的颜色。

6. 集成 Facebook Connect
这个教程演示了如何 PHP SDK v.3.x.x 来整合 Facebook Connect 和你的网站。

7. 通过 PHP 上传照片到 Flickr
这个教程将教你如何使用 phpFlickr 进行认证并上传图片到 Flickr。

8. 创建网络电台
这个教程将教你如何使用 audio streams 创建你自己的网络电台。

9. 使用 FuelPHP 创建表单
通过 FuelPHP, 你可以很方便的生成并验证一个表单。

10. 聊天系统
这是一个功能强大的聊天系统,包括注册、登陆、聊天窗口、个人属性、头像、私信等等。

 

原文链接OSChina.NET 编译

Ubuntu Server 12.04 的新特性一览表

Ubuntu 12.04 (代号为 Precise Pangolin) 版本主要侧重于发布、稳定性和质量。Ubuntu 12.04 包含最新的代号为 Essex 的 OpenStack 版本,以及一项名为 MAAS 的新特性。此外,可使用 Juju 轻松的部署集中式的 CharmStore 。还包含一项名为 AWSOME 的新技术。

这些技术将 Ubuntu Server 定位为最佳的可伸缩计算的服务器操作系统,同时在持续集成、发布和测试的质量上得到了最大的重视。

OpenStack

OpenStack 项目更新到最新你名为 Essex 的版本,对 nova 用户默认使用 /bin/false。

新的二进制包,nova-cert 需要进行解密图片,移除对 M2Crypto 的依赖。
Quantum 分成 quantum 和 quantum 客户端包
Glance 包含新的配置文件结构
nova 默认使用 nova-rootwrap ,提供更好的、更细粒度的安全层
从 horizon 中移除 openstackx
移除 ajaxconsole 改用基于 VNC 的解决方案
移除 ec2 admin api.
Quantum, Melange, 和 Nova 网络模块进行合并
添加许多 OSAPI 扩展
euca-upload-bundle 可与 keystone 一起工作

OpenStack 组件可通过 Juju Charms 进行发布

Keystone 更新到 Keystone-light (redux 分支). Keystone-light 是一个新的重写的版本,替换原来在 11.10 中的版本。
Glance 在升级后需要进行手工的数据库移植
默认必须在受保护的网络中安装 Openstack,因为多数组件使用 http (非安全)进行传输。

MAAS

MAAS (Metal as a Service)为物理服务器带来了云环境语言,可以轻松的在已有硬件基础上发布任何服务,并可根据需要进行伸缩以及动态下线。

AWSOME

AWSOME (“Any Web Service over Me”) 为 OpenStack 提供了 IAAS API’s ,可轻松发布和管理基于 AWS 和 OpenStack 的云服务。

Juju

Juju CharmStore 现可无需本地 charms 环境直接发布 charmed 服务。

允许使用不同的服务单位添加下属服务,将部署到相同的容器中,并互相识别。

增加机器约束,方便用户选择他们发布服务所需的硬件配置。

Java

可通过 Universe 软件库获取 Apache Tomcat 7.0.26 ,当然继续支持 Tomcat 6.0.35

请注意 Tomcat 7 将在 Ubuntu 12.10 中替换 Tomcat 6.

软库库中同时提供 Apache ActiveMQ 5.5.0 、Jenkins 1.424.6 LTS、OpenJDK 7 (紧密贴合 Oracle Java 7)、Groovy 1.8.6、Scala 2.9.1 和 Clojure 1.1.0
请注意 OpenJDK 7 将是 Ubuntu 12.10 中默认的 Java 实现。

虚拟化

包含 Xen 并且官方支持
为 Ubuntu 作为 Zen 虚拟化服务提供工具 (dom0)

Libvirt integration/Xen domains manageable through libvirt or any frontend that uses libvirt.
Guest installations in HVM mode will use optimized paravirt drivers out of the box.

LXC 提升包括:
The ability for stock 12.04 images to boot in a container
Apparmor protection to increase security
Support for lvm- and btrfs-backed containers
New ubuntu-cloud template for simple creation of containers based on published Ubuntu Cloud images.

KVM (version 1.0) 和 Libvirt 提升包括:
QED (Qemu enhanced disk format) support
AHCI protocol support
Nested guest support for Intel processors (in addition to AMD support)
Public API to invoke suspend/resume on the host from libvirt
STP and VLAN filtering from libvirt
Bandwidth QoS control in libvirt
CPU 带宽限制支持

文件系统

CEPH 客户端库, librbd 和 librados 添加到 KVM 的支持中
CIFS 使用文件系统缓存以提升性能
软 RAID 支持坏块管理

ARM 支持

提供 OpenMPI 1.5 for ARM  (889644)
openmpi 1.5 改进对 ARM 的支持,不过目前还是 beta 版本。

其他

Query2, 一个新的元数据服务,用来描述 Ubuntu 云图片以及其可用性,提供一个 JSON 格式的文件用来描述 cloud-images.ubuntu.com 上的图片存储和官方 Ubuntu 图片的状态

新的 Zentyal 包

These packages are a rename of the existing ebox packages along with a new upstream release fixing known issues in the current ebox packages in Ubuntu 11.10.

Resara, 一个开源的 Linux 域控制器和文件服务器,基于 Samba4.
acpid introduced to both Server and Cloud images by default.

Chef 0.8.16 (948437) and corresponding Ohai packages (948438) removed from precise at the request of OpsCode.

应 Eucalyptus 的要求移除 Eucalyptus 2.0.1 (953405)

通用架构

Up until Ubuntu 11.10, administrator access using the sudo tool was granted via the “admin” Unix group. In Ubuntu 12.04, administrator access will be granted via the “sudo” group. This makes Ubuntu more consistent with the upstream implementation and Debian. For compatibility purposes, the “admin” group will continue to provide sudo/administrator access in 12.04.

默认禁用休眠功能(suspend to disk) ,因为发现这功能不可靠,而且两种不同的挂起模式让人混淆,详情请看 bug 812394.
pm-utils now has two new scripts to power down USB and various PCI devices in battery mode. A number of desktop packages were fixed to wake up less often. Both of these reduce power consumption and thus improve battery lifetime.

resolvconf is now used to manage /etc/resolv.conf on all Ubuntu systems. You can learn more here
Backports are now more easily accessible — to enable users to more easily receive new versions of software, the Ubuntu Backports repository is now enabled by default. Packages from backports will not be installed by default — they must explicitly be selected in package management software. However, once installed, packages from backports will automatically be upgraded to newer versions.
DVD Images — the DVD images have been cleaned up significantly reducing their size to around 1.5GB to ease consumption. The remaining software remains available via download.

Linux v3.2.14 内核

Ubuntu 12.04 LTS ships with an updated kernel moving from the mainline v3.0 series to the mainline v3.2 series. At release we are shipping with the Ubuntu 3.2.0-23.36 kernel which is based on the v3.2.14 upstream stable Linux kernel. The mainline v3.0 to v3.2 stable series update brings a number of new features. Some highlights include:

ext4 gains support for larger base block sizes
btrfs has more work addressing data integrity issues
device mapper gains thin provisioning and recursive snapshots
more work to improve performance under high writeback load
networking improvements for congested networks
ext3 moves to using filesystem barriers
memory allocator improvements
VFS scalability improvements
a new iSCSI implementation
software wait gains bad block management

Key changes in the Ubuntu kernel since the 3.0.0-12.20 Ubuntu kernel as shipped in the 11.10 Ubuntu release include:

Rebase to upstream stable Linux kernel v3.2.14.

The amd64 -generic and -server kernel flavors have been merged into a single -generic kernel flavor for Ubuntu 12.04. Given the few differences that existed between the two flavors, it only made sense to merge the two and reduce the overall maintenance burden over the life of this LTS release.
Support for a new armhf kernel flavor has been introduced.

The non-smp PowerPC kernel flavor has been removed. All hardware currently supported by the non-smp PowerPC kernel flavor should also be supported by the smp PowerPC kernel flavor.

RC6 is enabled by default for Sandy Bridge systems. RC6 is a technology which allows the GPU to go into a very low power consumption state when the GPU is idle (down to 0W). It results in considerable power savings when this stage is activated. When comparing under idle loads with machine state where RC6 is disabled, improved power usage of around 40-60% has been witnessed.

An improved set of jack detection patches has been backported from the upstream v3.3 Linux kernel.

An updated AppArmor patch set has been included to better align with what is landing upstream.

Applied and enabled the seccomp filters feature which uses the packet filtering machinery (BPF) to restrict access to system calls.

A set of kexec fixes for arm from v3.3-rc1 has also been backported.

We’ve also conducted an extensive review of Ubuntu kernel configs and made numerous config changes as a result.

Upstart 1.5

Upstart 更新到 1.5. Upstart Technical Overview 提供更详细的细节

GNU Toolchain

Ubuntu 12.04 包含默认的工具链:GCC 4.6.3 (and changes from Linaro GCC 4.6-2012.02), binutils 2.22, eglibc 2.15, and Linaro gdb 7.4-2012.04.

与 11.10 版本比较主要是一些增量的改动和 bug 修复

更新的前端以更好的支持标准 (Ada 2012, Objective-C 2.0, improved experimental support for the upcoming C++0x ISO C++ standard, Fortran 2003 and 2008 improvements, new Go frontend)
改进优化、更好的过程优化和链接时间优化。

更多的信息请看 (GCC-4.6, GCC-4.5, binutils, gas, ld, gdb).

Python Toolchain

Ubuntu 12.04 包含 Python 2.7.3 和 Python 3.2.3,不再提供 Python 2.6
该版本为 Python 3 提供扩展支持, 包括 Python 3 移植版本的:python-dbus, python-feedparser, germinate, lazr.ui, wadllib, python-defer, python-keyring, and python-qt4 now included, among others.

Java Toolchain

默认的 Java 运行环境采用 OpenJDK 6b24 (IcedTea 1.11.1). 同时也提供 OpenJDK 7u3 (IcedTea 2.1)

via ubuntugeek

优化 MySQL 语句的十个建议

Jaslabs的Justin Silverton列出了十条有关优化MySQL查询的语句,我不得不对此发表言论,因为这个清单非常非常糟糕。另外一个Mike也同样意识到了。所以在这个博客中,我要做两件事情,第一,指出为什么这个清单很糟糕,第二,列出我的清单,希望我的比较好些。继续看吧,无畏的读者们!

(译者注:作者借这个题目反讽另一篇同名的文章)

为什么那个清单很糟糕

1.他的力气没使对地方

我们要遵循的一个准则就是如果你要优化代码时,应该先找出瓶颈在哪。然而Silverton先生的力气没有用对地方。我认为60%的优化是基于清楚 理解SQL和数据库基础的。你需要知道join和子查询的区别,列索引,以及如何将数据规范化等等。另外的35%的优化是需要清楚数据库选择时的性能表 现,例如COUNT(*)可能很快也可能很慢,要看你选用什么数据库引擎。还有一些其他要考虑的因素,例如数据库在什么时候不用缓存,什么时候存在硬盘上 而不存在内存中,什么时候数据库创建临时表等等。剩下的5%就很少会有人碰到了,但Silverton先生恰好在这上面花了大量的时间。我从来就没用过 SQL_SAMLL_RESULT。

2.很好的问题,但是很糟糕的解决方法

Silverton先生提出了一些很好的问题。MySQL针对长度可变的列如TEXT或BLOB,将会使用动态行格式(dynamic row format),这意味着排序将在硬盘上进行。我们的方法不是要回避这些数据类型,而是将这些数据类型从原来的表中分离开,放入另外一个表中。下面的 schema可以说明这个想法:

1 2 3 4 5 6 7 8 9 10 11 12 CREATE TABLE posts (      id int UNSIGNED NOT NULL AUTO_INCREMENT,      author_id int UNSIGNED NOT NULL,      created timestamp NOT NULL,      PRIMARY KEY(id) );   CREATE TABLE posts_data (      post_id int UNSIGNED NOT NULL.      body text,      PRIMARY KEY(post_id) );

3. 有点匪夷所思……

他的许多建议都是让人非常吃惊的,譬如“移除不必要的括号”。你这样写SELECT * FROM posts WHERE (author_id = 5 AND published = 1),还是这样写SELECT * FROM posts WHERE author_id = 5 AND published = 1 ,都不重要。任何比较好的DBMS都会自动进行识别做出处理。这种细节就好像C语言中是i++快些还是++i快些。真的,如果你把精力都花在这上面了,那就不用写代码了。

我的列表

看看我的列表是不是更好吧。我先从最普遍的开始。

1.建立基准,建立基准,建立基准!

如果需要做决定的话,我们需要数据说话。什么样的查询是最糟的?瓶颈在哪?我什么情况下会写出糟糕的查询?基准测试可以让你模拟高压情况,然后借助 性能测评工具,可以让你发现数据库配置中的错误。这样的工具有supersmack, ab, SysBench。这些工具可以直接测试你的数据库(譬如supersmack),或者模拟网络流量(譬如ab)。

2.性能测试,性能测试,性能测试!

那么,当你能够建立一些高压情况之后,你需要找出配置中的错误。这就是性能测评工具可以帮你做的了。它可以帮你发现配置中的瓶颈,不论是在内存中,CPU中,网络中,硬盘I/O,或者是以上皆有。

你要做的第一件事就是开启慢查询日志(slow query log),装上mtop。这样你就能获取那些恶意的入侵者的信息了。有需要运行10秒的查询语句正在破坏你的应用程序吗?这些家伙会展示给你看他的查询语句是怎么写的。

在你发现那些很慢的查询语句后,你需要用MySQL自带的工具,如EXPLAIN,SHOW STATUS,SHOW PROCESSLIST。它们会告诉你资源都消耗在哪了,查询语句的缺陷在哪,譬如一个有三次join子查询的查询语句是否在内存中进行排序,还是在硬盘 上进行。当然你也应该使用测评工具如top,procinfo,vmstat等等获取更多系统性能信息。

3.减小你的schema

在你开始写查询语句之前,你需要设计schema。记住将一个表装入内存所需要的空间大概是行数*一行的大小。除非你觉得世界上的每个人都会在你的 网站注册2兆8000亿次的话,否则你不需要采用BITINT作为你的user_id。同样的,如果一个文本列是固定大小的话(譬如US邮编,通常 是”XXXXX-XXXX”的形式),采用VARCHAR的话会给每行增加多余的字节。

有些人对数据库规范化不以为意,他们说这样会形成相当复杂的schema。然而适当的规范化会减少化冗余数据。(适当的规范化)就意味着牺牲少许性 能,换取整体上更少的footprint,这种性能换取内存在计算机科学中是很常见的。最好的方法是IMO,就是开始先规范化,之后如果性能需要的话,再 反规范化。你的数据库将会更逻辑化,你也不用过早的进行优化。(译者注,这一段我不是很理解,可能翻译错了,欢迎纠正。)

4.拆分你的表

通常有些表只有一些列你是经常需要更新的。例如对于一个博客,你需要在许多不同地方显示标题(如最近的文章列表),只在某个特定页显示概要或者全文。水平垂直拆分是很有帮助的:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 CREATE TABLE posts (      id int UNSIGNED NOT NULL AUTO_INCREMENT,      author_id int UNSIGNED NOT NULL,      title var char( 128 ),      created timestamp NOT NULL,      PRIMARY KEY(id) );   CREATE TABLE posts_data (      post_id int UNSIGNED NOT NULL,      teaser text,      body text,      PRIMARY KEY(post_id) );

上面的schema是对读数据进行的优化。经常要访问的数据存在一个表中,那些不经常访问的数据放在另一个。被拆分后,不经常访问的数据占据更少的 内存。你也可以优化写数据,经常更新的数据放在一个表,不经常更新的放在另一个表。这可以使缓存更高效,因为MySQL不需要让没有更新过的数据移出缓 存。

5.不要过度使用artificial primary key

artificial primary key非常棒,因为他们使得schema更少的变化。如果我们将地理信息存在以美国邮编为基础的表中,如果邮编系统突然改变了,那我们就会有大麻烦了。另 一方面,采用natural key有时候也很棒,譬如我们需要join多对多的关系表时,我们不应该这样:

1 2 3 4 5 6 7 CREATE TABLE posts_tags (      relation_id int UNSIGNED NOT NULL AUTO_INCREMENT,      post_id int UNSIGNED NOT NULL,      tag_id int UNSIGNED NOT NULL,      PRIMARY KEY(relation_id),      UNIQUE INDEX(post_id, tag_id) );

artificial key完全是多余的,而且post-tag关系的数量将会受到整形数据的系统最大值的限制。

1 2 3 4 5 CREATE TABLE posts_tags (      post_id int UNSIGNED NOT NULL,      tag_id int UNSIGNED NOT NULL,      PRIMARY KEY(post_id, tag_id) );

6.学习索引

你选择的索引的好坏很重要,不好的话可能破坏数据库。对那些还没有在数据库学习很深入的人来说,索引可以看作是就是hash排序。例如如果我们用查询语句SELECT * FROM users WHERE last_name = ‘Goldstein’,而last_name没有索引的话,那么DBMS将会查询每一行,看看是否等于“Goldstein”。索引通常是B-tree(还有其他的类型),可以加快比较的速度。

你需要给你要select,group,order,join的列加上索引。显然每个索引所需的空间正比于表的行数,所以越多的索引将会占用更多的 内存。而且写数据时,索引也会有影响,因为每次写数据时都会更新对应的索引。你需要取一个平衡点,取决每个系统和实施代码的需要。

7.SQL不是C

C是经典的过程语言,对于一个程序员来说,C语言也是个陷阱,使你错误的以为SQL也是一种过程语言(当然SQL也不是功能语言也不是面向对象的)。你不要想象对数据进行操作,而是要想象有一组数据,以及它们之间的关系。经常使用子查询时会出现错误的用法。

1 2 3 4 5 6 SELECT a.id,      (SELECT MAX(created)      FROM posts      WHERE author_id = a.id) AS latest_post FROM authors a

因为这个子查询是耦合的,子查询要使用外部查询的信息,我们应该使用join来代替。

1 2 3 4 5 SELECT a.id, MAX(p.created) AS latest_post FROM authors a INNER JOIN posts p      ON (a.id = p.author_id) GROUP BY a.id

8.理解你的引擎

MySQL有两种存储引擎:MyISAM和InnoDB。它们分别有自己的性能特点和考虑因素。总体来讲,MyISAM适合读数据很多的情况,InnoDB适合写数据很多的情况,但也有很多情况下正好相反。最大的区别是它们如何处理COUNT函数。

MyISAM缓存有表meta-data,如行数。这就意味着,COUNT(*)对于一个结构很好的查询是不需要消耗多少资源的。然后对于 InnoDB来说,就没有这种缓存。举个例子,我们要对一个查询来分页,假设你有这样一个语句SELECT * FROM users LIMIT 5,10,而运行SELECT COUNT(*) FROM users LIMIT 5,10 时,对于MyISAM很快完成,而对InnoDB就需要和第一个语句相同的时间。MySQL有个SQL_CALC_FOUND_ROWS选项,可以告诉 InnoDB运行查询语句时就计算行数,之后再从SELECT FOUND_ROWS()来获取。这是MySQL特有的。但使用InnoDB有时候是非常必要的,你可以获得一些功能(如行锁定,stord procedure等)。

9.MySQL特定的快捷键

MySQL提供了许多扩展,方便使用。譬如INSERT … SELECT, INSERT … ON DUPLICATE KEY UPDATE, 以及REPLACE。

我能用到它们时是毫不犹豫的,因为它们很方便,能在许多情况下发挥不错的效果。但是MySQL也有一些危险的关键字,应该少用。例如INSERT DELAYED,它告诉MySQL不需要立即插入数据(例如在写日志的时候)。但问题是如果在很高数据量的情况下,插入可能会被无限期延迟,导致插入队列 爆满。你也可以使用MySQL的索引提示来指出哪些索引是需要使用的。MySQL大部分时间运行是不错的,但如果schema设计不好的话或语句写得不好 的话,MySQL的表现可能很糟糕。

10.到这里为止吧

最后,如果你关心MySQL性能优化的话,请阅读Peter Zaitsev的关于MySQL性能的博客,他写了许多关于数据库管理和优化的博客。

原文链接:20bits.com   编译:伯乐在线?- 唐小娟