<?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>SLJ.me - 申力军 &#187; MySQL</title>
	<atom:link href="http://slj.me/category/mysql/feed/" rel="self" type="application/rss+xml" />
	<link>http://slj.me</link>
	<description>申力军的博客</description>
	<lastBuildDate>Sat, 14 Apr 2012 14:15:21 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1</generator>
		<item>
		<title>Reset MySQL root password</title>
		<link>http://slj.me/2012/02/reset-mysql-root-password/</link>
		<comments>http://slj.me/2012/02/reset-mysql-root-password/#comments</comments>
		<pubDate>Mon, 20 Feb 2012 16:00:07 +0000</pubDate>
		<dc:creator>SLJ</dc:creator>
				<category><![CDATA[MySQL]]></category>

		<guid isPermaLink="false">http://slj.me/?p=2291</guid>
		<description><![CDATA[<div class="addthis_toolbox addthis_default_style " addthis:url='http://slj.me/2012/02/reset-mysql-root-password/' addthis:title='Reset MySQL root password '  ><a class="addthis_button_facebook_like" fb:like:layout="button_count"></a><a class="addthis_button_tweet"></a><a class="addthis_counter addthis_pill_style"></a></div>Logged in? 1:use mysql 2:update user set password=password(&#8216;newpass&#8217;) where user=&#8217;root&#8217;; 3:flush privileges; Forget the root password? service mysqld stop mysqld_safe &#8211;skip-grant-tables &#38; ====== Another way: mysqladmin -u root -p newpass then type in your old password in the next line. &#160; Other Posts / 其他文章CSS阴影详解如何联机调试和发布 iPhone App[转]IE6不支持的十个实用的CSS属性MySQL 把查询结果保存到文件中的方法关于几种文本替换技术－CSS3, sIFR, Typeface.js, cufon<div class="addthis_toolbox addthis_default_style addthis_32x32_style" addthis:url='http://slj.me/2012/02/reset-mysql-root-password/' addthis:title='Reset MySQL root password ' ><a class="addthis_button_preferred_1"></a><a class="addthis_button_preferred_2"></a><a class="addthis_button_preferred_3"></a><a class="addthis_button_preferred_4"></a><a class="addthis_button_compact"></a></div>]]></description>
			<content:encoded><![CDATA[<div class="addthis_toolbox addthis_default_style " addthis:url='http://slj.me/2012/02/reset-mysql-root-password/' addthis:title='Reset MySQL root password '  ><a class="addthis_button_facebook_like" fb:like:layout="button_count"></a><a class="addthis_button_tweet"></a><a class="addthis_counter addthis_pill_style"></a></div><p>Logged in?</p>
<p>1:use mysql<br />
2:update user set password=password(&#8216;newpass&#8217;) where user=&#8217;root&#8217;;<br />
3:flush privileges;</p>
<p>Forget the root password?<br />
service mysqld stop<br />
mysqld_safe &#8211;skip-grant-tables &amp;</p>
<p>======</p>
<p>Another way:</p>
<p>mysqladmin -u root -p newpass</p>
<p>then type in your old password in the next line.</p>
<p>&nbsp;</p>
<div class="addthis_toolbox addthis_default_style addthis_32x32_style" addthis:url='http://slj.me/2012/02/reset-mysql-root-password/' addthis:title='Reset MySQL root password ' ><a class="addthis_button_preferred_1"></a><a class="addthis_button_preferred_2"></a><a class="addthis_button_preferred_3"></a><a class="addthis_button_preferred_4"></a><a class="addthis_button_compact"></a></div><h2  class="related_post_title">Other Posts / 其他文章</h2><ul class="related_post"><li><a href="http://slj.me/2009/07/%e8%bd%ac%e5%a6%82%e4%bd%95%e5%81%9a%e5%a5%bd%e4%b8%80%e4%bb%bd%e5%89%8d%e7%ab%af%e5%b7%a5%e7%a8%8b%e5%b8%88%e7%9a%84%e7%ae%80%e5%8e%86%ef%bc%9f/" title="[转]如何做好一份前端工程师的简历？">[转]如何做好一份前端工程师的简历？</a></li><li><a href="http://slj.me/2009/08/all-about-float/" title="关于浮动 ">关于浮动 </a></li><li><a href="http://slj.me/2010/04/%e7%94%a8css%e4%bf%ae%e6%ad%a3%e4%b8%80%e5%88%87%ef%bc%9a20%e5%a4%9a%e4%b8%aa%e5%b8%b8%e8%a7%81bug%e5%8f%8a%e5%85%b6%e4%bf%ae%e6%ad%a3%e6%96%b9%e6%b3%95/" title="用CSS修正一切：20多个常见Bug及其修正方法">用CSS修正一切：20多个常见Bug及其修正方法</a></li><li><a href="http://slj.me/2010/03/%e6%bc%8f%e5%98%b4%e7%bd%91%e5%8d%b3%e5%b0%86%e4%b8%8a%e7%ba%bf/" title="漏嘴网即将上线">漏嘴网即将上线</a></li><li><a href="http://slj.me/2009/04/jcrop-the-jquery-image-cropping-plugin/" title="Jcrop-jQuery图片裁剪插件">Jcrop-jQuery图片裁剪插件</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://slj.me/2012/02/reset-mysql-root-password/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>[轉] RHEL/CentOS 5.x使用yum快速安装 MySql 5.5</title>
		<link>http://slj.me/2012/02/yum-mysql-5-5/</link>
		<comments>http://slj.me/2012/02/yum-mysql-5-5/#comments</comments>
		<pubDate>Mon, 20 Feb 2012 15:42:12 +0000</pubDate>
		<dc:creator>SLJ</dc:creator>
				<category><![CDATA[MySQL]]></category>
		<category><![CDATA[Web Structure]]></category>

		<guid isPermaLink="false">http://slj.me/?p=2286</guid>
		<description><![CDATA[<div class="addthis_toolbox addthis_default_style " addthis:url='http://slj.me/2012/02/yum-mysql-5-5/' addthis:title='[轉] RHEL/CentOS 5.x使用yum快速安装 MySql 5.5 '  ><a class="addthis_button_facebook_like" fb:like:layout="button_count"></a><a class="addthis_button_tweet"></a><a class="addthis_counter addthis_pill_style"></a></div>PS：MySQL 5.5系列成为稳定版已经有一段时间了，但据我调查了解，在生产环境中还是以5.1系列为主。在国内的大公司里，只确定金山在使用5.5了。 公司的其中几台广告统计服务器，之前的运维直接用了自带安装的MySQL 5.0系列。新来的程序员写了新的广告统计程序，使用了innodb存储引擎，偶发现5.0对innodb引擎支持不怎么好，数据库并发连接数多时会出现丢连接，于是就想升级到5.5试试。因已安装了5.0，所以不想编译安装了。就直接找了一个国外编译好的5.5的yum源，直接升级，跑了一个月了，发现很稳定！就分享一下： 1、安装MySQL 5.5.x的yum源： rpm -Uvh http://repo.webtatic.com/yum/centos/5/latest.rpm 2、安装MySQL客户端的支持包： yum install libmysqlclient15 --enablerepo=webtatic 3、卸载MySQL老版本的软件包： yum remove mysql mysql-* 4、安装MySQL 5.5的客户端和服务端： yum install mysql55 mysql55-server --enablerepo=webtatic 5、启动MySQL系统服务，更新数据库： /etc/init.d/mysqld restart mysql_upgrade 6、附：此台服务器的my.cnf配置 skip-locking skip-name-resolve key_buffer = 1024M back_log = 3000 max_allowed_packet = 4M table_cache = 512 sort_buffer_size = 8M read_buffer_size = 8M myisam_sort_buffer_size = 1024M thread_cache = [...]<div class="addthis_toolbox addthis_default_style addthis_32x32_style" addthis:url='http://slj.me/2012/02/yum-mysql-5-5/' addthis:title='[轉] RHEL/CentOS 5.x使用yum快速安装 MySql 5.5 ' ><a class="addthis_button_preferred_1"></a><a class="addthis_button_preferred_2"></a><a class="addthis_button_preferred_3"></a><a class="addthis_button_preferred_4"></a><a class="addthis_button_compact"></a></div>]]></description>
			<content:encoded><![CDATA[<div class="addthis_toolbox addthis_default_style " addthis:url='http://slj.me/2012/02/yum-mysql-5-5/' addthis:title='[轉] RHEL/CentOS 5.x使用yum快速安装 MySql 5.5 '  ><a class="addthis_button_facebook_like" fb:like:layout="button_count"></a><a class="addthis_button_tweet"></a><a class="addthis_counter addthis_pill_style"></a></div><div>
<p><strong>PS：MySQL 5.5系列成为稳定版已经有一段时间了，但据我调查了解，在生产环境中还是以5.1系列为主。在国内的大公司里，只确定金山在使用5.5了。</strong></p>
<p><strong>公司的其中几台广告统计服务器，之前的运维直接用了自带安装的MySQL 5.0系列。新来的程序员写了新的广告统计程序，使用了innodb存储引擎，偶发现5.0对innodb引擎支持不怎么好，数据库并发连接数多时会出现丢连接，于是就想升级到5.5试试。因已安装了5.0，所以不想编译安装了。就直接找了一个国外编译好的5.5的yum源，直接升级，跑了一个月了，发现很稳定！就分享一下：</strong></p>
<p>1、安装MySQL 5.5.x的yum源：<br />
<code>rpm -Uvh http://repo.webtatic.com/yum/centos/5/latest.rpm</code></p>
<p>2、安装MySQL客户端的支持包：<br />
<code>yum install libmysqlclient15 --enablerepo=webtatic</code></p>
<p><span id="more-2286"></span>3、卸载MySQL老版本的软件包：<br />
<code>yum remove mysql mysql-*</code></p>
<p>4、安装MySQL 5.5的客户端和服务端：<br />
<code>yum install mysql55 mysql55-server --enablerepo=webtatic</code></p>
<p>5、启动MySQL系统服务，更新数据库：<br />
<code><br />
/etc/init.d/mysqld restart<br />
mysql_upgrade<br />
</code></p>
<p>6、附：此台服务器的my.cnf配置<br />
<code><br />
skip-locking<br />
skip-name-resolve<br />
key_buffer = 1024M<br />
back_log = 3000<br />
max_allowed_packet = 4M<br />
table_cache = 512<br />
sort_buffer_size = 8M<br />
read_buffer_size = 8M<br />
myisam_sort_buffer_size = 1024M<br />
thread_cache = 512<br />
query_cache_size = 512M<br />
set-variable = wait_timeout=60<br />
thread_concurrency = 4<br />
log-slow-queries = slow.log<br />
long_query_time = 1<br />
innodb_flush_log_at_trx_commit = 2<br />
innodb_buffer_pool_size = 1024M<br />
#innodb_locks_unsafe_for_binlog = 1<br />
</code></p>
<p><strong>如果不是升级，而是新安装。还需要设置root密码，删除默认的空用户、空密码等等，这里就不说了。请参考本博其他博文或官方手册，或者google。</strong></p>
<p>英文原文：http://www.webtatic.com/packages/mysql55/</p>
</div>
<p>&nbsp;</p>
<div class="addthis_toolbox addthis_default_style addthis_32x32_style" addthis:url='http://slj.me/2012/02/yum-mysql-5-5/' addthis:title='[轉] RHEL/CentOS 5.x使用yum快速安装 MySql 5.5 ' ><a class="addthis_button_preferred_1"></a><a class="addthis_button_preferred_2"></a><a class="addthis_button_preferred_3"></a><a class="addthis_button_preferred_4"></a><a class="addthis_button_compact"></a></div><h2  class="related_post_title">Other Posts / 其他文章</h2><ul class="related_post"><li><a href="http://slj.me/2009/08/%e3%80%90%e8%bd%ac%e3%80%91%e9%a9%ac%e4%ba%91%e7%bb%99%e6%ad%a3%e5%9c%a8%e5%a5%8b%e6%96%97%e7%9a%84%e4%ba%ba%e7%9a%84%e7%b2%be%e5%85%b8%e8%af%ad%e5%8f%a5/" title="【转】马云给正在奋斗的人的精典语句">【转】马云给正在奋斗的人的精典语句</a></li><li><a href="http://slj.me/2009/04/jquery-rater-star-plugin/" title="jQuery Rater Star Plugin投票打星星插件">jQuery Rater Star Plugin投票打星星插件</a></li><li><a href="http://slj.me/2010/12/centos-apache-firewall-settings/" title="CentOS 安装 Apache 后其他机器无法访问的解决方法">CentOS 安装 Apache 后其他机器无法访问的解决方法</a></li><li><a href="http://slj.me/2009/10/css-differences-in-internet-explorer-6-7-and-8/" title="CSS在Internet Explorer 6, 7 和8中的差别">CSS在Internet Explorer 6, 7 和8中的差别</a></li><li><a href="http://slj.me/2009/08/all-about-float/" title="关于浮动 ">关于浮动 </a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://slj.me/2012/02/yum-mysql-5-5/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>MySQL 把查询结果保存到文件中的方法</title>
		<link>http://slj.me/2011/10/mysql-save-query-result-to-a-file/</link>
		<comments>http://slj.me/2011/10/mysql-save-query-result-to-a-file/#comments</comments>
		<pubDate>Fri, 28 Oct 2011 10:42:07 +0000</pubDate>
		<dc:creator>SLJ</dc:creator>
				<category><![CDATA[MySQL]]></category>

		<guid isPermaLink="false">http://slj.me/?p=2274</guid>
		<description><![CDATA[<div class="addthis_toolbox addthis_default_style " addthis:url='http://slj.me/2011/10/mysql-save-query-result-to-a-file/' addthis:title='MySQL 把查询结果保存到文件中的方法 '  ><a class="addthis_button_facebook_like" fb:like:layout="button_count"></a><a class="addthis_button_tweet"></a><a class="addthis_counter addthis_pill_style"></a></div>执行 mysql -h 主机 -u 用户 -p密码 -P端口 -D库 -Bse &#8220;select house_id,type from 表名 where account_id=123;&#8221;  &#62; /tmp/a.txt Related Posts / 相关文章分享两则我在VPS上执行的sh脚本总结: MySQL主从复制 &#8211; MySQL Replication找出 MySQL 里哪些查询 Query 速度较慢MySQL: group by &#8230; having &#8230;MySql取整函数<div class="addthis_toolbox addthis_default_style addthis_32x32_style" addthis:url='http://slj.me/2011/10/mysql-save-query-result-to-a-file/' addthis:title='MySQL 把查询结果保存到文件中的方法 ' ><a class="addthis_button_preferred_1"></a><a class="addthis_button_preferred_2"></a><a class="addthis_button_preferred_3"></a><a class="addthis_button_preferred_4"></a><a class="addthis_button_compact"></a></div>]]></description>
			<content:encoded><![CDATA[<div class="addthis_toolbox addthis_default_style " addthis:url='http://slj.me/2011/10/mysql-save-query-result-to-a-file/' addthis:title='MySQL 把查询结果保存到文件中的方法 '  ><a class="addthis_button_facebook_like" fb:like:layout="button_count"></a><a class="addthis_button_tweet"></a><a class="addthis_counter addthis_pill_style"></a></div><p>执行</p>
<p>mysql -h 主机 -u 用户 -p密码 -P端口 -D库 -Bse &#8220;select house_id,type from 表名 where account_id=123;&#8221;  &gt; /tmp/a.txt</p>
<div class="addthis_toolbox addthis_default_style addthis_32x32_style" addthis:url='http://slj.me/2011/10/mysql-save-query-result-to-a-file/' addthis:title='MySQL 把查询结果保存到文件中的方法 ' ><a class="addthis_button_preferred_1"></a><a class="addthis_button_preferred_2"></a><a class="addthis_button_preferred_3"></a><a class="addthis_button_preferred_4"></a><a class="addthis_button_compact"></a></div><h2  class="related_post_title">Related Posts / 相关文章</h2><ul class="related_post"><li><a href="http://slj.me/2011/03/share-bash-script/" title="分享两则我在VPS上执行的sh脚本">分享两则我在VPS上执行的sh脚本</a></li><li><a href="http://slj.me/2011/03/mysql-replication-master-slave/" title="总结: MySQL主从复制 &#8211; MySQL Replication">总结: MySQL主从复制 &#8211; MySQL Replication</a></li><li><a href="http://slj.me/2010/12/find-out-slow-query-in-mysql/" title="找出 MySQL 里哪些查询 Query 速度较慢">找出 MySQL 里哪些查询 Query 速度较慢</a></li><li><a href="http://slj.me/2010/04/mysql-group-by-having/" title="MySQL: group by &#8230; having &#8230;">MySQL: group by &#8230; having &#8230;</a></li><li><a href="http://slj.me/2010/01/mysql%e5%8f%96%e6%95%b4%e5%87%bd%e6%95%b0/" title="MySql取整函数">MySql取整函数</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://slj.me/2011/10/mysql-save-query-result-to-a-file/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>[转] MySQL用left join替换select in结构改善效率</title>
		<link>http://slj.me/2011/10/left-join-select-in/</link>
		<comments>http://slj.me/2011/10/left-join-select-in/#comments</comments>
		<pubDate>Sat, 08 Oct 2011 11:41:33 +0000</pubDate>
		<dc:creator>SLJ</dc:creator>
				<category><![CDATA[MySQL]]></category>
		<category><![CDATA[join]]></category>
		<category><![CDATA[left join]]></category>
		<category><![CDATA[select in]]></category>

		<guid isPermaLink="false">http://slj.me/?p=2264</guid>
		<description><![CDATA[<div class="addthis_toolbox addthis_default_style " addthis:url='http://slj.me/2011/10/left-join-select-in/' addthis:title='[转] MySQL用left join替换select in结构改善效率 '  ><a class="addthis_button_facebook_like" fb:like:layout="button_count"></a><a class="addthis_button_tweet"></a><a class="addthis_counter addthis_pill_style"></a></div>今天为客户代维服务器,发现打开WEB速度奇慢,一开始以为是台湾地震,又影响到了海底光缆 客户问我是否要重启下服务器,我说 &#8220;不用,你的服务器负载不重,应该不是这个原因&#8221; 说完,随手top 了下,晕,还真是负载严重的厉害 LOAD AVG 竟然也达到了 15 16 18左右 于是登陆mysql,找原因 发现大量 copy to temp table 的信息,而语句就是 select `id_category` from `ps_category_product` where `id_product` in(select `id_product` from `ps_image` where `date_add`&#62;1 group by `id_product`) group by `id_category` &#160; 下面这个图片是我本机测试的 这条语句用时 0.1383 秒,一条近0.14秒啊&#8230;而我在客户服务器上看到的是 30几秒还有40多秒的&#8230;. 这里用了 select in 这个结构..平时用的很多,还真没发现原来效率这么低&#8230;.客户的服务器上有30多个站,每个站都在不停的使用这条语句进行查询,可想而知负载为什么这么高了 于是,改进,将 select in 结构,替换为 left join 结构 select p.`id_category` [...]<div class="addthis_toolbox addthis_default_style addthis_32x32_style" addthis:url='http://slj.me/2011/10/left-join-select-in/' addthis:title='[转] MySQL用left join替换select in结构改善效率 ' ><a class="addthis_button_preferred_1"></a><a class="addthis_button_preferred_2"></a><a class="addthis_button_preferred_3"></a><a class="addthis_button_preferred_4"></a><a class="addthis_button_compact"></a></div>]]></description>
			<content:encoded><![CDATA[<div class="addthis_toolbox addthis_default_style " addthis:url='http://slj.me/2011/10/left-join-select-in/' addthis:title='[转] MySQL用left join替换select in结构改善效率 '  ><a class="addthis_button_facebook_like" fb:like:layout="button_count"></a><a class="addthis_button_tweet"></a><a class="addthis_counter addthis_pill_style"></a></div><p>今天为客户代维服务器,发现打开WEB速度奇慢,一开始以为是台湾地震,又影响到了海底光缆</p>
<p>客户问我是否要重启下服务器,我说 &#8220;不用,你的服务器负载不重,应该不是这个原因&#8221;</p>
<p>说完,随手top 了下,晕,还真是负载严重的厉害</p>
<p><img src="http://slj.me/wp-content/uploads/2011/10/4a7a9004c068615d2de5c30d0da635b520100305143822.jpg" border="0" alt="" /></p>
<p>LOAD AVG 竟然也达到了 15 16 18左右</p>
<p>于是登陆mysql,找原因</p>
<p>发现大量 copy to temp table 的信息,而语句就是</p>
<p><span id="more-2264"></span></p>
<blockquote>
<pre><code><span class="keyword">select</span> <span class="string">`id_category`</span> <span class="keyword">from</span> <span class="string">`ps_category_product`</span>
<span class="keyword">where</span> <span class="string">`id_product`</span>
<span class="keyword">in</span>(<span class="keyword">select</span> <span class="string">`id_product`</span> <span class="keyword">from</span> <span class="string">`ps_image`</span> <span class="keyword">where</span> <span class="string">`date_add`</span>&gt;<span class="number">1</span> <span class="keyword">
group</span> <span class="keyword">by</span> <span class="string">`id_product`</span>)
<span class="keyword">group</span> <span class="keyword">by</span> <span class="string">`id_category`</span></code></pre>
<p>&nbsp;</p></blockquote>
<p>下面这个图片是我本机测试的</p>
<p><img src="http://slj.me/wp-content/uploads/2011/10/4a7a9004c068615d2de5c30d0da635b520100305145222.jpg" border="0" alt="" /></p>
<p>这条语句用时 0.1383 秒,一条近0.14秒啊&#8230;而我在客户服务器上看到的是 30几秒还有40多秒的&#8230;.</p>
<p>这里用了 select in 这个结构..平时用的很多,还真没发现原来效率这么低&#8230;.客户的服务器上有30多个站,每个站都在不停的使用这条语句进行查询,可想而知负载为什么这么高了</p>
<p>于是,改进,将 select in 结构,替换为 left join 结构</p>
<blockquote>
<pre><code><span class="keyword">select</span> p.<span class="string">`id_category`</span> <span class="keyword">from</span> <span class="string">`ps_category_product`</span> p <span class="keyword">
left</span> <span class="keyword">join</span> <span class="string">`ps_image`</span> i <span class="keyword">
on</span> p.<span class="string">`id_product`</span>=i.<span class="string">`id_product`</span>
<span class="keyword">where</span> i.<span class="string">`date_add`</span>&gt;<span class="number">1</span>
<span class="keyword">group</span> <span class="keyword">by</span> p.<span class="string">`id_categor</span></code><span style="font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 13px; line-height: 19px; white-space: normal;">
</span></pre>
</blockquote>
<pre><span style="font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 13px; line-height: 19px; white-space: normal;">替换到服务器,发现负载下降了</span></pre>
<p><img src="http://slj.me/wp-content/uploads/2011/10/thum-4a7a9004c068615d2de5c30d0da635b520100305145553-1.jpg" border="0" alt="" /></p>
<p>mysql 下降到 78.9%,比刚才小了很多,系统的load avg也下降到 2和3左右</p>
<p>下面这个图片是我本机测试这条语句的</p>
<p><img src="http://slj.me/wp-content/uploads/2011/10/4a7a9004c068615d2de5c30d0da635b520100305145856.jpg" border="0" alt="" /></p>
<p>用时 0.0398,仅仅是刚才的 28%,可见,效果非常明显</p>
<p>这里提醒大家,慎用 select in 结构的查询,另外,因为用了两次 group by 也对性能有一定影响</p>
<div class="addthis_toolbox addthis_default_style addthis_32x32_style" addthis:url='http://slj.me/2011/10/left-join-select-in/' addthis:title='[转] MySQL用left join替换select in结构改善效率 ' ><a class="addthis_button_preferred_1"></a><a class="addthis_button_preferred_2"></a><a class="addthis_button_preferred_3"></a><a class="addthis_button_preferred_4"></a><a class="addthis_button_compact"></a></div><h2  class="related_post_title">Other Posts / 其他文章</h2><ul class="related_post"><li><a href="http://slj.me/2009/07/css-sprites-tips/" title="CSS Sprites 技巧 ">CSS Sprites 技巧 </a></li><li><a href="http://slj.me/2011/02/install-godaddy-ssl-https-on-nginx/" title="转购买安装Godaddy SSL证书以及Nginx配置HTTPS方法">转购买安装Godaddy SSL证书以及Nginx配置HTTPS方法</a></li><li><a href="http://slj.me/2009/06/10-astonishing-css-hacks-and-techniques/" title="【译】10个惊人的CSS hack和技术 (10 astonishing CSS hacks and techniques)">【译】10个惊人的CSS hack和技术 (10 astonishing CSS hacks and techniques)</a></li><li><a href="http://slj.me/2009/06/louzui/" title="注册漏嘴网">注册漏嘴网</a></li><li><a href="http://slj.me/2009/12/html5-css3/" title="揭秘HTML5和CSS3">揭秘HTML5和CSS3</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://slj.me/2011/10/left-join-select-in/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>总结: MySQL主从复制 &#8211; MySQL Replication</title>
		<link>http://slj.me/2011/03/mysql-replication-master-slave/</link>
		<comments>http://slj.me/2011/03/mysql-replication-master-slave/#comments</comments>
		<pubDate>Sat, 19 Mar 2011 14:14:49 +0000</pubDate>
		<dc:creator>SLJ</dc:creator>
				<category><![CDATA[MySQL]]></category>
		<category><![CDATA[master]]></category>
		<category><![CDATA[replication]]></category>

		<guid isPermaLink="false">http://slj.me/?p=2180</guid>
		<description><![CDATA[<div class="addthis_toolbox addthis_default_style " addthis:url='http://slj.me/2011/03/mysql-replication-master-slave/' addthis:title='总结: MySQL主从复制 &#8211; MySQL Replication '  ><a class="addthis_button_facebook_like" fb:like:layout="button_count"></a><a class="addthis_button_tweet"></a><a class="addthis_counter addthis_pill_style"></a></div>记： 最近在测试MySQL在高并发下连接失败的方法。在修改 max_connections 等等的方法后没有本质的提升，在PHP中的连接方法尝试retry也没有明显提升，用多个实例来分摊其实也是在同一个机器上抢占资源。只能从硬件方面学习了。一个有效的解决方法就是MySQL的主从replication. 在咨询过羽同学后得出以下结论：从服务器会异步从主服务器单向同步数据。update，insert等操作应在主服务器上进行。对于生产环境中实时性比较高的select操作应在主服务器上执行，其他select操作都在从服务器上进行。 &#160; ==下面是转载== MySQL支持单向、异步复制，复制过程中一个服务器充当主服务器，而一个或多个其它服务器充当从服务器。主服务器将更新写入二进制日志文件，并维护日志文件的一个索引以跟踪日志循环。当一个从服务器连接到主服务器时，它通知主服务器从服务器在日志中读取的最后一次成功更新的位置。从服务器接收从那时起发生的任何更新，然后封锁并等待主服务器通知下一次更新。 为什么使用主从复制？ 1、主服务器/从服务器设置增加了健壮性。主服务器出现问题时，你可以切换到从服务器作为备份。 2、通过在主服务器和从服务器之间切分处理客户查询的负荷，可以得到更好的客户响应时间。但是不要同时在主从服务器上进行更新，这样可能引起冲突。 3、使用复制的另一个好处是可以使用一个从服务器执行备份，而不会干扰主服务器。在备份过程中主服务器可以继续处理更新。 MySQL使用3个线程来执行复制功能(其中1个在主服务器上，另两个在从服务器上。当发出START SLAVE时，从服务器创建一个I/O线程，以连接主服务器并让主服务器发送二进制日志。主服务器创建一个线程将二进制日志中的内容发送到从服务器。从服务器I/O线程读取主服务器Binlog Dump线程发送的内容并将该数据拷贝到从服务器数据目录中的本地文件中，即中继日志。第3个线程是SQL线程，从服务器使用此线程读取中继日志并执行日志中包含的更新。SHOW PROCESSLIST语句可以查询在主服务器上和从服务器上发生的关于复制的信息。 默认中继日志使用host_name-relay-bin.nnnnnn形式的文件名，其中host_name是从服务器主机名，nnnnnn是序列号。用连续序列号来创建连续中继日志文件，从000001开始。从服务器跟踪中继日志索引文件来识别目前正使用的中继日志。默认中继日志索引文件名为host_name-relay-bin.index。在默认情况，这些文件在从服务器的数据目录中被创建。中继日志与二进制日志的格式相同，并且可以用mysqlbinlog读取。当SQL线程执行完中继日志中的所有事件后，中继日志将会被自动删除。 从服务器在数据目录中另外创建两个状态文件&#8211;master.info和relay-log.info。状态文件保存在硬盘上，从服务器关闭时不会丢失。下次从服务器启动时，读取这些文件以确定它已经从主服务器读取了多少二进制日志，以及处理自己的中继日志的程度。 设置主从复制： 1、确保在主服务器和从服务器上安装的MySQL版本相同，并且最好是MySQL的最新稳定版本。 2、在主服务器上为复制设置一个连接账户。该账户必须授予REPLICATION SLAVE权限。如果账户仅用于复制(推荐这样做)，则不需要再授予任何其它权限。 mysql&#62; GRANT REPLICATION SLAVE ON *.* -&#62; TO &#8216;replication&#8217;@'%.yourdomain.com&#8217; IDENTIFIED BY &#8216;slavepass&#8217;; 3、执行FLUSH TABLES WITH READ LOCK语句清空所有表和块写入语句： mysql&#62; FLUSH TABLES WITH READ LOCK； 保持mysql客户端程序不要退出。开启另一个终端对主服务器数据目录做快照。 shell&#62; cd /usr/local/mysql/ shell&#62; tar -cvf /tmp/mysql-snapshot.tar ./data 如果从服务器的用户账户与主服务器的不同，你可能不想复制mysql数据库。在这种情况下，应从归档中排除该数据库。你也不需要在归档中包括任何日志文件或者master.info或relay-log.info文件。 [...]<div class="addthis_toolbox addthis_default_style addthis_32x32_style" addthis:url='http://slj.me/2011/03/mysql-replication-master-slave/' addthis:title='总结: MySQL主从复制 &#8211; MySQL Replication ' ><a class="addthis_button_preferred_1"></a><a class="addthis_button_preferred_2"></a><a class="addthis_button_preferred_3"></a><a class="addthis_button_preferred_4"></a><a class="addthis_button_compact"></a></div>]]></description>
			<content:encoded><![CDATA[<div class="addthis_toolbox addthis_default_style " addthis:url='http://slj.me/2011/03/mysql-replication-master-slave/' addthis:title='总结: MySQL主从复制 &#8211; MySQL Replication '  ><a class="addthis_button_facebook_like" fb:like:layout="button_count"></a><a class="addthis_button_tweet"></a><a class="addthis_counter addthis_pill_style"></a></div><h3>记：</h3>
<p>最近在测试MySQL在高并发下连接失败的方法。在修改 max_connections 等等的方法后没有本质的提升，在PHP中的连接方法尝试retry也没有明显提升，用多个实例来分摊其实也是在同一个机器上抢占资源。只能从硬件方面学习了。一个有效的解决方法就是MySQL的主从replication.</p>
<p>在咨询过羽同学后得出以下结论：从服务器会异步从主服务器单向同步数据。update，insert等操作应在主服务器上进行。对于生产环境中实时性比较高的select操作应在主服务器上执行，其他select操作都在从服务器上进行。</p>
<p>&nbsp;</p>
<h3>==下面是转载==</h3>
<p>MySQL支持单向、异步复制，复制过程中一个服务器充当主服务器，而一个或多个其它服务器充当从服务器。主服务器将更新写入二进制日志文件，并维护日志文件的一个索引以跟踪日志循环。当一个从服务器连接到主服务器时，它通知主服务器从服务器在日志中读取的最后一次成功更新的位置。从服务器接收从那时起发生的任何更新，然后封锁并等待主服务器通知下一次更新。<br />
<span id="more-2180"></span></p>
<h3>为什么使用主从复制？</h3>
<p>1、主服务器/从服务器设置增加了健壮性。主服务器出现问题时，你可以切换到从服务器作为备份。</p>
<p>2、通过在主服务器和从服务器之间切分处理客户查询的负荷，可以得到更好的客户响应时间。但是不要同时在主从服务器上进行更新，这样可能引起冲突。</p>
<p>3、使用复制的另一个好处是可以使用一个从服务器执行备份，而不会干扰主服务器。在备份过程中主服务器可以继续处理更新。</p>
<p>MySQL使用3个线程来执行复制功能(其中1个在主服务器上，另两个在从服务器上。当发出START SLAVE时，从服务器创建一个I/O线程，以连接主服务器并让主服务器发送二进制日志。主服务器创建一个线程将二进制日志中的内容发送到从服务器。从服务器I/O线程读取主服务器Binlog Dump线程发送的内容并将该数据拷贝到从服务器数据目录中的本地文件中，即中继日志。第3个线程是SQL线程，从服务器使用此线程读取中继日志并执行日志中包含的更新。SHOW PROCESSLIST语句可以查询在主服务器上和从服务器上发生的关于复制的信息。</p>
<p>默认中继日志使用host_name-relay-bin.nnnnnn形式的文件名，其中host_name是从服务器主机名，nnnnnn是序列号。用连续序列号来创建连续中继日志文件，从000001开始。从服务器跟踪中继日志索引文件来识别目前正使用的中继日志。默认中继日志索引文件名为host_name-relay-bin.index。在默认情况，这些文件在从服务器的数据目录中被创建。中继日志与二进制日志的格式相同，并且可以用mysqlbinlog读取。当SQL线程执行完中继日志中的所有事件后，中继日志将会被自动删除。</p>
<p>从服务器在数据目录中另外创建两个状态文件&#8211;master.info和relay-log.info。状态文件保存在硬盘上，从服务器关闭时不会丢失。下次从服务器启动时，读取这些文件以确定它已经从主服务器读取了多少二进制日志，以及处理自己的中继日志的程度。</p>
<h3>设置主从复制：</h3>
<p>1、确保在主服务器和从服务器上安装的MySQL版本相同，并且最好是MySQL的最新稳定版本。</p>
<p>2、在主服务器上为复制设置一个连接账户。该账户必须授予REPLICATION SLAVE权限。如果账户仅用于复制(推荐这样做)，则不需要再授予任何其它权限。</p>
<p>mysql&gt; GRANT REPLICATION SLAVE ON *.*</p>
<p>-&gt; TO &#8216;replication&#8217;@'%.yourdomain.com&#8217; IDENTIFIED BY &#8216;slavepass&#8217;;</p>
<p>3、执行FLUSH TABLES WITH READ LOCK语句清空所有表和块写入语句：</p>
<p>mysql&gt; FLUSH TABLES WITH READ LOCK；</p>
<p>保持mysql客户端程序不要退出。开启另一个终端对主服务器数据目录做快照。</p>
<p>shell&gt; cd /usr/local/mysql/</p>
<p>shell&gt; tar -cvf /tmp/mysql-snapshot.tar ./data</p>
<p>如果从服务器的用户账户与主服务器的不同，你可能不想复制mysql数据库。在这种情况下，应从归档中排除该数据库。你也不需要在归档中包括任何日志文件或者master.info或relay-log.info文件。</p>
<p>当FLUSH TABLES WITH READ LOCK所置读锁定有效时（即mysql客户端程序不退出)，读取主服务器上当前的二进制日志名和偏移量值：</p>
<p>mysql &gt; SHOW MASTER STATUS;</p>
<p>+&#8212;&#8212;&#8212;&#8212;&#8212;+&#8212;&#8212;&#8212;-+&#8212;&#8212;&#8212;&#8212;&#8211;+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;+</p>
<p>| File          | Position | Binlog_Do_DB | Binlog_Ignore_DB |</p>
<p>+&#8212;&#8212;&#8212;&#8212;&#8212;+&#8212;&#8212;&#8212;-+&#8212;&#8212;&#8212;&#8212;&#8211;+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;+</p>
<p>| mysql-bin.003 | 73       | test         | manual,mysql     |</p>
<p>+&#8212;&#8212;&#8212;&#8212;&#8212;+&#8212;&#8212;&#8212;-+&#8212;&#8212;&#8212;&#8212;&#8211;+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;+</p>
<p>File列显示日志名，而Position显示偏移量。在该例子中，二进制日志值为mysql-bin.003，偏移量为73。记录该值。以后设置从服务器时需要使用这些值。它们表示复制坐标，从服务器应从该点开始从主服务器上进行新的更新。</p>
<p>如果主服务器运行时没有启用&#8211;logs-bin，SHOW MASTER STATUS显示的日志名和位置值为空。在这种情况下，当以后指定从服务器的日志文件和位置时需要使用的值为空字符串(&#8221;)和4.</p>
<p>取得快照并记录日志名和偏移量后，回到前一中端重新启用写活动：</p>
<p>mysql&gt; UNLOCK TABLES；</p>
<p>4、确保主服务器主机上my.cnf文件的[mysqld]部分包括一个log-bin选项。该部分还应有一个server-id=Master_id选项，其中master_id必须为1到232–1之间的一个正整数值。例如：</p>
<p>[mysqld]</p>
<p>log-bin</p>
<p>server-id=1</p>
<p>如果没有提供那些选项，应添加它们并重启服务器。</p>
<p>5、停止从服务器上的mysqld服务并在其my.cnf文件中添加下面的行：</p>
<p>[mysqld]</p>
<p>server-id=2</p>
<p>slave_id值同Master_id值一样，必须为1到232–1之间的一个正整数值。并且，从服务器的ID必须与主服务器的ID不相同。</p>
<p>6、将数据备据目录中。确保对这些文件和目录的权限正确。服务器 MySQL运行的用户必须能够读写文件，如同在主服务器上一样。</p>
<p>Shell&gt; chown -R mysql:mysql /usr/local/mysql/data</p>
<p>7、启动从服务器。在从服务器上执行下面的语句，用你的系统的实际值替换选项值：</p>
<pre>        mysql&gt; CHANGE MASTER TO

            -&gt; MASTER_HOST='master_host_name',

            -&gt; MASTER_USER='replication_user_name',

            -&gt; MASTER_PASSWORD='replication_password',

            -&gt; MASTER_LOG_FILE='recorded_log_file_name',

            -&gt; MASTER_LOG_POS=recorded_log_position;</pre>
<p>8、启动从服务器线程：</p>
<pre>        mysql&gt; START SLAVE；</pre>
<p>执行这些程序后，从服务器应连接主服务器，并补充自从快照以来发生的任何更新。</p>
<p>9、如果出现复制错误，从服务器的错误日志（HOSTNAME.err）中也会出现错误消息。</p>
<p>10、从服务器复制时，会在其数据目录中发现文件master.info和HOSTNAME- relay-log.info。从服务器使用这两个文件跟踪已经处理了多少主服务器的二进制日志。不要移除或编辑这些文件，除非你确切知你正在做什么并完全理解其意义。即使这样，最好是使用CHANGE MASTER TO语句。</p>
<div class="addthis_toolbox addthis_default_style addthis_32x32_style" addthis:url='http://slj.me/2011/03/mysql-replication-master-slave/' addthis:title='总结: MySQL主从复制 &#8211; MySQL Replication ' ><a class="addthis_button_preferred_1"></a><a class="addthis_button_preferred_2"></a><a class="addthis_button_preferred_3"></a><a class="addthis_button_preferred_4"></a><a class="addthis_button_compact"></a></div><h2  class="related_post_title">Related Posts / 相关文章</h2><ul class="related_post"><li><a href="http://slj.me/2011/10/mysql-save-query-result-to-a-file/" title="MySQL 把查询结果保存到文件中的方法">MySQL 把查询结果保存到文件中的方法</a></li><li><a href="http://slj.me/2011/03/share-bash-script/" title="分享两则我在VPS上执行的sh脚本">分享两则我在VPS上执行的sh脚本</a></li><li><a href="http://slj.me/2010/12/find-out-slow-query-in-mysql/" title="找出 MySQL 里哪些查询 Query 速度较慢">找出 MySQL 里哪些查询 Query 速度较慢</a></li><li><a href="http://slj.me/2010/04/mysql-group-by-having/" title="MySQL: group by &#8230; having &#8230;">MySQL: group by &#8230; having &#8230;</a></li><li><a href="http://slj.me/2010/01/mysql%e5%8f%96%e6%95%b4%e5%87%bd%e6%95%b0/" title="MySql取整函数">MySql取整函数</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://slj.me/2011/03/mysql-replication-master-slave/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>2010中国首届微博开发者大会演讲稿PPT</title>
		<link>http://slj.me/2010/12/2010-china-tblog-ppt/</link>
		<comments>http://slj.me/2010/12/2010-china-tblog-ppt/#comments</comments>
		<pubDate>Sat, 18 Dec 2010 13:32:29 +0000</pubDate>
		<dc:creator>SLJ</dc:creator>
				<category><![CDATA[MySQL]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Web Structure]]></category>
		<category><![CDATA[backend]]></category>
		<category><![CDATA[ppt]]></category>

		<guid isPermaLink="false">http://slj.me/?p=2117</guid>
		<description><![CDATA[<div class="addthis_toolbox addthis_default_style " addthis:url='http://slj.me/2010/12/2010-china-tblog-ppt/' addthis:title='2010中国首届微博开发者大会演讲稿PPT '  ><a class="addthis_button_facebook_like" fb:like:layout="button_count"></a><a class="addthis_button_tweet"></a><a class="addthis_counter addthis_pill_style"></a></div>2010中国首届微博开发者大会演讲稿PPT 演讲视频 微博架构与平台安全 Related Posts / 相关文章PHP Quebec 2009 PHP全球聚会PPT下载<div class="addthis_toolbox addthis_default_style addthis_32x32_style" addthis:url='http://slj.me/2010/12/2010-china-tblog-ppt/' addthis:title='2010中国首届微博开发者大会演讲稿PPT ' ><a class="addthis_button_preferred_1"></a><a class="addthis_button_preferred_2"></a><a class="addthis_button_preferred_3"></a><a class="addthis_button_preferred_4"></a><a class="addthis_button_compact"></a></div>]]></description>
			<content:encoded><![CDATA[<div class="addthis_toolbox addthis_default_style " addthis:url='http://slj.me/2010/12/2010-china-tblog-ppt/' addthis:title='2010中国首届微博开发者大会演讲稿PPT '  ><a class="addthis_button_facebook_like" fb:like:layout="button_count"></a><a class="addthis_button_tweet"></a><a class="addthis_counter addthis_pill_style"></a></div><p>2010中国首届<a href="http://open.t.sina.com.cn/conference/">微博开发者大会</a>演讲稿PPT</p>
<p><a href="http://video.sina.com.cn/p/tech/i/v/2010-11-16/232961185323.html">演讲视频</a></p>
<div id="__ss_5861024" style="width: 425px;"><strong><a title="微博架构与平台安全" href="http://www.slideshare.net/iso1600/ss-5861024">微博架构与平台安全</a></strong><object id="__sse5861024" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="425" height="355" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowScriptAccess" value="always" /><param name="src" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=2-101122080933-phpapp02&amp;stripped_title=ss-5861024&amp;userName=iso1600" /><param name="name" value="__sse5861024" /><param name="allowfullscreen" value="true" /><embed id="__sse5861024" type="application/x-shockwave-flash" width="425" height="355" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=2-101122080933-phpapp02&amp;stripped_title=ss-5861024&amp;userName=iso1600" name="__sse5861024" allowscriptaccess="always" allowfullscreen="true"></embed></object></div>
<div class="addthis_toolbox addthis_default_style addthis_32x32_style" addthis:url='http://slj.me/2010/12/2010-china-tblog-ppt/' addthis:title='2010中国首届微博开发者大会演讲稿PPT ' ><a class="addthis_button_preferred_1"></a><a class="addthis_button_preferred_2"></a><a class="addthis_button_preferred_3"></a><a class="addthis_button_preferred_4"></a><a class="addthis_button_compact"></a></div><h2  class="related_post_title">Related Posts / 相关文章</h2><ul class="related_post"><li><a href="http://slj.me/2009/04/php-quebec-2009-ppt-download/" title="PHP Quebec 2009 PHP全球聚会PPT下载">PHP Quebec 2009 PHP全球聚会PPT下载</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://slj.me/2010/12/2010-china-tblog-ppt/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>找出 MySQL 里哪些查询 Query 速度较慢</title>
		<link>http://slj.me/2010/12/find-out-slow-query-in-mysql/</link>
		<comments>http://slj.me/2010/12/find-out-slow-query-in-mysql/#comments</comments>
		<pubDate>Fri, 10 Dec 2010 03:40:03 +0000</pubDate>
		<dc:creator>SLJ</dc:creator>
				<category><![CDATA[MySQL]]></category>
		<category><![CDATA[slow-query]]></category>

		<guid isPermaLink="false">http://slj.me/?p=2095</guid>
		<description><![CDATA[<div class="addthis_toolbox addthis_default_style " addthis:url='http://slj.me/2010/12/find-out-slow-query-in-mysql/' addthis:title='找出 MySQL 里哪些查询 Query 速度较慢 '  ><a class="addthis_button_facebook_like" fb:like:layout="button_count"></a><a class="addthis_button_tweet"></a><a class="addthis_counter addthis_pill_style"></a></div>转一篇文章： MySQL 中有内建的设定, 在my.cnf 中设定: log-slow-queries = [slow_query_log_filename] 即可记录查询时间花费超过的10s的SQL 语法(Default). 若要改5秒可设定如: long_query_time = 5 即设定为5s 记录下来. 如果要记录所有SQL 语法，可以写入: log-long-format (查看最常用到的栏位加index) # t=time, l=lock time, r=rows # at, al, 以及ar 是对应的平均值 Ex: 于my.cnf ([mysqld]) 加入 log-slow-queries = /var/log/mysql/mysql-slow.log long_query_time = 5 log-long-format 而那些查询速度较花时间的语法, 预设会记到MysSQL 存放处的*-slow.log 但是要怎么去分析这个log file, 就要靠MySQL 的mysqldumpslow 来分析. mysqldumpslow(Perl Script), 由里面接收变数直接捞出来, 可接受的参数有: &#8216;v+&#8217;, # [...]<div class="addthis_toolbox addthis_default_style addthis_32x32_style" addthis:url='http://slj.me/2010/12/find-out-slow-query-in-mysql/' addthis:title='找出 MySQL 里哪些查询 Query 速度较慢 ' ><a class="addthis_button_preferred_1"></a><a class="addthis_button_preferred_2"></a><a class="addthis_button_preferred_3"></a><a class="addthis_button_preferred_4"></a><a class="addthis_button_compact"></a></div>]]></description>
			<content:encoded><![CDATA[<div class="addthis_toolbox addthis_default_style " addthis:url='http://slj.me/2010/12/find-out-slow-query-in-mysql/' addthis:title='找出 MySQL 里哪些查询 Query 速度较慢 '  ><a class="addthis_button_facebook_like" fb:like:layout="button_count"></a><a class="addthis_button_tweet"></a><a class="addthis_counter addthis_pill_style"></a></div><p>转一篇文章：<br />
MySQL 中有内建的设定, 在my.cnf 中设定:<br />
log-slow-queries = [slow_query_log_filename]<br />
即可记录查询时间花费超过的10s的SQL 语法(Default).<br />
若要改5秒可设定如: long_query_time = 5 即设定为5s 记录下来.<br />
<span id="more-2095"></span></p>
<p>如果要记录所有SQL 语法，可以写入:<br />
log-long-format (查看最常用到的栏位加index)<br />
# t=time, l=lock time, r=rows<br />
# at, al, 以及ar 是对应的平均值<br />
Ex: 于my.cnf ([mysqld]) 加入</p>
<blockquote><p>log-slow-queries = /var/log/mysql/mysql-slow.log<br />
long_query_time = 5<br />
log-long-format</p></blockquote>
<p>而那些查询速度较花时间的语法, 预设会记到MysSQL 存放处的*-slow.log</p>
<p>但是要怎么去分析这个log file, 就要靠MySQL 的mysqldumpslow 来分析.<br />
mysqldumpslow(Perl Script), 由里面接收变数直接捞出来, 可接受的参数有:</p>
<blockquote><p>&#8216;v+&#8217;, # verbose<br />
&#8216;d+&#8217;, # debug<br />
&#8216;s=s&#8217;, # 排序(t, at, l, al, r, ar etc)<br />
&#8216;r!&#8217;, # 倒排序(largest last instead of first)<br />
&#8216;t=i&#8217;, # 显示最高的n 个查询<br />
&#8216;a!&#8217;, # 不把所有的数位以N, 字串以&#8217;S&#8217; 显示<br />
&#8216;n=i&#8217;, # abstract numbers with at least n digits within names<br />
&#8216;g=s&#8217;, # grep: only consider stmts that include this string<br />
&#8216;h=s&#8217;, # hostname of db server for *-slow.log filename (can be wildcard)<br />
&#8216;i=s&#8217;, # name of server instance (if using mysql.server startup script)<br />
&#8216;l!&#8217;, # don&#8217;t subtract lock time from total time</p></blockquote>
<h3>另一篇内容差不多：</h3>
<h3>MySQL慢查询分析方法：</h3>
<p>这个方法我正在用，呵呵，比较喜欢这种即时性的。<br />
MySQL5.0以上的版本可以支持将执行比较慢的SQL语句记录下来。<br />
MySQL&gt; show variables like &#8216;long%&#8217;;<br />
注：这个long_query_time是用来定义慢于多少秒的才算“慢查询”</p>
<blockquote><p>
+&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;+&#8212;&#8212;&#8212;&#8211;+<br />
| Variable_name | Value |<br />
+&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;+&#8212;&#8212;&#8212;&#8211;+<br />
| long_query_time | 10.000000 |<br />
+&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;+&#8212;&#8212;&#8212;&#8211;+<br />
1 row in set (0.00 sec)</p></blockquote>
<p>MySQL&gt; set long_query_time=1;<br />
注： 我设置了1, 也就是执行时间超过1秒的都算慢查询。</p>
<blockquote><p>
Query OK, 0 rows affected (0.00 sec)</p></blockquote>
<p>MySQL&gt; show variables like &#8216;slow%&#8217;;</p>
<blockquote><p>
+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;+&#8212;&#8212;&#8212;&#8212;&#8212;+<br />
| Variable_name | Value |<br />
+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;+&#8212;&#8212;&#8212;&#8212;&#8212;+<br />
| slow_launch_time | 2 |<br />
| slow_query_log | ON |     注：是否打开日志记录<br />
| slow_query_log_file | /tmp/slow.log |     注： 设置到什么位置<br />
+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;+&#8212;&#8212;&#8212;&#8212;&#8212;+<br />
3 rows in set (0.00 sec)</p></blockquote>
<p>MySQL&gt; set global slow_query_log=&#8217;ON&#8217;<br />
注：打开日志记录<br />
一旦slow_query_log变量被设置为ON，MySQL会立即开始记录。<br />
/etc/my.cnf 里面可以设置上面MySQL全局变量的初始值。<br />
long_query_time=1</p>
<div>slow_query_log_file=/tmp/slow.log<br />
参考: <a rel="external nofollow" href="http://freelamp.com/1102605188/index_html">MySQL自带的slow log分析工具mysqldumpslow</a></p>
<p>PS:另外也是加上log-query-time下面的参数: log-queries-not-using-indexes看起来也不错,详细可见; <a rel="external nofollow" href="http://dev.mysql.com/doc/refman/4.1/en/slow-query-log.html">The Slow Query Log .</a></div>
<div class="addthis_toolbox addthis_default_style addthis_32x32_style" addthis:url='http://slj.me/2010/12/find-out-slow-query-in-mysql/' addthis:title='找出 MySQL 里哪些查询 Query 速度较慢 ' ><a class="addthis_button_preferred_1"></a><a class="addthis_button_preferred_2"></a><a class="addthis_button_preferred_3"></a><a class="addthis_button_preferred_4"></a><a class="addthis_button_compact"></a></div><h2  class="related_post_title">Related Posts / 相关文章</h2><ul class="related_post"><li><a href="http://slj.me/2011/10/mysql-save-query-result-to-a-file/" title="MySQL 把查询结果保存到文件中的方法">MySQL 把查询结果保存到文件中的方法</a></li><li><a href="http://slj.me/2011/03/share-bash-script/" title="分享两则我在VPS上执行的sh脚本">分享两则我在VPS上执行的sh脚本</a></li><li><a href="http://slj.me/2011/03/mysql-replication-master-slave/" title="总结: MySQL主从复制 &#8211; MySQL Replication">总结: MySQL主从复制 &#8211; MySQL Replication</a></li><li><a href="http://slj.me/2010/04/mysql-group-by-having/" title="MySQL: group by &#8230; having &#8230;">MySQL: group by &#8230; having &#8230;</a></li><li><a href="http://slj.me/2010/01/mysql%e5%8f%96%e6%95%b4%e5%87%bd%e6%95%b0/" title="MySql取整函数">MySql取整函数</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://slj.me/2010/12/find-out-slow-query-in-mysql/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>MySQL: group by &#8230; having &#8230;</title>
		<link>http://slj.me/2010/04/mysql-group-by-having/</link>
		<comments>http://slj.me/2010/04/mysql-group-by-having/#comments</comments>
		<pubDate>Sun, 11 Apr 2010 04:41:49 +0000</pubDate>
		<dc:creator>SLJ</dc:creator>
				<category><![CDATA[MySQL]]></category>
		<category><![CDATA[select]]></category>

		<guid isPermaLink="false">http://slj.me/?p=1689</guid>
		<description><![CDATA[<div class="addthis_toolbox addthis_default_style " addthis:url='http://slj.me/2010/04/mysql-group-by-having/' addthis:title='MySQL: group by &#8230; having &#8230; '  ><a class="addthis_button_facebook_like" fb:like:layout="button_count"></a><a class="addthis_button_tweet"></a><a class="addthis_counter addthis_pill_style"></a></div>group by就是按照不同的字段进行分组，数值可以实现汇总 例如数据库中有A表，包括学生，学科，成绩三个字段 数据库结构为 学生 学科 成绩 张三 语文 80 张三 数学 100 李四 语文 70 李四 数学 80 李四 英语 80 那么 select 学生,sum(成绩) from A group by 学生; 得到如下结果 学生 成绩 张三 180 李四 230 ============================================================== 如果考虑having 语句写成： select 学生,sum(成绩) from A group by 学生 having 成绩=80; 得到结果就是这样的 学生 成绩 张三 80 李四 [...]<div class="addthis_toolbox addthis_default_style addthis_32x32_style" addthis:url='http://slj.me/2010/04/mysql-group-by-having/' addthis:title='MySQL: group by &#8230; having &#8230; ' ><a class="addthis_button_preferred_1"></a><a class="addthis_button_preferred_2"></a><a class="addthis_button_preferred_3"></a><a class="addthis_button_preferred_4"></a><a class="addthis_button_compact"></a></div>]]></description>
			<content:encoded><![CDATA[<div class="addthis_toolbox addthis_default_style " addthis:url='http://slj.me/2010/04/mysql-group-by-having/' addthis:title='MySQL: group by &#8230; having &#8230; '  ><a class="addthis_button_facebook_like" fb:like:layout="button_count"></a><a class="addthis_button_tweet"></a><a class="addthis_counter addthis_pill_style"></a></div><p>group by就是按照不同的字段进行分组，数值可以实现汇总<br />
例如数据库中有A表，包括学生，学科，成绩三个字段<br />
数据库结构为<br />
学生 学科 成绩<br />
张三 语文 80<br />
张三 数学 100<br />
李四 语文 70<br />
李四 数学 80<br />
李四 英语 80</p>
<p>那么<br />
select 学生,sum(成绩) from A group by 学生;<br />
得到如下结果</p>
<p>学生 成绩<br />
张三 180<br />
李四 230<br />
==============================================================<br />
如果考虑having<br />
语句写成：<br />
select 学生,sum(成绩) from A group by 学生 having 成绩=80;<br />
得到结果就是这样的</p>
<p>学生 成绩<br />
张三 80<br />
李四 160</p>
<p>用having比 JOIN ON 相对好理解一些，简单一些。</p>
<div class="addthis_toolbox addthis_default_style addthis_32x32_style" addthis:url='http://slj.me/2010/04/mysql-group-by-having/' addthis:title='MySQL: group by &#8230; having &#8230; ' ><a class="addthis_button_preferred_1"></a><a class="addthis_button_preferred_2"></a><a class="addthis_button_preferred_3"></a><a class="addthis_button_preferred_4"></a><a class="addthis_button_compact"></a></div><h2  class="related_post_title">Related Posts / 相关文章</h2><ul class="related_post"><li><a href="http://slj.me/2011/10/mysql-save-query-result-to-a-file/" title="MySQL 把查询结果保存到文件中的方法">MySQL 把查询结果保存到文件中的方法</a></li><li><a href="http://slj.me/2011/03/share-bash-script/" title="分享两则我在VPS上执行的sh脚本">分享两则我在VPS上执行的sh脚本</a></li><li><a href="http://slj.me/2011/03/mysql-replication-master-slave/" title="总结: MySQL主从复制 &#8211; MySQL Replication">总结: MySQL主从复制 &#8211; MySQL Replication</a></li><li><a href="http://slj.me/2010/12/javascript-select-operations/" title="JavaScript 操作select控件大全（新增、修改、删除、选中、清空、判断存在等）">JavaScript 操作select控件大全（新增、修改、删除、选中、清空、判断存在等）</a></li><li><a href="http://slj.me/2010/12/find-out-slow-query-in-mysql/" title="找出 MySQL 里哪些查询 Query 速度较慢">找出 MySQL 里哪些查询 Query 速度较慢</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://slj.me/2010/04/mysql-group-by-having/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>[原创]多选/全选checkbox，AJAX提交。另附IE的onchange BUG</title>
		<link>http://slj.me/2010/03/multiple-selectable-checkbox-ajax-submit/</link>
		<comments>http://slj.me/2010/03/multiple-selectable-checkbox-ajax-submit/#comments</comments>
		<pubDate>Sat, 06 Mar 2010 06:50:17 +0000</pubDate>
		<dc:creator>SLJ</dc:creator>
				<category><![CDATA[Design]]></category>
		<category><![CDATA[HTML/CSS]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Projects]]></category>
		<category><![CDATA[ajax]]></category>
		<category><![CDATA[checkbox]]></category>
		<category><![CDATA[MeePlace]]></category>
		<category><![CDATA[onchange]]></category>

		<guid isPermaLink="false">http://slj.me/?p=1501</guid>
		<description><![CDATA[<div class="addthis_toolbox addthis_default_style " addthis:url='http://slj.me/2010/03/multiple-selectable-checkbox-ajax-submit/' addthis:title='[原创]多选/全选checkbox，AJAX提交。另附IE的onchange BUG '  ><a class="addthis_button_facebook_like" fb:like:layout="button_count"></a><a class="addthis_button_tweet"></a><a class="addthis_counter addthis_pill_style"></a></div>最近在为MeePlace 2.7的后台编写多选功能。在一个接一个的版本中，MeePlace的后台是越来越强大了（不够谦虚，hoho），后台采用纯ajax异步（有的时候觉得编程会有点麻烦，但是从1.0开始就是这样的后台，现在要改的话也麻烦，况且AJAX能给用户带来更好的体验，就继续开发吧：D） 这次后台增加的功能中，有一个是能够多选/全选项目，这个已经是历史遗留问题了，在我所有开发的项目中都是用这套自己开发的后台系统，改一改就成。这次布莱恩吧multi-selectable列在了Milestone里，所以就写了。以前有做过多选，不过由于是原始form的post，所以比较简单。这次用AJAX的后台多选操作，我还是想了一下才开始动手的。 我的想法是，通过遍历checkbox，来得到有被选定了的checkbox的value，然后再传给后端进行多选处理。 下面公开MeePlace的这部分代码。 全选按钮。用户点击全选的那个checkbox后，checkbox的onclick=&#8221;select_item_all(this,&#8221;allitem&#8221;,&#8221;childitem&#8221;)&#8221; 其中&#8221;allitem&#8221;是全选的checkbox的classname，因为也许这个全选会出现两个，或者更多，比如表头和表尾各一。 &#8220;childitem&#8221;是所有的条目前的checkbox的classname。 JS代码： //全选按钮 function select_item_all(whochecked,allitem,childitem) { if(whochecked==true) { $('.'+allitem).attr('checked',true); $('.'+childitem).attr('checked',true); $('.itemtr').addClass('trselected'); } else { $('.'+allitem).attr('checked',false); $('.'+childitem).attr('checked',false); $('.itemtr').removeClass('trselected'); } } 这样通过判断提交全选的checkbox是否被勾选，来达到全选目的。 下面的代码是点击&#8221;Delete selected&#8221;（“删除所选”）之后，扫描所选中的checkbox的value以及发出警告和异步提交的代码 JS代码： function delselected(sheet,where,childitem) { //通过扫描制定childitem（项目前的checkbox的classname），来获取选中了的项目IDs var selected_ids=''; var obj=$("input:checked[class='"+childitem+"']"); $.each(obj, function(i,item){ selected_ids+= $(item).val() +','; }); if(selected_ids) { var a=confirm("CAUTION! You are going to delete a quantity [...]<div class="addthis_toolbox addthis_default_style addthis_32x32_style" addthis:url='http://slj.me/2010/03/multiple-selectable-checkbox-ajax-submit/' addthis:title='[原创]多选/全选checkbox，AJAX提交。另附IE的onchange BUG ' ><a class="addthis_button_preferred_1"></a><a class="addthis_button_preferred_2"></a><a class="addthis_button_preferred_3"></a><a class="addthis_button_preferred_4"></a><a class="addthis_button_compact"></a></div>]]></description>
			<content:encoded><![CDATA[<div class="addthis_toolbox addthis_default_style " addthis:url='http://slj.me/2010/03/multiple-selectable-checkbox-ajax-submit/' addthis:title='[原创]多选/全选checkbox，AJAX提交。另附IE的onchange BUG '  ><a class="addthis_button_facebook_like" fb:like:layout="button_count"></a><a class="addthis_button_tweet"></a><a class="addthis_counter addthis_pill_style"></a></div><p>    最近在为MeePlace 2.7的后台编写多选功能。在一个接一个的版本中，MeePlace的后台是越来越强大了（不够谦虚，hoho），后台采用纯ajax异步（有的时候觉得编程会有点麻烦，但是从1.0开始就是这样的后台，现在要改的话也麻烦，况且AJAX能给用户带来更好的体验，就继续开发吧：D）</p>
<p>这次后台增加的功能中，有一个是能够多选/全选项目，这个已经是历史遗留问题了，在我所有开发的项目中都是用这套自己开发的后台系统，改一改就成。这次布莱恩吧multi-selectable列在了Milestone里，所以就写了。以前有做过多选，不过由于是原始form的post，所以比较简单。这次用AJAX的后台多选操作，我还是想了一下才开始动手的。</p>
<p>我的想法是，通过遍历checkbox，来得到有被选定了的checkbox的value，然后再传给后端进行多选处理。</p>
<p>下面公开MeePlace的这部分代码。</p>
<p><img src="http://slj.me/wp-content/uploads/2010/03/meeplace-multi-check.png" alt="" title="meeplace-multi-check" width="430" height="270" class="alignnone size-full wp-image-1503" /></p>
<p>全选按钮。用户点击全选的那个checkbox后，checkbox的onclick=&#8221;select_item_all(this,&#8221;allitem&#8221;,&#8221;childitem&#8221;)&#8221;<br />
其中&#8221;allitem&#8221;是全选的checkbox的classname，因为也许这个全选会出现两个，或者更多，比如表头和表尾各一。<br />
&#8220;childitem&#8221;是所有的条目前的checkbox的classname。<br />
JS代码：<br />
<span id="more-1501"></span></p>
<pre name="code" class="js">
//全选按钮
function select_item_all(whochecked,allitem,childitem)
{
 if(whochecked==true)
 {
  $('.'+allitem).attr('checked',true);
  $('.'+childitem).attr('checked',true);
  $('.itemtr').addClass('trselected');
 }
 else
 {
  $('.'+allitem).attr('checked',false);
  $('.'+childitem).attr('checked',false);
  $('.itemtr').removeClass('trselected');
 }
}
</pre>
<p>这样通过判断提交全选的checkbox是否被勾选，来达到全选目的。</p>
<p>下面的代码是点击&#8221;Delete selected&#8221;（“删除所选”）之后，扫描所选中的checkbox的value以及发出警告和异步提交的代码<br />
JS代码：</p>
<pre name="code" class="js">
function delselected(sheet,where,childitem)
{
//通过扫描制定childitem（项目前的checkbox的classname），来获取选中了的项目IDs
   var selected_ids='';
   var obj=$("input:checked[class='"+childitem+"']");
    $.each(obj, function(i,item){
       selected_ids+= $(item).val() +',';
     });  

if(selected_ids)
{
 var a=confirm("CAUTION! You are going to delete a quantity of items.\n\rThese items will never be restored after deleted.\n\rSure to delete these items?");
if(a==0) return ;
}
else   //没有发现选中的checkbox
{
 alert('You have not selected any item.');
 return;
}

 //通过jQuery的$.post来异步提交数据
$.post("/mgt/func/delete.php?"+Math.random(), {
sheet:sheet,
where:where,
equal:selected_ids
},function(data){tips('Items deleted.');nav();});

}
</pre>
<p>对应 delete.php的代码，虽然代码不安全，能够直接注入的样子，直接操作数据库。但是出于是后台的代码，而且MeePlace对SESSION的检验非常严格，所以就这么用了，我想没有一个Admin想用自己的Admin权限黑自己的网站的。LOL<br />
PHP代码：</p>
<blockquote><p>//检查_SESSION</p>
<p>//自己的数据库连接，或者是框架的数据库接口</p>
<p>///传递过来的值，equals是所选ID经过explode()函数之后得出的数组<br />
$sheet=$_REQUEST[sheet]; //<br />
 $where=$_REQUEST[where]; //<br />
 $equal=$_REQUEST[equal]; // </p>
<p> $equals = explode(&#8220;,&#8221;, $equal);<br />
/// 循环删除数据库中的制定条目<br />
$i=0;<br />
while($i<count ($equals)) {<br />
	if($equals[$i]){<br />
		$query="delete from `$sheet` where `$where`= '$equals[$i]'  limit 1";<br />
		$rc=mysql_query("$query") or die("ERROR: $query");<br />
		$output.=$query."\n\r";<br />
	}<br />
	 $i++;<br />
}</p></blockquote>
<h3 style="color:red">另外如果你想通过checkbox的onchange来调用全选函数的话，结果是：IE不支持！最后只好使用onclick来实现了。这个也是历史遗留问题。算是IE的一个不愿解决的BUG</h3>
<p></count></p></blockquote>
<div class="addthis_toolbox addthis_default_style addthis_32x32_style" addthis:url='http://slj.me/2010/03/multiple-selectable-checkbox-ajax-submit/' addthis:title='[原创]多选/全选checkbox，AJAX提交。另附IE的onchange BUG ' ><a class="addthis_button_preferred_1"></a><a class="addthis_button_preferred_2"></a><a class="addthis_button_preferred_3"></a><a class="addthis_button_preferred_4"></a><a class="addthis_button_compact"></a></div><h2  class="related_post_title">Related Posts / 相关文章</h2><ul class="related_post"><li><a href="http://slj.me/2010/05/whats-new-for-meeplace-2-8/" title="What&#8217;s new for Meeplace 2.8">What&#8217;s new for Meeplace 2.8</a></li><li><a href="http://slj.me/2010/02/meeplace-2-6-release-feb-13-2010/" title="Meeplace 2.6 Release [Feb 13, 2010]">Meeplace 2.6 Release [Feb 13, 2010]</a></li><li><a href="http://slj.me/2010/01/%e4%bb%8a%e6%97%a5%e6%96%b0%e9%97%bb%ef%bc%9ameeplace-llc%e5%9c%a8%e5%8c%97%e7%be%8e%e6%b3%a8%e5%86%8c/" title="今日新闻：MeePlace LLC在北美注册">今日新闻：MeePlace LLC在北美注册</a></li><li><a href="http://slj.me/2010/01/%e5%85%b3%e4%ba%8emeeplace-2-4%e7%9a%84%e4%b8%ad%e6%96%87%e7%89%88%e8%af%b4%e6%98%8e/" title="我的近况与MeePlace 2.4说明">我的近况与MeePlace 2.4说明</a></li><li><a href="http://slj.me/2010/01/theme-upgrade-advice-for-meeplace-2-4/" title="Theme Upgrade Advice For MeePlace 2.4">Theme Upgrade Advice For MeePlace 2.4</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://slj.me/2010/03/multiple-selectable-checkbox-ajax-submit/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>MySql取整函数</title>
		<link>http://slj.me/2010/01/mysql%e5%8f%96%e6%95%b4%e5%87%bd%e6%95%b0/</link>
		<comments>http://slj.me/2010/01/mysql%e5%8f%96%e6%95%b4%e5%87%bd%e6%95%b0/#comments</comments>
		<pubDate>Sun, 24 Jan 2010 12:05:17 +0000</pubDate>
		<dc:creator>SLJ</dc:creator>
				<category><![CDATA[MySQL]]></category>
		<category><![CDATA[函数]]></category>
		<category><![CDATA[取整]]></category>

		<guid isPermaLink="false">http://slj.me/?p=1450</guid>
		<description><![CDATA[<div class="addthis_toolbox addthis_default_style " addthis:url='http://slj.me/2010/01/mysql%e5%8f%96%e6%95%b4%e5%87%bd%e6%95%b0/' addthis:title='MySql取整函数 '  ><a class="addthis_button_facebook_like" fb:like:layout="button_count"></a><a class="addthis_button_tweet"></a><a class="addthis_counter addthis_pill_style"></a></div>1.ceil （） /ceiling（） 向上取整 ex： ceil（1.2） = 2 2.floor （） 向下取整 ex： floor（1.2） = 1 3.round（） 四舍五入 Related Posts / 相关文章MySQL 把查询结果保存到文件中的方法分享两则我在VPS上执行的sh脚本总结: MySQL主从复制 &#8211; MySQL Replication找出 MySQL 里哪些查询 Query 速度较慢MySQL: group by &#8230; having &#8230;<div class="addthis_toolbox addthis_default_style addthis_32x32_style" addthis:url='http://slj.me/2010/01/mysql%e5%8f%96%e6%95%b4%e5%87%bd%e6%95%b0/' addthis:title='MySql取整函数 ' ><a class="addthis_button_preferred_1"></a><a class="addthis_button_preferred_2"></a><a class="addthis_button_preferred_3"></a><a class="addthis_button_preferred_4"></a><a class="addthis_button_compact"></a></div>]]></description>
			<content:encoded><![CDATA[<div class="addthis_toolbox addthis_default_style " addthis:url='http://slj.me/2010/01/mysql%e5%8f%96%e6%95%b4%e5%87%bd%e6%95%b0/' addthis:title='MySql取整函数 '  ><a class="addthis_button_facebook_like" fb:like:layout="button_count"></a><a class="addthis_button_tweet"></a><a class="addthis_counter addthis_pill_style"></a></div><p>1.ceil （） /ceiling（） 向上取整</p>
<p>   ex： ceil（1.2） = 2</p>
<p>2.floor （） 向下取整</p>
<p>    ex： floor（1.2） = 1</p>
<p>3.round（） 四舍五入</p>
<div class="addthis_toolbox addthis_default_style addthis_32x32_style" addthis:url='http://slj.me/2010/01/mysql%e5%8f%96%e6%95%b4%e5%87%bd%e6%95%b0/' addthis:title='MySql取整函数 ' ><a class="addthis_button_preferred_1"></a><a class="addthis_button_preferred_2"></a><a class="addthis_button_preferred_3"></a><a class="addthis_button_preferred_4"></a><a class="addthis_button_compact"></a></div><h2  class="related_post_title">Related Posts / 相关文章</h2><ul class="related_post"><li><a href="http://slj.me/2011/10/mysql-save-query-result-to-a-file/" title="MySQL 把查询结果保存到文件中的方法">MySQL 把查询结果保存到文件中的方法</a></li><li><a href="http://slj.me/2011/03/share-bash-script/" title="分享两则我在VPS上执行的sh脚本">分享两则我在VPS上执行的sh脚本</a></li><li><a href="http://slj.me/2011/03/mysql-replication-master-slave/" title="总结: MySQL主从复制 &#8211; MySQL Replication">总结: MySQL主从复制 &#8211; MySQL Replication</a></li><li><a href="http://slj.me/2010/12/find-out-slow-query-in-mysql/" title="找出 MySQL 里哪些查询 Query 速度较慢">找出 MySQL 里哪些查询 Query 速度较慢</a></li><li><a href="http://slj.me/2010/04/mysql-group-by-having/" title="MySQL: group by &#8230; having &#8230;">MySQL: group by &#8230; having &#8230;</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://slj.me/2010/01/mysql%e5%8f%96%e6%95%b4%e5%87%bd%e6%95%b0/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>好书推荐-《PHP与MySQL程序设计（第3版）》</title>
		<link>http://slj.me/2009/05/book-beginingphpandmysql/</link>
		<comments>http://slj.me/2009/05/book-beginingphpandmysql/#comments</comments>
		<pubDate>Sat, 02 May 2009 15:02:32 +0000</pubDate>
		<dc:creator>SLJ</dc:creator>
				<category><![CDATA[Apache/Nginx]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[好书]]></category>
		<category><![CDATA[推荐]]></category>
		<category><![CDATA[程序设计]]></category>
		<category><![CDATA[第3版]]></category>

		<guid isPermaLink="false">http://kiya.cn/?p=390</guid>
		<description><![CDATA[<div class="addthis_toolbox addthis_default_style " addthis:url='http://slj.me/2009/05/book-beginingphpandmysql/' addthis:title='好书推荐-《PHP与MySQL程序设计（第3版）》 '  ><a class="addthis_button_facebook_like" fb:like:layout="button_count"></a><a class="addthis_button_tweet"></a><a class="addthis_counter addthis_pill_style"></a></div>     上了大学，在图书馆看了很多的书，各个方面从UI一直到PHP，自我感觉比较好的书不多，特别是UI方面的书，好的书很少。身边有的学习HTML的同学，我把他们借的书翻开目录一看就帮他们删章节，因为有的章节看了也没用，比如“如何用表格布局网页”，这已经是淘汰的技术了，只能稍微了解了解，不能养成习惯。      我认为，一本介绍计算机技术的书，应该以实用为主，全面为辅。例如，有些HTML书介绍标签介绍的非常全面（恰恰没有HTML5中的canvas这一类重要标签），然而我们平时的使用几乎用不到那些“全面的”标签（比如&#60;font&#62;之类被淘汰的标签等），而重要的部分如“不同浏览器的hack”这一基本的内容却没有介绍到。      其实好的书还是有的，我认为图灵以及人民邮电出版社的部分图书我最喜欢，      我会相继在我博客贴上我所看过的好书，敬请关注。 《PHP与MySQL程序设计（第3版）》        先说说这本书，PHP方面的基础类图书，我最喜欢的是这本，虽然厚了一点，但是说的非常全面，也很实用，特别是“高级OOP面向对象编程”以及后面的 Smarty、MVC的部分都很 up-to-date，我认为这本书作为PHP起步来说很值得读，后几章介绍数据库的内容也很好。        喜欢的同学可以去网上买，或者图书馆也能借得到（有一本目前还在我的^_^）         下面是转载来的图书信息。 【内容简介】         PHP语言和 MySQL 数据库这两种开源技术已经成为开发Web应用的最佳组合。Web 2.0为它们提供了更广阔的天地。 　　本书全面介绍PHP脚本语言和MySQL数据库这两种目前最流行的开源软件，主要内容包括PHP和MySQL基本概念、PHP扩展与应用库、日期和时间功能、PHP数据对象扩展、PHP的mysqli扩展、MySQL 5的存储例程、触发器和视图等。本书实用性强，帮助读者学习PHP编程语言和MySQL数据库服务器的最佳实践，了解如何结合这些卓越的技术创建数据库驱动的动态Web应用程序。 　　本书适合于Web开发的新手阅读，也适合作为各层次PHP和MySQL开发人员的参考书。        本书是久负盛名的经典著作，以内容全面、讲解翔实而著称。书中对主题的选取和组织从实用出发，在讲述知识之外还加入了作者多年积累的宝贵实战经验，并提供了500多个可以直接用于实际项目的代码示例，充分体现了作者深厚的开发功力。这一版不仅对原有章节进行了全面的修订、更新和改进，还加入了PHP 6和MySQL最新版本中的新特性，包括如何利用国际化和本地化开源工具创建面向全世界的Web网站，开发强大Web应用的利器MVC模式与Zend框架。.. 作者为本书专门开设了配套网站http://www.beginningphpandmysql.com，也可以通过Twitter（http://twitter.com/begphpandmysql）了解更多信息。&#8230; 【作译者介绍】 本书提供作译者介绍 W. Jason Gilmore，世界知名的软件技术专家，CodeMash技术大会创始人之一，MySQL全球技术大会顾问委员会成员。他曾负责Apress出版公司开源图书出版项目，开发了大量PHP和MySQL应用程序，并在各大专业媒体发表了众多有影响的技术文章。他的个人网站是http://www.wjgilmore.com。&#8230; 【前言】 最好的编程图书应该不是纯粹地讲述理论，而是要切合实际。虽然我没有幻想自己会成为当代最伟大的技术作家，但在写书过程中，我一直都以此为目标，努力让所写的内容能用到实处。以本书的篇幅来看，很明显，我在竭尽所能地提供这种实用性。也就是说，如果你希望获得PHP编程语言和MySQL数据库服务器的实践经验，对它们有全面的了解，并且想知道如何结合这些卓越的技术创建数据库驱动的动态Web应用程序，那么本书正合你所需。. 各个PHP和MySQL社区的狂热工作促使了本书新版本的诞生，它较之前的版本有了很大的变化。本版不但加入了PHP 6和最新的MySQL版本中出现的新特性，还另外增加了两章全新的内容。 【目录信息】 第1章　PHP概述　1 1.1　历史　1 1.1.1　PHP 4　2 1.1.2　PHP 5　3 1.2　PHP的一般特性　3 1.2.1　实用性　3 1.2.2　强大功能　4 1.2.3　可选择性　4 1.2.4　成本　5 1.3　小结　5 第2章　安装配置Apache和PHP　6 2.1　安装　6 2.1.1　获得发行包　6 2.1.2　安装过程　7 2.1.3　测试安装　11 [...]<div class="addthis_toolbox addthis_default_style addthis_32x32_style" addthis:url='http://slj.me/2009/05/book-beginingphpandmysql/' addthis:title='好书推荐-《PHP与MySQL程序设计（第3版）》 ' ><a class="addthis_button_preferred_1"></a><a class="addthis_button_preferred_2"></a><a class="addthis_button_preferred_3"></a><a class="addthis_button_preferred_4"></a><a class="addthis_button_compact"></a></div>]]></description>
			<content:encoded><![CDATA[<div class="addthis_toolbox addthis_default_style " addthis:url='http://slj.me/2009/05/book-beginingphpandmysql/' addthis:title='好书推荐-《PHP与MySQL程序设计（第3版）》 '  ><a class="addthis_button_facebook_like" fb:like:layout="button_count"></a><a class="addthis_button_tweet"></a><a class="addthis_counter addthis_pill_style"></a></div><p><span style="color: #000080;">     上了大学，在图书馆看了很多的书，各个方面从UI一直到PHP，自我感觉比较好的书不多，特别是UI方面的书，好的书很少。身边有的学习HTML的同学，我把他们借的书翻开目录一看就帮他们删章节，因为有的章节看了也没用，比如“如何用表格布局网页”，这已经是淘汰的技术了，只能稍微了解了解，不能养成习惯。<br />
     我认为，一本介绍计算机技术的书，<span style="text-decoration: underline;">应该以实用为主，全面为辅</span>。例如，有些HTML书介绍标签介绍的非常全面（恰恰没有HTML5中的canvas这一类重要标签），然而我们平时的使用几乎用不到那些“全面的”标签（比如&lt;font&gt;之类被淘汰的标签等），而重要的部分如“不同浏览器的hack”这一基本的内容却没有介绍到。<br />
</span><span style="color: #000080;">     其实好的书还是有的，我认为图灵以及人民邮电出版社的部分图书我最喜欢，<br />
<span style="color: #000080;">     </span>我会相继在我博客贴上我所看过的好书，敬请关注。</span></p>
<h3 style="text-align: center;"><span style="color: #900;">《PHP与MySQL程序设计（第3版）》</span></h3>
<p><span style="color: #800000;">       先说说这本书，PHP方面的基础类图书，我最喜欢的是这本，虽然厚了一点，但是说的非常全面，也很实用，特别是“高级OOP面向对象编程”以及后面的 Smarty、MVC的部分都很 up-to-date，我认为这本书作为PHP起步来说很值得读，后几章介绍数据库的内容也很好。<br />
       喜欢的同学可以去网上买，或者图书馆也能借得到（有一本目前还在我的^_^）<br />
        </span><span style="color: #800000;">下面是转载来的图书信息。<br />
</span><br />
<img class="alignnone size-full wp-image-391" style="float:left; margin:20px;" title="book-phpmysql" src="http://kiya.cn/wp-content/uploads/2009/05/1_2009042918061218iua.jpg" alt="book-phpmysql" width="142" height="184" /></p>
<p><strong>【内容简介】</strong><br />
        PHP语言和 MySQL 数据库这两种开源技术已经成为开发Web应用的最佳组合。Web 2.0为它们提供了更广阔的天地。<br />
<span id="ctl00_ContentPlaceHolder1_DetailsView1_DESCRIPTIONLabel">　　本书全面介绍PHP脚本语言和MySQL数据库这两种目前最流行的开源软件，主要内容包括PHP和MySQL基本概念、PHP扩展与应用库、日期和时间功能、PHP数据对象扩展、PHP的mysqli扩展、MySQL 5的存储例程、触发器和视图等。本书实用性强，帮助读者学习PHP编程语言和MySQL数据库服务器的最佳实践，了解如何结合这些卓越的技术创建数据库驱动的动态Web应用程序。<br />
　　本书适合于Web开发的新手阅读，也适合作为各层次PHP和MySQL开发人员的参考书。</span> <br />
     <span id="more-390"></span> 本书是久负盛名的经典著作，以内容全面、讲解翔实而著称。书中对主题的选取和组织从实用出发，在讲述知识之外还加入了作者多年积累的宝贵实战经验，并提供了500多个可以直接用于实际项目的代码示例，充分体现了作者深厚的开发功力。这一版不仅对原有章节进行了全面的修订、更新和改进，还加入了PHP 6和MySQL最新版本中的新特性，包括如何利用国际化和本地化开源工具创建面向全世界的Web网站，开发强大Web应用的利器MVC模式与Zend框架。..</p>
<p>作者为本书专门开设了配套网站<a href="http://www.beginningphpandmysql.com/" target="_blank"><span style="color: #07519a;">http://www.beginningphpandmysql.com</span></a>，也可以通过Twitter（<a href="http://twitter.com/begphpandmysql" target="_blank"><span style="color: #07519a;">http://twitter.com/begphpandmysql</span></a>）了解更多信息。&#8230;</p>
<p><img class="alignnone size-full wp-image-415" style="float:right; margin:10px;" title="PHPandMYSQL" src="http://kiya.cn/wp-content/uploads/2009/05/1590598627.gif" alt="PHPandMYSQL" width="120" height="150" /><strong>【作译者介绍】</strong><br />
本书提供作译者介绍<br />
W. Jason Gilmore，世界知名的软件技术专家，CodeMash技术大会创始人之一，MySQL全球技术大会顾问委员会成员。他曾负责Apress出版公司开源图书出版项目，开发了大量PHP和MySQL应用程序，并在各大专业媒体发表了众多有影响的技术文章。他的个人网站是<a href="http://www.wjgilmore.com/" target="_blank"><span style="color: #07519a;">http://www.wjgilmore.com</span></a>。&#8230;</p>
<p><strong>【前言】</strong><br />
最好的编程图书应该不是纯粹地讲述理论，而是要切合实际。虽然我没有幻想自己会成为当代最伟大的技术作家，但在写书过程中，我一直都以此为目标，努力让所写的内容能用到实处。以本书的篇幅来看，很明显，我在竭尽所能地提供这种实用性。也就是说，如果你希望获得PHP编程语言和MySQL数据库服务器的实践经验，对它们有全面的了解，并且想知道如何结合这些卓越的技术创建数据库驱动的动态Web应用程序，那么本书正合你所需。.<br />
各个PHP和MySQL社区的狂热工作促使了本书新版本的诞生，它较之前的版本有了很大的变化。本版不但加入了PHP 6和最新的MySQL版本中出现的新特性，还另外增加了两章全新的内容。</p>
<p><strong>【目录信息】</strong></p>
<blockquote><p>第1章　PHP概述　1<br />
1.1　历史　1<br />
1.1.1　PHP 4　2<br />
1.1.2　PHP 5　3<br />
1.2　PHP的一般特性　3<br />
1.2.1　实用性　3<br />
1.2.2　强大功能　4<br />
1.2.3　可选择性　4<br />
1.2.4　成本　5<br />
1.3　小结　5</p>
<p>第2章　安装配置Apache和PHP　6<br />
2.1　安装　6<br />
2.1.1　获得发行包　6<br />
2.1.2　安装过程　7<br />
2.1.3　测试安装　11<br />
2.1.4　定制UNIX构建　12<br />
2.1.5　定制Windows构建　12<br />
2.1.6　常见错误　13<br />
2.1.7　查看并下载文档　13<br />
2.2　配置　13<br />
2.2.1　管理PHP的配置指令　14<br />
2.2.2　PHP的配置指令　15<br />
2.3　小结　29</p>
<p>第3章　PHP基础　30<br />
3.1　界定PHP代码　30<br />
3.1.1　默认语法　30<br />
3.1.2　短标记　31<br />
3.1.3　脚本　31<br />
3.1.4　ASP风格　32<br />
3.1.5　嵌入多个代码块　32<br />
3.2　注释　32<br />
3.2.1　单行C++语法　32<br />
3.2.2　Shell语法　32<br />
3.2.3　多行C语法　33<br />
3.3　输出　33<br />
3.3.1　print()　33<br />
3.3.2　echo()　34<br />
3.3.3　printf()　34<br />
3.3.4　sprintf()　35<br />
3.4　数据类型　35<br />
3.4.1　标量数据类型　35<br />
3.4.2　复合数据类型　37<br />
3.4.3　特殊数据类型　38<br />
3.4.4　类型强制转换　38<br />
3.4.5　类型自动转换　39<br />
3.4.6　与类型有关的函数　40<br />
3.4.7　类型标识符函数　40<br />
3.5　标识符　41<br />
3.6　变量　41<br />
3.6.1　变量声明　42<br />
3.6.2　变量作用域　43<br />
3.6.3　PHP的超级全局变量　45<br />
3.6.4　变量的变量　48<br />
3.7　常量　49<br />
3.8　表达式　49<br />
3.8.1　操作数　50<br />
3.8.2　操作符　50<br />
3.9　字符串插入　54<br />
3.9.1　双引号　55<br />
3.9.2　单引号　55<br />
3.9.3　Heredoc　56<br />
3.10　控制结构　56<br />
3.10.1　执行控制语句　57<br />
3.10.2　条件语句　57<br />
3.10.3　循环语句　59<br />
3.10.4　文件包含语句　63<br />
3.10.5　require_once()　65<br />
3.11　小结　65</p>
<p>第4章　函数　66<br />
4.1　调用函数　66<br />
4.2　创建函数　66<br />
4.2.1　按值传递参数　67<br />
4.2.2　按引用传递参数　68<br />
4.2.3　默认参数值　68<br />
4.2.4　可选参数　68<br />
4.2.5　从函数返回值　69<br />
4.2.6　嵌套函数　70<br />
4.2.7　递归函数　70<br />
4.2.8　变量函数　72<br />
4.3　函数库　73<br />
4.4　小结　74</p>
<p>第5章　数组　75<br />
5.1　什么是数组　75<br />
5.2　输出数组　76<br />
5.3　创建数组　77<br />
5.4　测试数组　79<br />
5.5　增加和删除数组元素　79<br />
5.6　定位数组元素　81<br />
5.7　遍历数组　82<br />
5.8　确定数组大小和唯一性　85<br />
5.9　数组排序　86<br />
5.10　合并、拆分、接合和分解数组　91<br />
5.11　其他有用的数组函数　95<br />
5.12　小结　96</p>
<p>第6章　面向对象的PHP　97<br />
6.1　OOP的好处　97<br />
6.1.1　封装　97<br />
6.1.2　继承　98<br />
6.1.3　多态　98<br />
6.2　关键的OOP概念　99<br />
6.2.1　类　99<br />
6.2.2　对象　99<br />
6.2.3　字段　100<br />
6.2.4　属性　102<br />
6.2.5　常量　104<br />
6.2.6　方法　105<br />
6.3　类型提示　108<br />
6.4　构造函数和析构函数　108<br />
6.4.1　构造函数　108<br />
6.4.2　析构函数　110<br />
6.5　静态类成员　111<br />
6.6　instanceof关键字　112<br />
6.7　辅助函数　112<br />
6.8　自动加载对象　114<br />
6.9　小结　114</p>
<p>第7章　高级OOP特性　115<br />
7.1　PHP不支持的高级OOP特性　115<br />
7.2　对象克隆　116<br />
7.2.1　克隆示例　116<br />
7.2.2　__clone()方法　117<br />
7.3　继承　118<br />
7.3.1　类继承　118<br />
7.3.2　继承和构造函数　120<br />
7.4　接口　121<br />
7.4.1　实现一个接口　122<br />
7.4.2　实现多个接口　123<br />
7.5　抽象类　124<br />
7.6　反射　124<br />
7.6.1　编写ReflectionClass类　125<br />
7.6.2　编写ReflectionMethod类　127<br />
7.6.3　编写ReflectionParameter类　128<br />
7.6.4　编写ReflectionProperty类　129<br />
7.6.5　反射的其他用途　130<br />
7.7　小结　130</p>
<p>第8章　错误和异常处理　131<br />
8.1　配置指令　131<br />
8.2　错误日志　134<br />
8.3　异常处理　135<br />
8.3.1　为什么异常处理很方便　136<br />
8.3.2　PHP的异常处理实现　137<br />
8.4　小结　140</p>
<p>第9章　字符串和正则表达式　141<br />
9.1　复杂(大括号)偏移语法　141<br />
9.2　正则表达式　142<br />
9.2.1　正则表达式语法(POSIX)　142<br />
9.2.2　PHP的正则表达式函数(POSIX扩展)　144<br />
9.2.3　正则表达式语法(Perl风格)　146<br />
9.3　其他字符串函数　151<br />
9.3.1　确定字符串长度　152<br />
9.3.2　比较两个字符串　152<br />
9.3.3　处理字符串大小写　154<br />
9.3.4　字符串与HTML相互转换　155<br />
9.3.5　正则表达式函数的替代函数　159<br />
9.3.6　填充和剔除字符串　164<br />
9.3.7　字符和单词计数　165<br />
9.4　使用PEAR：Validate_US　167<br />
9.4.1　安装Validate_US　167<br />
9.4.2　使用Validate_US　168<br />
9.5　小结　168</p>
<p>第10章　处理文件和操作系统　169<br />
10.1　了解文件和目录　169<br />
10.1.1　解析目录路径　169<br />
10.1.2　文件类型和链接　171<br />
10.1.3　计算文件、目录和磁盘大小　173<br />
10.1.4　访问和修改时间　175<br />
10.2　文件所有权和权限　176<br />
10.3　文件I/O　178<br />
10.3.1　资源的概念　178<br />
10.3.2　换行　178<br />
10.3.3　文件末尾　178<br />
10.3.4　打开和关闭文件　179<br />
10.3.5　读取文件　180<br />
10.3.6　移动文件指针　184<br />
10.3.7　写入文件　184<br />
10.3.8　读取目录内容　185<br />
10.4　执行Shell命令　186<br />
10.5　系统级程序执行　187<br />
10.5.1　清理输入　187<br />
10.5.2　PHP的程序执行函数　188<br />
10.6　小结　190</p>
<p>第11章　PEAR　191<br />
11.1　流行的PEAR包　191<br />
11.2　安装和更新PEAR　193<br />
11.2.1　安装PEAR　193<br />
11.2.2　PEAR和ISP公司　194<br />
11.2.3　更新PEAR　194<br />
11.3　使用PEAR包管理器　194<br />
11.3.1　查看安装的包　195<br />
11.3.2　了解安装包的更多信息　195<br />
11.3.3　安装PEAR包　196<br />
11.3.4　使用PEAR包　197<br />
11.3.5　升级PEAR包　198<br />
11.3.6　卸载PEAR包　198<br />
11.3.7　降级PEAR包　199<br />
11.4　小结　199</p>
<p>第12章　日期和时间　200<br />
12.1　UNIX时间戳　200<br />
12.2　PHP的日期和时间库　200<br />
12.3　日期函数　206<br />
12.3.1　显示本地化的日期和时间　206<br />
12.3.2　显示网页的最新修改日期　209<br />
12.3.3　确定当前月份中的天数　209<br />
12.3.4　计算当前日期后X天的日期　209<br />
12.3.5　创建日历　210<br />
12.4　PHP 5.1　213<br />
12.4.1　Date基础　213<br />
12.4.2　Date构造函数　213<br />
12.4.3　访问方法和修改方法　214<br />
12.4.4　验证函数　216<br />
12.4.5　处理方法　216<br />
12.5　小结　222</p>
<p>第13章　表单和导航提示　223<br />
13.1　PHP和Web表单　223<br />
13.1.1　简单示例　224<br />
13.1.2　向函数传递表单数据　225<br />
13.1.3　处理多值表单组件　226<br />
13.1.4　用PHP生成表单　227<br />
13.1.5　自动选择表单数据　228<br />
13.1.6　PHP、Web表单和JavaScript　229<br />
13.2　导航提示　231<br />
13.2.1　用户友好的URL　231<br />
13.2.2　“面包屑型”轨迹　233<br />
13.2.3　创建定制错误处理函数　237<br />
13.3　小结　238</p>
<p>第14章　身份认证　239<br />
14.1　HTTP认证概念　239<br />
14.2　PHP认证　240<br />
14.2.1　认证变量　240<br />
14.2.2　认证方法　241<br />
14.3　用户登录管理　248<br />
14.3.1　密码指派　248<br />
14.3.2　使用CrackLib库测试密码易猜性　250<br />
14.3.3　一次性URL和密码恢复　251</p>
<p>第15章　处理文件上传　254<br />
15.1　通过HTTP协议上传文件　254<br />
15.2　通过PHP处理上传　255<br />
15.2.1　PHP的文件上传/资源指令　255<br />
15.2.2　$_FILES数组　256<br />
15.2.3　PHP的文件上传函数　256<br />
15.2.4　上传错误消息　258<br />
15.2.5　文件上传示例　258<br />
15.3　利用PEAR：HTTP_Upload　261<br />
15.3.1　安装HTTP_Upload　261<br />
15.3.2　了解关于上传文件的更多信息　262<br />
15.3.3　将上传的文件移动到最终目标　263<br />
15.3.4　上传多个文件　263<br />
15.4　小结　264</p>
<p>第16章　网络　265<br />
16.1　DNS、服务器和服务　265<br />
16.1.1　DNS　265<br />
16.1.2　服务　268<br />
16.1.3　建立套接字连接　269<br />
16.2　邮件　271<br />
16.2.1　配置指令　271<br />
16.2.2　发送纯文本电子邮件　272<br />
16.2.3　使用额外的信息首部发送电子邮件　272<br />
16.2.4　将电子邮件发送给多个接收者　273<br />
16.2.5　发送HTML格式的电子邮件　273<br />
16.2.6　发送附件　274<br />
16.3　IMAP、POP3和NNTP　275<br />
16.3.1　需求　276<br />
16.3.2　建立和关闭连接　276<br />
16.3.3　了解更多关于邮箱和邮件的信息　277<br />
16.3.4　获取邮件　280<br />
16.3.5　写邮件　286<br />
16.3.6　发送邮件　286<br />
16.3.7　邮箱管理　287<br />
16.3.8　邮件管理　288<br />
16.4　流　288<br />
16.4.1　流包装器和上下文　289<br />
16.4.2　流过滤器　290<br />
16.5　常见网络任务　291<br />
16.5.1　连接一台服务器　291<br />
16.5.2　端口扫描器　292<br />
16.5.3　子网转换器　293<br />
16.5.4　测试用户带宽　294<br />
16.6　小结　295</p>
<p>第17章　PHP和LDAP　296<br />
17.1　LDAP介绍　297<br />
17.2　在PHP中使用LDAP　297<br />
17.2.1　连接到LDAP服务器　297<br />
17.2.2　绑定到LDAP服务器　298<br />
17.2.3　关闭LDAP服务器连接　299<br />
17.2.4　获取LDAP数据　299<br />
17.2.5　处理项值　301<br />
17.2.6　统计所获取的项　302<br />
17.2.7　获取属性　302<br />
17.2.8　排序和比较LDAP项　305<br />
17.2.9　处理项　306<br />
17.2.10　回收内存　308<br />
17.2.11　插入LDAP数据　309<br />
17.2.12　更新LDAP数据　309<br />
17.2.13　删除LDAP数据　310<br />
17.2.14　配置函数　311<br />
17.2.15　字符编码　312<br />
17.2.16　处理区分名　312<br />
17.2.17　错误处理　313<br />
17.3　小结　314</p>
<p>第18章　会话处理器　315<br />
18.1　什么是会话处理　315<br />
18.1.1　cookie　315<br />
18.1.2　URL重写　316<br />
18.1.3　会话处理过程　316<br />
18.2　配置指令　317<br />
18.3　关键概念　320<br />
18.3.1　开始会话　320<br />
18.3.2　销毁会话　321<br />
18.3.3　获取和设置会话ID　321<br />
18.3.4　创建和删除会话变量　321<br />
18.3.5　编码和解码会话数据　322<br />
18.4　实际的会话处理示例　324<br />
18.4.1　自动登录　324<br />
18.4.2　最近浏览的文档索引　325<br />
18.5　创建定制会话处理器　327<br />
18.5.1　将定制会话函数加入到PHP逻辑　327<br />
18.5.2　基于MySQL的定制会话处理器　328<br />
18.6　小结　330</p>
<p>第19章　用Smarty模板化　331<br />
19.1　什么是模板化引擎　331<br />
19.2　Smarty介绍　333<br />
19.3　安装Smarty　333<br />
19.4　使用Smarty　334<br />
19.5　Smarty的表现逻辑　336<br />
19.5.1　注释　336<br />
19.5.2　变量修饰符　336<br />
19.5.3　控制结构　339<br />
19.5.4　语句　342<br />
19.6　创建配置文件　344<br />
19.6.1　config_load　345<br />
19.6.2　引用配置变量　345<br />
19.7　结合Smarty使用CSS　346<br />
19.8　缓存　347<br />
19.8.1　处理缓存生命期　347<br />
19.8.2　通过is_cached()消除处理开销　348<br />
19.8.3　为每个模板创建多个缓存　348<br />
19.8.4　关于缓存的结束语　349<br />
19.9　小结　350</p>
<p>第20章　Web服务　351<br />
20.1　为什么使用Web服务　352<br />
20.2　真正简单聚合　353<br />
20.2.1　RSS语法　355<br />
20.2.2　MagpieRSS　356<br />
20.3　SimpleXML　361<br />
20.3.1　SimpleXML函数　362<br />
20.3.2　SimpleXML方法　363<br />
20.4　SOAP　365<br />
20.4.1　NuSOAP　366<br />
20.4.2　PHP 5的SOAP扩展　374<br />
20.5　使用PHP Web服务和C#客户　381<br />
20.6　小结　383</p>
<p>第21章　安全PHP编程　384<br />
21.1　安全地配置PHP　384<br />
21.1.1　安全模式　385<br />
21.1.2　其他与安全有关的配置参数　386<br />
21.2　隐藏配置细节　388<br />
21.3　隐藏敏感数据　389<br />
21.3.1　注意文档根目录　390<br />
21.3.2　拒绝访问某些文件扩展名　390<br />
21.4　清理用户数据　390<br />
21.4.1　文件删除　390<br />
21.4.2　跨网站脚本　391<br />
21.4.3　清理用户输入：解决方案　392<br />
21.5　数据加密　394<br />
21.5.1　PHP的加密函数　394<br />
21.5.2　mhash　395<br />
21.5.3　MCrypt　396<br />
21.6　小结　397</p>
<p>第22章　SQLite　398<br />
22.1　SQLite介绍　398<br />
22.1.1　安装SQLite　398<br />
22.1.2　使用SQLite命令行界面　399<br />
22.2　PHP的SQLite库　400<br />
22.2.1　SQLite指令　400<br />
22.2.2　打开连接　400<br />
22.2.3　在内存中创建表　401<br />
22.2.4　关闭连接　401<br />
22.2.5　查询数据库　402<br />
22.2.6　解析结果集　403<br />
22.2.7　获取结果集细节　405<br />
22.2.8　操作结果集指针　406<br />
22.2.9　了解表模式的更多信息　408<br />
22.2.10　操作二进制数据　408<br />
22.2.11　创建和覆盖SQLite函数　409<br />
22.2.12　创建聚集函数　410<br />
22.3　小结　411</p>
<p>第23章　PDO介绍　412<br />
23.1　为什么还要另一种数据库抽象层　413<br />
23.2　使用PDO　413<br />
23.2.1　安装PDO　414<br />
23.2.2　PDO的数据库支持　414<br />
23.2.3　连接到数据库服务器并选择数据库　415<br />
23.2.4　存取属性　416<br />
23.2.5　错误处理　417<br />
23.2.6　查询执行　417<br />
23.2.7　准备语句　418<br />
23.2.8　获取数据　421<br />
23.2.9　设置绑定列　423<br />
23.2.10　事务　424<br />
23.3　小结　425</p>
<p>第24章　MySQL介绍　426<br />
24.1　MySQL为什么如此流行　426<br />
24.1.1　灵活性　426<br />
24.1.2　强大功能　427<br />
24.1.3　灵活的许可选择　428<br />
24.1.4　超级活跃的用户群体　429<br />
24.2　MySQL 4　429<br />
24.3　MySQL 5　430<br />
24.4　著名的MySQL用户　430<br />
24.4.1　craigslist　430<br />
24.4.2　雅虎财经　431<br />
24.4.3　维基百科　431<br />
24.5　小结　431</p>
<p>第25章　安装和配置MySQL　432<br />
25.1　PHP和MySQL许可问题　432<br />
25.1.1　Linux　433<br />
25.1.2　Windows　433<br />
25.2　下载MySQL　433<br />
25.3　安装MySQL　434<br />
25.3.1　Linux　434<br />
25.3.2　Windows　437<br />
25.4　设置MySQL管理员密码　439<br />
25.5　启动和停止MySQL　439<br />
25.5.1　手工控制守护进程　439<br />
25.5.2　自动启动和停止MySQL　441<br />
25.6　配置和优化MySQL　442<br />
25.6.1　mysqld_safe　443<br />
25.6.2　配置和优化参数　443<br />
25.6.3　my.cnf文件　446<br />
25.7　小结　448</p>
<p>第26章　众多MySQL客户端　449<br />
26.1　标准客户端选项　449<br />
26.2　连接选项　450<br />
26.3　一般选项　450<br />
26.4　mysql　451<br />
26.4.1　关键mysql选项　451<br />
26.4.2　以交互模式使用mysql　452<br />
26.4.3　查看配置变量和系统状态　454<br />
26.4.4　以批处理模式使用mysql　455<br />
26.4.5　有用的mysql提示　456<br />
26.5　mysqladmin　458<br />
26.6　其他实用工具　459<br />
26.6.1　mysqldump　459<br />
26.6.2　mysqlshow　459<br />
26.6.3　mysqlhotcopy　460<br />
26.6.4　mysqlimport　460<br />
26.6.5　myisamchk　461<br />
26.6.6　mysqlcheck　461<br />
26.7　第三方客户端程序　462<br />
26.7.1　MySQL管理器　462<br />
26.7.2　phpMyAdmin　463<br />
26.7.3　MySQL查询浏览器　464<br />
26.7.4　Navicat　465<br />
26.8　小结　466</p>
<p>第27章　MySQL存储引擎和数据类型　467<br />
27.1　存储引擎　467<br />
27.1.1　InnoDB　468<br />
27.1.2　MyISAM　468<br />
27.1.3　MEMORY　470<br />
27.1.4　MERGE　471<br />
27.1.5　BDB　471<br />
27.1.6　FEDERATED　471<br />
27.1.7　ARCHIVE　472<br />
27.1.8　CSV　473<br />
27.1.9　EXAMPLE　473<br />
27.1.10　BLACKHOLE　473<br />
27.1.11　存储引擎FAQ　473<br />
27.2　数据类型和属性　475<br />
27.2.1　数据类型　475<br />
27.2.2　数据类型属性　479<br />
27.3　操作数据库和表　481<br />
27.3.1　操作数据库　481<br />
27.3.2　操作表　483<br />
27.3.3　修改表结构　485<br />
27.3.4　INFORMATION_SCHEMA　485<br />
27.4　小结　487</p>
<p>第28章　保护MySQL的安全　488<br />
28.1　首先应当做什么　488<br />
28.2　保护mysqld守护进程　489<br />
28.3　MySQL访问权限系统　489<br />
28.3.1　权限系统的工作方式　490<br />
28.3.2　访问信息存储在哪里　491<br />
28.4　用户和权限管理　498<br />
28.4.1　CREATE USER　498<br />
28.4.2　DROP USER　499<br />
28.4.3　RENAME USER　499<br />
28.4.4　GRANT和REVOKE命令　499<br />
28.4.5　查看权限　503<br />
28.5　限制用户资源　503<br />
28.6　保护MySQL连接　504<br />
28.6.1　授权选项　504<br />
28.6.2　SSL选项　505<br />
28.6.3　启动启用SSL的MySQL服务器　506<br />
28.6.4　使用启用SSL的客户端进行连接　506<br />
28.6.5　在my.cnf文件中存储SSL选项　506<br />
28.7　小结　507</p>
<p>第29章　PHP的MySQL扩展　508<br />
29.1　预备工作　508<br />
29.1.1　在Linux中启用MySQL扩展　508<br />
29.1.2　在Windows中启用MySQL扩展　508<br />
29.1.3　用户权限　509<br />
29.1.4　示例数据　509<br />
29.2　PHP的MySQL命令　509<br />
29.2.1　建立和关闭连接　509<br />
29.2.2　在单独的文件中存储连接信息　511<br />
29.2.3　保护连接信息　511<br />
29.3　选择数据库　512<br />
29.4　查询MySQL　512<br />
29.5　获取和显示数据　513<br />
29.6　插入数据　516<br />
29.7　修改数据　517<br />
29.8　删除数据　519<br />
29.9　所选择的记录和受影响的记录　520<br />
29.10　获取数据库和表的信息　521<br />
29.11　获取字段信息　523<br />
29.11.1　查看表属性　526<br />
29.11.2　获取错误信息　527<br />
29.12　辅助函数　528<br />
29.13　小结　530</p>
<p>第30章　PHP的mysqli扩展　531<br />
30.1　预备工作　532<br />
30.1.1　在UNIX中启用mysqli扩展　532<br />
30.1.2　在Windows中启用mysqli扩展　532<br />
30.1.3　示例数据　532<br />
30.2　使用mysqli扩展　532<br />
30.2.1　连接MySQL服务器　532<br />
30.2.2　连接错误报告　533<br />
30.2.3　选择一个MySQL数据库　535<br />
30.2.4　关闭MySQL连接　536<br />
30.3　查询　536<br />
30.3.1　查询执行　536<br />
30.3.2　回收查询内存　537<br />
30.3.3　准备结果集　538<br />
30.3.4　解析结果　539<br />
30.3.5　多个查询　542<br />
30.3.6　准备语句　543<br />
30.4　数据库事务　548<br />
30.5　小结　549</p>
<p>第31章　存储例程　550<br />
31.1　应当使用存储例程吗　550<br />
31.1.1　存储例程的优点　550<br />
31.1.2　存储例程的缺点　551<br />
31.2　MySQL如何实现存储例程　551<br />
31.2.1　存储例程权限表　551<br />
31.2.2　创建存储例程　553<br />
31.2.3　声明和设置变量　554<br />
31.2.4　执行存储例程　555<br />
31.2.5　多语句存储例程　556<br />
31.2.6　从另一个例程中调用例程　562<br />
31.2.7　修改存储例程　563<br />
31.2.8　删除存储例程　563<br />
31.2.9　查看例程状态　563<br />
31.2.10　查看例程的创建语法　564<br />
31.2.11　条件和处理器　564<br />
31.3　将例程集成到Web应用程序　565<br />
31.3.1　创建员工奖金界面　565<br />
31.3.2　获取多条记录　566<br />
31.4　小结　566</p>
<p>第32章　MySQL触发器　567<br />
32.1　介绍触发器　567<br />
32.1.1　为什么使用触发器　567<br />
32.1.2　在事件前采取行动　568<br />
32.1.3　在事件后采取行动　568<br />
32.1.4　前触发器和后触发器　569<br />
32.2　MySQL对触发器的支持　569<br />
32.2.1　创建触发器　570<br />
32.2.2　查看现有的触发器　571<br />
32.2.3　修改触发器　572<br />
32.2.4　删除触发器　572<br />
32.2.5　级联触发器　573<br />
32.3　将触发器集成到Web应用程序　574<br />
32.4　小结　575</p>
<p>第33章　视图　576<br />
33.1　视图概述　576<br />
33.2　MySQL对视图的支持　577<br />
33.2.1　创建和执行视图　577<br />
33.2.2　查看视图信息　581<br />
33.2.3　修改视图　582<br />
33.2.4　删除视图　583<br />
33.2.5　更新视图　583<br />
33.3　将视图结合到Web应用程序中　583<br />
33.4　小结　585</p>
<p>第34章　实用数据库查询　586<br />
34.1　示例数据　586<br />
34.2　用PEAR创建表格输出　587<br />
34.2.1　安装HTML_Table　587<br />
34.2.2　创建一个简单表　587<br />
34.2.3　创建更可读的行输出　589<br />
34.2.4　根据数据库数据创建表格　589<br />
34.2.5　一般化输出过程　591<br />
34.3　排序输出　593<br />
34.4　创建分页输出　594<br />
34.5　列出页码　597<br />
34.6　子查询　598<br />
34.6.1　用子查询完成比较　599<br />
34.6.2　用子查询确定存在性　599<br />
34.6.3　用子查询维护数据库　600<br />
34.6.4　在PHP中使用子查询　601<br />
34.7　游标　601<br />
34.7.1　游标基础　601<br />
34.7.2　创建游标　602<br />
34.7.3　打开游标　602<br />
34.7.4　使用游标　602<br />
34.7.5　关闭游标　603<br />
34.7.6　在PHP中使用游标　604<br />
34.8　小结　604</p>
<p>第35章　索引和搜索　605<br />
35.1　数据库索引　605<br />
35.1.1　主键索引　605<br />
35.1.2　唯一索引　606<br />
35.1.3　常规索引　607<br />
35.1.4　全文索引　608<br />
35.1.5　索引最佳实践　611<br />
35.2　基于表单的搜索　611<br />
35.2.1　执行简单搜索　612<br />
35.2.2　扩展搜索功能　613<br />
35.2.3　执行全文搜索　614<br />
35.3　小结　615</p>
<p>第36章　事务　616<br />
36.1　什么是事务　616<br />
36.2　MySQL的事务功能　616<br />
36.2.1　系统需求　617<br />
36.2.2　表创建　617<br />
36.2.3　InnoDB配置参数　618<br />
36.3　示例项目　619<br />
36.3.1　示例数据　620<br />
36.3.2　执行示例事务　620<br />
36.3.3　备份和恢复InnoDB表　622<br />
36.3.4　用法提示　622<br />
36.4　用PHP构建事务应用程序　622<br />
36.5　小结　624</p>
<p>第37章　导入和导出数据　625<br />
37.1　示例表　625<br />
37.2　获得合适的媒介　625<br />
37.3　导出数据　626<br />
37.4　导入数据　628<br />
37.4.1　利用LOAD DATA INFILE导入数据　628<br />
37.4.2　用mysqlimport导入　631<br />
37.4.3　用PHP加载表数据　633<br />
37.5　小结　634</p>
<p>索引(图灵网站下载)<br />
[singlepic id=11 w=320 h=240 float=center]<br />
<center>（我那本的近照，点击放大）</center>
</p></blockquote>
<p>参考：<br />
<a href="http://www.phpchina.com/html/05/n-34505.html" target="_blank">http://www.phpchina.com/html/05/n-34505.html</a><br />
<a href="http://www.ptpress.com.cn/Book.aspx?id=7882" target="_blank">http://www.ptpress.com.cn/Book.aspx?id=7882</a></p>
<div class="addthis_toolbox addthis_default_style addthis_32x32_style" addthis:url='http://slj.me/2009/05/book-beginingphpandmysql/' addthis:title='好书推荐-《PHP与MySQL程序设计（第3版）》 ' ><a class="addthis_button_preferred_1"></a><a class="addthis_button_preferred_2"></a><a class="addthis_button_preferred_3"></a><a class="addthis_button_preferred_4"></a><a class="addthis_button_compact"></a></div><h2  class="related_post_title">Related Posts / 相关文章</h2><ul class="related_post"><li><a href="http://slj.me/2011/10/mysql-save-query-result-to-a-file/" title="MySQL 把查询结果保存到文件中的方法">MySQL 把查询结果保存到文件中的方法</a></li><li><a href="http://slj.me/2011/08/web-open-source-project/" title="疯狂的 Web 应用开源项目">疯狂的 Web 应用开源项目</a></li><li><a href="http://slj.me/2011/06/php-daemon-notice/" title="[转] 代替bash，书写 PHP daemon 后台程序">[转] 代替bash，书写 PHP daemon 后台程序</a></li><li><a href="http://slj.me/2011/04/xdebug-for-php/" title="Xdebug for php 一个实用的PHP调试扩展">Xdebug for php 一个实用的PHP调试扩展</a></li><li><a href="http://slj.me/2011/03/share-bash-script/" title="分享两则我在VPS上执行的sh脚本">分享两则我在VPS上执行的sh脚本</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://slj.me/2009/05/book-beginingphpandmysql/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
	</channel>
</rss>

