<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>痞子的微笑</title>
	<atom:link href="http://www.leadhoo.com/feed" rel="self" type="application/rss+xml" />
	<link>http://www.leadhoo.com</link>
	<description>xxxxxx</description>
	<lastBuildDate>Tue, 17 Jan 2012 16:44:46 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>2012-01-17</title>
		<link>http://www.leadhoo.com/2012/01/16/103.html</link>
		<comments>http://www.leadhoo.com/2012/01/16/103.html#comments</comments>
		<pubDate>Mon, 16 Jan 2012 19:39:22 +0000</pubDate>
		<dc:creator>leadhoo</dc:creator>
				<category><![CDATA[音乐视频]]></category>

		<guid isPermaLink="false">http://www.leadhoo.com/?p=103</guid>
		<description><![CDATA[<object width="257" height="33" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="src" value="http://www.xiami.com/widget/0_1770544714/singlePlayer.swf" /><param name="wmode" value="transparent" /><embed width="257" height="33" type="application/x-shockwave-flash" src="http://www.xiami.com/widget/0_1770544714/singlePlayer.swf" wmode="transparent" /></object>

<img src="http://m3.img.libdd.com/farm3/113/73CECFBCCB8154024CB0F1A3CFF8DA71_500_571.jpg" alt="" />

<object width="257" height="33" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="src" value="http://www.xiami.com/widget/0_1769979538/singlePlayer.swf" /><param name="wmode" value="transparent" /><embed width="257" height="33" type="application/x-shockwave-flash" src="http://www.xiami.com/widget/0_1769979538/singlePlayer.swf" wmode="transparent" /></object>

<img src="http://m1.img.libdd.com/farm3/240/72160CB2590723533B263455796808F0_415_528.jpg" alt="" />

<object width="257" height="33" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="src" value="http://www.xiami.com/widget/0_1770237535/singlePlayer.swf" /><param name="wmode" value="transparent" /><embed width="257" height="33" type="application/x-shockwave-flash" src="http://www.xiami.com/widget/0_1770237535/singlePlayer.swf" wmode="transparent" /></object>

<img src="http://m2.img.libdd.com/farm3/162/9ED1884F045769C0BCD543DD864F06A2_500_332.jpg" alt="" />
<object width="257" height="33" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="src" value="http://www.xiami.com/widget/0_1769921686/singlePlayer.swf" /><param name="wmode" value="transparent" /><embed width="257" height="33" type="application/x-shockwave-flash" src="http://www.xiami.com/widget/0_1769921686/singlePlayer.swf" wmode="transparent" /></object>]]></description>
		<wfw:commentRss>http://www.leadhoo.com/2012/01/16/103.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Xtrabackup体验【原创】</title>
		<link>http://www.leadhoo.com/2012/01/16/98.html</link>
		<comments>http://www.leadhoo.com/2012/01/16/98.html#comments</comments>
		<pubDate>Mon, 16 Jan 2012 18:03:54 +0000</pubDate>
		<dc:creator>leadhoo</dc:creator>
				<category><![CDATA[mysql]]></category>
		<category><![CDATA[Xtrabackup]]></category>

		<guid isPermaLink="false">http://www.leadhoo.com/?p=98</guid>
		<description><![CDATA[XtraBackup工具的主要特点有：
<ul>
	<li>支持在线(无需加锁)备份InnoDB/XtraDB引擎；对于MyISAM引擎，则需要加一个只读锁，当然了，也可以不加</li>
	<li>支持数据流压缩备份，支持磁带、异地备份</li>
	<li>支持增备</li>
</ul>
XtraBackup软件主要有2个工具：
<ul>
	<li><strong>xtrabackup</strong> – 二进制文件，用于拷贝InnoDB/XtraDB表空间文件</li>
	<li><strong>innobackupex</strong> – 封装后的脚本，基于innobackup Perl 脚本，由Oracle/InnoDB基于GPL协议分发。该脚本用于接收各种参数，然后调用xtrabackup进行实际工作。该脚本提供了各种函数，用于备份MySQL下的InnoDB、XtraDB、MyISAM等多种引擎。</li>
</ul>
现在已经更新1.6    <a href="http://www.percona.com/downloads/XtraBackup/">下载的话往死点我</a>

<strong>配置：</strong>

--defaults-file=#
默认配置文件的路径，如果不该参数，xtrabackup将从依次从以下位置查找配置文件/etc/my.cnf、/etc/mysql/my.cnf、/usr/local/etc/my.cnf、~/.my.cnf，并读取配置文件中的[mysqld]和[xtrabackup]配置段。[mysqld]中只需要指定datadir、innodb_data_home_dir、innodb_data_file_path、innodb_log_group_home_dir、innodb_log_files_in_group、innodb_log_file_size6个参数即可让xtrabackup正常工作

常用参数：

–defaults-extra-file=#
如果使用了该参数，在读取了全局配置文件之后，会再读取这里指定的配置文件

–target-dir=name
备份文件的存放目录路径

–backup实施备份到 target-dir

–prepare
实施对备份文件迚行恢复前的准备（生成 InnoDB log file）

–print-param
打印备份或恢复时需要的参数

–use-memory=#
该参数在 prepare 的时候使用，控制 prepare 时 innodb 实例使用的内存量

–suspend-at-end
在 target-dir 目录下产生一个 xtrabackup_suspended 文件，将 xtrabackup 进程挂起，不停地将数据文件的变化同步到备份文件，直到用户手工删除 xtrabackup_suspended 文件

–throttle=#
每秒IO次数,限制 backup 时使用的 I/O 操作量，使备份对数据库正常业务的影响最小化

–log-stream
该参数在 backup 的时候使用，将 xtrabackup_logfile 的内容输出到标准输出，使用该参数时会自动使用–suspend-at-end 参数，innobackupex 脚本的–stream 模式会使用该参数。

–incremental-lsn=name
增量备份时只拷贝 LSN比该参数指定值新的 ibd pages，前次备份到了哪个 LSN可以看前次备份集的xtrabackup_checkpoints 文件

–incremental-basedir=name
该参数在 backup 的时候使用，备份比该参数指定位置的备份集新的 idb pages

–incremental-dir=name
该参数在 prepare 的时候使用，指定 prepare 时产生的.delta 文件和日志文件的存放路径

–tables=name
在备份 file-per-table 类型的数据文件时使用，使用正则表达式指定需要备份的 innodb 表

–datadir=name
MySQL 数据库的数据文件目录。

配置：

执行 ：xtrabackup --datadir=/home/mysql/ --print-param

datadir = "/home/mysql/"
tmpdir = "/tmp"
innodb_data_home_dir = "/home/mysql"
innodb_data_file_path = "ibdata1:50M;ibdata2:50M:autoextend"
innodb_log_group_home_dir = "/home/mysql"
innodb_log_files_in_group = 2
innodb_log_file_size = 5242880
innodb_flush_method = "O_DIRECT

把这些参数写到my.cnf 的[xtrabackup]标签里

备份恢复：

1 xtrabackup --defaults-file=/etc/my.cnf --backup --target-dir=/home/hot/

备份后hot目录多出来 gg  ibdata1  ibdata2  xtrabackup_checkpoints  xtrabackup_logfile

2  cp db.opt  ggtable.frm  /home/hot/gg/

xtrabackup只备份InnoDB数据文件，表结构是不备份的，所以恢复的时候，你必须有对应表结构文件(.frm)

3  mysqladmin shutdown ; rm -rf  /home/mysql/ib*  /home/mysql/gg

停库，模拟丢失文件

4  xtrabackup --defaults-file=/etc/my.cnf --prepare --target-dir=/home/hot/  恢复

查看hot目录

gg  ibdata1  ibdata2  xtrabackup_binlog_pos_innodb  xtrabackup_checkpoints  xtrabackup_logfile

多了一个xtrabackup_binlog_pos_innodb

<span style="color: #ff0000;">注意这一次 prepare 将 xtrabackup_logfile 文件中记录的日志数据写入数据文件</span>

再次执行 xtrabackup --defaults-file=/etc/my.cnf --prepare --target-dir=/home/hot/

查看hot目录

gg  ibdata1  ibdata2  ib_logfile0  ib_logfile1  xtrabackup_binlog_pos_innodb  xtrabackup_checkpoints  xtrabackup_logfile

这次多了ib_logfile0  ib_logfile1 日志文件

<span style="color: #ff0000;">注意第二次 prepare 产生 ib_logfile*</span>

5 cp -r ib* gg/ /home/mysql ; chown mysql:mysql /home/mysql/ -R    把生成的恢复文件还原到原来的位置，有点像oracle的restore

6 service mysql start  查看表的状态

&#160;

mysql&#62; select * from ggtable;
+---------+
&#124; id           &#124;
+---------+
&#124;1222222&#124;
&#124;1222222&#124;
&#124;1222222&#124;
&#124;1222222&#124;
+---------+

OK 还原成功

&#160;

增量备份优点：

1、数据库太大没有足够的空间全量备份，作增量备份有效节省空间，且效率高。

2、支持热备份。备份过程不锁表，不受时间限制，不影响用户使用。

3、每日备份只产生少量数据，远程备份传输更方便。同时节省空间。

4、备份恢复基于文件操作，降低直接对数据库操作风险。

5、备份效率更高，恢复效率更高。

备份恢复

1  xtrabackup --defaults-file=/etc/my.cnf --backup --target-dir=/home/hot/

先做一次全量备份，因为后面的增量备份要以此为基础

2 xtrabackup --defaults=/etc/my.cnf  --backup --target-dir=/home/hot/zb/ --incremental-basedir=/home/hot/

以此全量备份为基础进行增量备份

zb目录下 gg  ibdata1.delta  ibdata1.meta  ibdata2.delta  ibdata2.meta  xtrabackup_checkpoints  xtrabackup_logfile

在增量备份的目录下，数据文件都是以.delta结尾的。增量备份只备份上一次全量备份后被修改过的page，所以增量备份只暂用较少的空间

增量备份可以在增量备份的基础上增量  注：/home/hot/zb/是每次都需修改的。比如第二次增量就改成/home/hot/zb2/，当然可以写个脚

本进行自动备份

3  拷贝备份frm 停库，模拟删除文件

4  依次执行恢复

xtrabackup --defaults-file=/etc/my.cnf --prepare --target-dir=/home/hot/

xtrabackup --defaults-file=/etc/my.cnf --prepare --target-dir=/<span style="color: #ff0000;">home/hot/</span> --incremental-dir=<span style="color: #ff0000;">/home/hot/zb/</span>

注意这里的目录，跟备份的时候是相反的

xtrabackup --defaults-file=/etc/my.cnf --prepare --target-dir=/home/hot/

5  cp -r ib* gg/ /home/mysql ; chown mysql:mysql /home/mysql/ -R

6 启动数据库 查看表状态

&#160;

mysql&#62; select * from ggtable;
+---------+
&#124; id            &#124;
+---------+
&#124;1222222&#124;
&#124;1222222&#124;
&#124;1222222&#124;
&#124;1222222&#124;
&#124;1333333&#124;
&#124;1444444&#124;
+---------+

OK 恢复正常

innobackupex  备份恢复

1  innobackupex --defaults-file=/etc/my.cnf --user=root --socket=/home/mysql/mysql.sock --databases='gg' --no-lock /home/hot/ --stream=tar --ibbackup=/root/xtrabackup-1.6.4/bin/xtrabackup 2&#62; /tmp/innobackup.log 1&#62; /home/backup.tar

打包备份

innobackupex --defaults-file=/etc/my.cnf --user=root --socket=/home/mysql/mysql.sock --databases='gg' --no-lock /home/hot/ --ibbackup=/root/xtrabackup-1.6.4/bin/xtrabackup

不打包备份

2 模拟删除数据库 shutdown

drop database gg ;    rm -rf ib*    mysqladmin shutdown

3 恢复

解压缩过程，需要使用tar ixvf 解压对应的文件后，注意参数 –i必须加入

tar ixvf backup.tar

进入该目录 执行

innobackupex --defaults-file=/etc/my.cnf  --no-lock --ibbackup=/root/xtrabackup-1.6.4/bin/xtrabackup --apply-log .

查看hot 目录

backup-my.cnf  gg  ibdata1  ibdata2  ib_logfile0  ib_logfile1  xtrabackup_binlog_pos_innodb  xtrabackup_checkpoints  xtrabackup_logfile

innobackupex --defaults-file=/etc/my.cnf  --no-lock --ibbackup=/root/xtrabackup-1.6.4/bin/xtrabackup --apply-log .

恢复    产生日志文件

把文件拷贝到目录里  修改权限就可以恢复了

innobackupex 增备：

1 innobackupex --defaults-file=/etc/my.cnf --user=root --socket=/home/mysql/mysql.sock --databases='gg' --no-lock /home/hot/ --ibbackup=/root/xtrabackup-1.6.4/bin/xtrabackup

生成全备

2  产生增备

innobackupex --defaults-file=/etc/my.cnf --user=root --socket=/home/mysql/mysql.sock --databases='gg' --no-lock --ibbackup=/root/xtrabackup-1.6.4/bin/xtrabackup --incremental /home/hot/zb/ --incremental-basedir=/home/hot/2011-08-22_23-27-02

3  在全备份目录执行

innobackupex --defaults-file=/etc/my.cnf  --no-lock --ibbackup=/root/xtrabackup-1.6.4/bin/xtrabackup --apply-log .

再在增备目录执行

innobackupex --defaults-file=/etc/my.cnf --no-lock --ibbackup=/root/xtrabackup-1.6.4/bin/xtrabackup --apply-log /home/hot/ --incremental-dir=/home/hot/zb/2011-08-22_23-30-34/

4  拷贝生成目录  修改权限即可

&#160;]]></description>
		<wfw:commentRss>http://www.leadhoo.com/2012/01/16/98.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>MySQL InnoDB性能调整的一点实践</title>
		<link>http://www.leadhoo.com/2012/01/16/95.html</link>
		<comments>http://www.leadhoo.com/2012/01/16/95.html#comments</comments>
		<pubDate>Mon, 16 Jan 2012 13:01:08 +0000</pubDate>
		<dc:creator>leadhoo</dc:creator>
				<category><![CDATA[mysql]]></category>

		<guid isPermaLink="false">http://www.leadhoo.com/?p=95</guid>
		<description><![CDATA[转载：不知名作者

因为JavaEye网站的数据库服务器搬家的时候被托管商的工作人员狠狠摔了一下，所以硬盘整个挂掉了，我重新安装数据库服务器的时候，顺手下载了Percona patch过的MySQL5.0版本，使用MySQL自带的heavy innodb配置文件改了改，作为my.cnf启动运行。数据库服务器的物理内存有6GB，其中有4GB可以被MySQL使用，my.cnf相关配置参数如下：
<blockquote>memlock
innodb_buffer_pool_size = 2G
innodb_log_file_size = 256M
innodb_log_files_in_group = 3
innodb_flush_method=fdatasync 默认设置

memlock
innodb_buffer_pool_size = 2G
innodb_log_file_size = 256M
innodb_log_files_in_group = 3
#innodb_flush_method=fdatasync 默认设置</blockquote>
buffer pool越大越好，官方推荐使用物理内存的50%－80%；log_file_size也是越大越好，官方推荐log size加起来要达到buffer pool的25%－100%。使用memlock可以避免MySQL内存进入swap，这些都是默认的推荐配置了，没有什么可以质疑的地方。但是数据库服务器启动以后，运行不太正常。表现出来的现象是：

1、操作系统内存Disk Cache使用了2.7GB
2、操作系统swap空间使用了200MB左右，一直不停进行swap in/swap out
3、CPU的IO Wait偏高，平均在10%以上

这个现象看起来非常怪异和矛盾。IO Wait偏高显然是因为频繁的使用swap进行内存换页引起的，但问题是物理内存非常空闲，操作系统明明有2.7GB空闲物理内存做Disk Cache，怎么不吐出来一点，非要去用swap呢？

想来想去只有一种可能性，就是MySQL存在非常巨大的，频繁的文件读写操作，迫使操作系统不得不分配了2.7GB的Disk Cache，从而造成了物理内存的不足，被迫使用swap。而可能造成巨大文件读写操作的就是buffer pool的flush和log file的flush操作了。因此配置文件做如下修改：
<blockquote>memlock
innodb_buffer_pool_size = 2G
innodb_log_file_size = 64M
innodb_log_files_in_group = 2
innodb_flush_method=O_DIRECT

memlock
innodb_buffer_pool_size = 2G
innodb_log_file_size = 64M
innodb_log_files_in_group = 2
innodb_flush_method=O_DIRECT</blockquote>
减少log file size和数量，使用O_DIRECT。重启以后，数据库服务器恢复正常。操作系统Disk Cache下降到900MB，Swap使用了200多MB，但是不再进行swap in/swap out操作，CPU的IO Wait下降到2-3%。

通过这次MySQL InnoDB的调优经历，发现一些和MySQL官方推荐配置不符合的疑惑之处，值得思考和探索：

<strong>1、innodb_flush_method究竟应不应该使用O_DIRECT？</strong>

所有MySQL调优的建议都说，如果硬件没有预读功能，那么使用O_DIRECT将极大降低InnoDB的性能，因为O_DIRECT跳过了操作系统的文件系统Disk Cache，让MySQL直接读写磁盘了。

但是在我的实践中来看，如果不使用O_DIRECT，操作系统被迫开辟大量的Disk Cache用于innodb的读写缓存，不但没有提高读写性能，反而造成读写性能急剧下降。而且buffer pool的数据缓存和操作系统Disk Cache缓存造成了Double buffer的浪费，显然从我这个实践来看，浪费得非常厉害。

说O_DIRECT造成MySQL直接读写磁盘造成得性能下降问题，我觉得完全是杞人忧天。因为从JavaEye的数据库监测来看，Innodb的buffer pool命中率非常高，有98%以上，真正的磁盘操作是微乎其微的。为了1%的磁盘操作能够得到Disk Cache，而浪费了98%的double buffer内存空间，无论从性能上看，还是从内存资源的消耗来看，都是非常不明智的。

<strong>2、innodb_log_file_size究竟应该大一点，还是小一点？</strong>

所有MySQL调优建议都说，innodb_log_file_size要越大越好，避免无谓的buffer pool的flush操作。

但是在我的实践中来看，innodb_log_file_size开得太大，会明显增加innodb的log写入操作，而且会造成操作系统需要更多的Disk Cache开销。

因此从我的经验来看，innodb_flush_method=O_DIRECT是必须的，而innodb_log_file_size也不宜太大。]]></description>
		<wfw:commentRss>http://www.leadhoo.com/2012/01/16/95.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>innodb_flush_method 与 Linux File I/O</title>
		<link>http://www.leadhoo.com/2012/01/16/88.html</link>
		<comments>http://www.leadhoo.com/2012/01/16/88.html#comments</comments>
		<pubDate>Mon, 16 Jan 2012 12:53:08 +0000</pubDate>
		<dc:creator>leadhoo</dc:creator>
				<category><![CDATA[mysql]]></category>

		<guid isPermaLink="false">http://www.leadhoo.com/?p=88</guid>
		<description><![CDATA[<strong>innodb_flush_method</strong>： 设置InnoDB同步IO的方式：
1) Default – 使用fsync（）。
2) O_SYNC 以sync模式打开文件，通常比较慢。
3) O_DIRECT，在Linux上使用Direct IO。可以显著提高速度，特别是在RAID系统上。避免额外的数据复制和double buffering（mysql buffering 和OS buffering）。
<div></div>
陶方在《<a href="http://rdc.taobao.com/blog/dba/html/296_innodb_flush_method_performance.html">innodb_flush_method带来的性能影响</a>》中从实验角度比较了fdatasync，O_DSYNC和O_DIRECT在性能上的差异。本文将试图从Linux/Unix"文件I/O"（unbuffered I/O）的角度来解释innodb_flush_method是如何影响MySQL的I/O。<sup>【附录1】</sup>

innodb_flush_log_at_trx_commit参数确定日志文件<strong>何时</strong>write、flush。innodb_flush_method则确定日志及数据文件<strong>如何</strong>write、flush。在Linux下，innodb_flush_method可以取如下值：fdatasync, O_DSYNC, O_DIRECT，那这三个值分别是如何影响文件写入的？首先我们需要先来了解Linux的文件I/O是如何工作的。

先来看看Linux/Unix文件I/O的一个典型例子：（Linux 2.6.24测试，gcc编译）
<blockquote>
<pre>/**
	A test about syscall of File I/O
	Author:supu@TaobaoDBA
	supu@taobao.com http://orczhou.com http://www.taobaodba.com
*/

#include   "stdlib.h"           /* for exit */
#include   "unistd.h"           /* for write fdatasync*/
#include    "fcntl.h"           /* for open  */
int main(void){
	int fd;
	if((fd=open("/home/zzx/test.file",O_WRONLY&#124;O_APPEND&#124;O_DSYNC))&#60;0){
		exit(1);
        }
        char buff[]="abcdef";
        if(write(fd,buff,6)!= 6){
                exit(2);
        }
        if(fdatasync(fd)==-1){
                exit(3);
        }
        exit(0);
}</pre>
</blockquote>
程序描述了一般的文件I/O操作的三个过程open、write、fdatasync，分别是打开文件、写文件、flush操作（将文件缓存刷到磁盘上）。

<span style="font-size: medium;"><strong>一、Open阶段</strong></span>
<blockquote>open("test.file",O_WRONLY&#124;O_APPDENT&#124;O_SYNC))</blockquote>
系统调用Open会为该进程一个文件描述符fd<sup>【附录2】</sup>。这里使用了O_WRONLY&#124;O_APPDENT&#124;O_SYNC打开文件:
<ol>
	<li>O_WRONLY表示我们以"写"的方式打开，告诉内核我们需要向文件中写入数据；</li>
	<li>O_APPDENT告诉内核以"追加"的方式写文件；</li>
	<li>O_DSYNC告诉内核，当向文件写入数据的时候，只有当数据写到了磁盘时，写入操作才算完成（write才返回成功）。和O_DSYNC同类的文件标志，还有O_SYNC,O_RSYNC，O_DIRECT。
<ul>
	<li>O_SYNC比O_DSYNC更严格，不仅要求数据已经写到了磁盘，而且对应的数据文件的属性（例如文件长度等）也需要更新完成才算write操作成功。可见O_SYNC较之O_DSYNC要多做一些操作。</li>
	<li>O_RSYNC表示文件读取时，该文件的OS cache必须已经全部flush到磁盘了<sup>【附录3】</sup>；</li>
	<li>如果使用O_DIRECT打开文件，则读/写操作都会跳过OS cache，直接在device（disk）上读/写。因为没有了OS cache，所以会O_DIRECT降低文件的顺序读写的效率。</li>
</ul>
</li>
</ol>
<span style="font-size: medium;"><strong>二、Write阶段</strong></span>
<blockquote>write(fd,buf,6)</blockquote>
在使用open打开文件获得文件描述符之后，我们就可以调用write函数来写入数据了，write会根据前面的open参数不同，而表现不同。

<span style="font-size: medium;"><strong>三、Flush阶段</strong></span>
<blockquote>fdatasync(fd) == -1</blockquote>
write操作后，我们还调用了fdatasync来确保文件数据flush到了disk上。fdatasync返回成功后，那么可以认为数据已经写到了磁盘上。像这样的flush的函数还有fsync、sync。
<ol>
	<li>Fsync和fdatasync的区别等同于O_SYNC和O_DSYNC的区别。</li>
	<li>Sync函数表示将文件在OS cache中的数据排入写队列，并不确认是否真的写磁盘了，所以sync并不可以靠。</li>
</ol>
忽略文件打开的过程，通常我们会说“写文件”有两个阶段，一个是调用write我们称为写数据阶段（其实是受open的参数影响），调用fsync（或者fdatasync）我们称为flush阶段。

回到MySQL，参数Innodb_flush_method(Linux)可以设定为：Fdatasync、O_DSYNC、O_DIRECT。我们看看这个三个参数是如何影响程序MySQL对日志和数据文件的操作：
<table border="1" cellspacing="0" cellpadding="0">
<tbody id="mytable">
<tr>
<td valign="top" width="114"></td>
<td valign="top" width="114">Open log</td>
<td valign="top" width="114">Flush log</td>
<td valign="top" width="114">Open datafile</td>
<td valign="top" width="114">Flush data</td>
</tr>
<tr>
<td valign="top" width="114">Fdatasync</td>
<td valign="top" width="114"></td>
<td valign="top" width="114"><strong>fsync()</strong></td>
<td valign="top" width="114"></td>
<td valign="top" width="114"><strong>fsync()</strong></td>
</tr>
<tr>
<td valign="top" width="114">O_DSYNC</td>
<td valign="top" width="114"><strong>O_SYNC</strong></td>
<td valign="top" width="114"></td>
<td valign="top" width="114"></td>
<td valign="top" width="114"><strong>fsync()</strong></td>
</tr>
<tr>
<td valign="top" width="114">O_DIRECT</td>
<td valign="top" width="114"></td>
<td valign="top" width="114"><strong>fsync()</strong></td>
<td valign="top" width="114"><strong>O_DIRECT</strong></td>
<td valign="top" width="114"><strong>Fsync()</strong></td>
</tr>
</tbody>
</table>
fdatasync被认为是安全的，因为在MySQL总会调用fsync来flush数据。使用O_DSYNC是有些风险的，有些OS会忽略该参数<strong>O_SYNC</strong>。

我们看到O_DIRECT和fdatasync和很类似，但是它会使用O_DIRECT来打开数据文件。有数据表明，如果是大量随机写入操作，O_DIRECT会提升效率。但是顺序写入和读取效率都会降低。所以使用O_DIRECT需要谨慎。]]></description>
		<wfw:commentRss>http://www.leadhoo.com/2012/01/16/88.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>泡妞神器！癞蛤蟆也能吃上天鹅肉</title>
		<link>http://www.leadhoo.com/2012/01/16/86.html</link>
		<comments>http://www.leadhoo.com/2012/01/16/86.html#comments</comments>
		<pubDate>Mon, 16 Jan 2012 05:09:59 +0000</pubDate>
		<dc:creator>leadhoo</dc:creator>
				<category><![CDATA[猎奇搞笑]]></category>

		<guid isPermaLink="false">http://www.leadhoo.com/?p=86</guid>
		<description><![CDATA[<embed src="http://www.tudou.com/v/5F9o1euBBgA/&#038;resourceId=0_05_02_99/v.swf" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" wmode="opaque" width="480" height="400"></embed>]]></description>
		<wfw:commentRss>http://www.leadhoo.com/2012/01/16/86.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>爱情公寓版《Destiny》，好棒的剪辑，希望2012有个好开始</title>
		<link>http://www.leadhoo.com/2012/01/15/80.html</link>
		<comments>http://www.leadhoo.com/2012/01/15/80.html#comments</comments>
		<pubDate>Sun, 15 Jan 2012 19:28:09 +0000</pubDate>
		<dc:creator>leadhoo</dc:creator>
				<category><![CDATA[猎奇搞笑]]></category>

		<guid isPermaLink="false">http://www.leadhoo.com/?p=80</guid>
		<description><![CDATA[<embed src="http://www.tudou.com/v/4mAue2tqFJo/&#038;resourceId=0_05_05_99/v.swf" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" wmode="opaque" width="480" height="400"></embed>]]></description>
		<wfw:commentRss>http://www.leadhoo.com/2012/01/15/80.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>美女教你如何追求女孩！</title>
		<link>http://www.leadhoo.com/2012/01/15/78.html</link>
		<comments>http://www.leadhoo.com/2012/01/15/78.html#comments</comments>
		<pubDate>Sun, 15 Jan 2012 19:23:26 +0000</pubDate>
		<dc:creator>leadhoo</dc:creator>
				<category><![CDATA[猎奇搞笑]]></category>

		<guid isPermaLink="false">http://www.leadhoo.com/?p=78</guid>
		<description><![CDATA[<embed src="http://www.tudou.com/v/F7SErFqE54c/&#038;resourceId=0_05_05_99/v.swf" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" wmode="opaque" width="480" height="400"></embed>]]></description>
		<wfw:commentRss>http://www.leadhoo.com/2012/01/15/78.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>没见过这么穿胸罩的美女</title>
		<link>http://www.leadhoo.com/2012/01/15/76.html</link>
		<comments>http://www.leadhoo.com/2012/01/15/76.html#comments</comments>
		<pubDate>Sun, 15 Jan 2012 19:18:46 +0000</pubDate>
		<dc:creator>leadhoo</dc:creator>
				<category><![CDATA[猎奇搞笑]]></category>

		<guid isPermaLink="false">http://www.leadhoo.com/?p=76</guid>
		<description><![CDATA[<embed src="http://www.tudou.com/v/OP7kXtviglA/&#038;resourceId=0_05_05_99/v.swf" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" wmode="opaque" width="480" height="400"></embed>]]></description>
		<wfw:commentRss>http://www.leadhoo.com/2012/01/15/76.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>老师，为了及格，我什么都肯做</title>
		<link>http://www.leadhoo.com/2012/01/15/73.html</link>
		<comments>http://www.leadhoo.com/2012/01/15/73.html#comments</comments>
		<pubDate>Sun, 15 Jan 2012 19:14:18 +0000</pubDate>
		<dc:creator>leadhoo</dc:creator>
				<category><![CDATA[猎奇搞笑]]></category>

		<guid isPermaLink="false">http://www.leadhoo.com/?p=73</guid>
		<description><![CDATA[大学男教授的房间里来了女大学生：“老师，求你了，这次的考试让我及格吧。为了及格，我什么都肯做！”
教授盯着着女生的眼睛：“真的什么都肯做？”
“是……是的……”
男教授凑到女学生的耳根，小声道：“我求求你敢快去学习吧！”]]></description>
		<wfw:commentRss>http://www.leadhoo.com/2012/01/15/73.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>拥有理想的功夫熊猫你们是困不住滴</title>
		<link>http://www.leadhoo.com/2012/01/15/71.html</link>
		<comments>http://www.leadhoo.com/2012/01/15/71.html#comments</comments>
		<pubDate>Sun, 15 Jan 2012 19:06:44 +0000</pubDate>
		<dc:creator>leadhoo</dc:creator>
				<category><![CDATA[猎奇搞笑]]></category>

		<guid isPermaLink="false">http://www.leadhoo.com/?p=71</guid>
		<description><![CDATA[<embed src="http://www.tudou.com/v/5HDyBG1fi98/&#038;resourceId=0_05_05_99/v.swf" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" wmode="opaque" width="480" height="400"></embed>]]></description>
		<wfw:commentRss>http://www.leadhoo.com/2012/01/15/71.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

