<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title><![CDATA[BIWEB开源PHP WMS系统创始人ArthurXF肖飞的blog]]></title> 
<link>http://www.bizeway.net/index.php</link> 
<description><![CDATA[网务通 - 网务公司发展之路]]></description> 
<language>zh-cn</language> 
<copyright><![CDATA[BIWEB开源PHP WMS系统创始人ArthurXF肖飞的blog]]></copyright>
<item>
<link>http://www.bizeway.net/read.php?599</link>
<title><![CDATA[top监控命令在FreeBSD上的使用]]></title> 
<author>ArthurXF &lt;arthurxf@gmail.com&gt;</author>
<category><![CDATA[媒体报导]]></category>
<pubDate>Tue, 17 Apr 2012 10:28:38 +0000</pubDate> 
<guid>http://www.bizeway.net/read.php?599</guid> 
<description>
<![CDATA[ 
	top监控工具可以显示CPU占用率为前几位的进程，并提供CPU的实时活动情况<br/>语法：top [-s time] [-d count] [-q] [-h] [-n number] [-f filename] [-o field][-U usename]<br/>-S 将系统进程信息也显示到屏幕上，默认情况下，top不显示系统进程的信息<br/>-b 使用”batch”方式运行top。在此种方式下，所有来自终端的输入都将被忽略，但交互键(比如C and )<br/>依然起使用。这是运行top输出到哑终端或输到非终端的默认运行方式<br/>-i 使用交互运行top程序，在此种方式下，命令会被进程立即被处理。不管命令是不是能被top所理解执行，<br/>屏幕都将立即更新。这是top的默认运行方式。<br/>-I 不显示空闲进程，在默认情况下，top连同空闲进程的信息一同输出。<br/>-t 不显示top进程自己<br/>-n 不以交互方式使用top命令，作用同”batch”方式。<br/>-s time 设置屏幕刷新的延时，单位为秒，默认值5秒<br/>-d count 设置屏幕刷新的次数，刷新显示完count次后退出<br/>-q 如果经过nice授权，使用-q可以使top运行的更快一些，这样，在系统反应缓慢的时候，可以会更快的找到存在的问题。<br/>此选项在FreeBSD下只有root可以使用<br/>-n number 设置每一屏幕显示的进程数目，number值超过进程最大数目，则设置无效<br/>-u 用显示User ID代替username，提高命令运行速度<br/>-v 显示程序版本号后，立即退出。如果要在top运行时查看版本号，输入”?”<br/>-o 以指定的字段排序显示进行信息。字段名必须为输入在屏幕的可见列的名字，而且必须是小写。<br/>比如”cpu”、”size”、”res”与”time”,但不同的操作系统间有许多的不同。注意不是每个UNIX操<br/>作系统都支持此选项。<br/><br/>-U 只显示属于后面所跟用户名的进程的信息<br/>屏幕控制命令<br/>交换方式下，可以使用以下命令控制top<br/>^L – 刷新屏幕<br/>q – 退出<br/>h or ? – 显示帮助<br/>d – 修改刷新显示的次数<br/>e – 显示最近”kill”或”renice”命令所产生的错误<br/>i – 显示/不显示处于空闲的进程<br/>I – 作用同 ‘i’<br/>k – kill 进程; 发送一个信号到某个进程列表<br/>n or # – 修改显示进程的数目<br/>o – 以特定的字段排序 (pri, size, res, cpu, time)<br/>r – renice 一个进程<br/>s – 修改输入的更新时间<br/>u – 只显示属于某个用户的进程 (+ selects all users)<br/>顺序显示下面三个常规的信息<br/><br/>一． 系统信息:<br/><br/>last pid: 22228; load averages: 0.25, 0.97, 1.56 up 44+03:25:56 21:39:36<br/>274 processes: 3 running, 259 sleeping, 12 zombie<br/>CPU states: 2.9% user, 0.0% nice, 4.2% system, 0.4% interrupt, 92.5% idle<br/>Mem: 483M Active, 120M Inact, 222M Wired, 25M Cache, 112M Buf, 153M Free<br/>Swap: 2048M Total, 143M Used, 1905M Free, 6% Inuse<br/><br/>首部的几行显示系统的几个信息，其中包括:<br/>+ Load averages:1分钟、5分钟和15分钟内运行的负载平均数<br/>+ system:系统名和当前日期.<br/>一般来说只要每个CPU的当前活动进程数不大于 3那么系统的性能就是良好的，如果每个CPU的任务数大于5，<br/>那么就表示这台机器的性能有严重问题<br/>+ 最近一次更新时存在的进程总数，并分别列出run(运行)、sleep(睡眠)、idle（停止）和zomb(‘僵尸’)状态的进程数<br/>+ CPU state:用户占用时间的百分比、系统占用CPU时间的百分比、被nice命令改变优先级的任务占用的CPU时间百分比、以及CPU空闲时间的百分比。<br/>（被nice命令改变优先级的任务仅指那些nice值为负的任务）。花费在被nice命令改变优先级的任务上的时间也将被计算在系统和用户时间内，因此<br/>整个时间加起来可能会超过百分之百<br/><br/>二．内存信息<br/>Memory: 610008K (24424K) real, 995344K (30304K) virtual, 12588K free Page# 1/4<br/>Memory:关于内存使用情况的统计，包括实际（real）内存的活动值/总值，虚拟（virtual）内存的使用值/总值，剩余的内存。<br/><br/>DESCRIPTION OF MEMORY<br/>Mem: 9220K Active, 1032K Inact, 3284K Wired, 1MB Cache, 2M Buf, 1320K<br/>Free Swap: 91M Total, 79M Free, 13% Inuse, 80K In, 104 K Out<br/><br/>K: Kilobyte(K)<br/><br/>M: Megabyte(兆)<br/><br/>%: 1/100(百分比)<br/><br/>Active:<br/>活动页的数目<br/><br/>Inact: 非活动页的数目<br/><br/>Wired: 已经被写入页的数目, 包括缓存文件数据页码<br/><br/>Cache: 被用于 VM-level 磁盘缓冲的页的数目<br/><br/>Buf: 被用于 BIO-level 磁盘缓冲的页的数目<br/><br/>Free: 空闲页<br/><br/>Total: 总的可使用交换区<br/><br/>Free: 总共空闲的交换区<br/><br/>Inuse: 交换区的使用情况<br/><br/>In: pages paged in from swap devices (最近的时间间隔)<br/><br/>Out: pages paged out to swap devices (最近的时间间隔)<br/><br/>三．进程信息<br/>CPU PID USERNAME PRI NI SIZE RES STATE TIME %WCPU %CPU COMMAND<br/>1 33 root 152 20 0K 0K run 153:43 1.18 1.18 vxfsd<br/>0 1751 root 154 20 2500K 868K sleep 2084:19 0.52 0.52 ARMServer<br/>0 1730 root 154 20 4500K 332K sleep 1664:55 0.44 0.44 acactmgr<br/>列出系统里每一个处理器的信息,当信息在一个屏幕内无法显示时,会被分成多个屏幕显示,可以前面提到l,k和t命令查看<br/>（1）CPU：处理器号（仅当多处理器系统时列出）<br/>（2）PID：进程号<br/>（3）USERNAME：用户名<br/>（4）PRI:任务的优先级<br/>（5）NICE：任务的nice值，一个具有较低值的进程在系统上将具有优先权。可以通过改变nice值提高某些进程速度，但是这实际上是一种交易，因为那些nice值被升高的进程此时将运行得很慢。<br/>（6）SIZE：任务的代码加上数据再加上栈空间的大小。<br/>（7）RES：任务使用的物理内存的总数量。<br/>（8）STATE：任务的状态<br/>（9）TIME：自任务开始时使用的总CPU时间,单位为秒，如153:43，对应是153秒43毫秒<br/>（10）%WCPU：进程的CPU利用率权重百分比<br/>（11）%CPU：进程的原始的CPU利用率百分比，自上一次屏幕刷新以来任务占用CPU 时间的份额<br/>（12）COMMAND：启动进程的命令名。如果名字太长而不能在一行显示时，它将被截短<br/><br/><br/>Tags - <a href="tag.php?tag=freebsd" rel="tag">freebsd</a> , <a href="tag.php?tag=top" rel="tag">top</a>
]]>
</description>
</item><item>
<link>http://www.bizeway.net/read.php?598</link>
<title><![CDATA[查看 Apache并发请求数及其TCP连接状态]]></title> 
<author>ArthurXF &lt;arthurxf@gmail.com&gt;</author>
<category><![CDATA[FreeBSD]]></category>
<pubDate>Tue, 17 Apr 2012 07:46:45 +0000</pubDate> 
<guid>http://www.bizeway.net/read.php?598</guid> 
<description>
<![CDATA[ 
	服务器上的一些统计数据：<br/><br/>1)统计80端口连接数<br/>netstat -nat&#124;grep -i "80"&#124;wc -l<br/><br/>2）统计httpd协议连接数<br/>ps -ef&#124;grep httpd&#124;wc -l<br/><br/>3）、统计已连接上的，状态为“established<br/>netstat -na&#124;grep ESTABLISHED&#124;wc -l<br/><br/>4)、查出哪个IP地址连接最多,将其封了.<br/>netstat -na&#124;grep ESTABLISHED&#124;awk {print $5}&#124;awk -F: {print $1}&#124;sort&#124;uniq -c&#124;sort -r +0n<br/><br/>netstat -na&#124;grep SYN&#124;awk {print $5}&#124;awk -F: {print $1}&#124;sort&#124;uniq -c&#124;sort -r +0n<br/><br/>---------------------------------------------------------------------------------------------<br/><br/>1、查看apache当前并发访问数：<br/>netstat -an &#124; grep ESTABLISHED &#124; wc -l<br/><br/>对比httpd.conf中MaxClients的数字差距多少。<br/><br/>2、查看有多少个进程数：<br/>ps aux&#124;grep httpd&#124;wc -l<br/><br/>3、可以使用如下参数查看数据<br/>server-status?auto<br/><br/>#ps -ef&#124;grep httpd&#124;wc -l<br/>1388<br/>统计httpd进程数，连个请求会启动一个进程，使用于Apache服务器。<br/>表示Apache能够处理1388个并发请求，这个值Apache可根据负载情况自动调整。<br/><br/>#netstat -nat&#124;grep -i "80"&#124;wc -l<br/>4341<br/>netstat -an会打印系统当前网络链接状态，而grep -i "80"是用来提取与80端口有关的连接的，wc -l进行连接数统计。<br/>最终返回的数字就是当前所有80端口的请求总数。<br/><br/>#netstat -na&#124;grep ESTABLISHED&#124;wc -l<br/>376<br/>netstat -an会打印系统当前网络链接状态，而grep ESTABLISHED 提取出已建立连接的信息。 然后wc -l统计。<br/>最终返回的数字就是当前所有80端口的已建立连接的总数。<br/><br/>netstat -nat&#124;&#124;grep ESTABLISHED&#124;wc - 可查看所有建立连接的详细记录<br/><br/>查看Apache的并发请求数及其TCP连接状态：<br/>　　Linux命令：<br/>netstat -n &#124; awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'<br/><br/>（这条语句是从 新浪互动社区事业部 新浪互动社区事业部技术总监王老大那儿获得的，非常不错）返回结果示例：<br/>　　LAST_ACK 5<br/>　　SYN_RECV 30<br/>　　ESTABLISHED 1597<br/>　　FIN_WAIT1 51<br/>　　FIN_WAIT2 504<br/>　　TIME_WAIT 1057<br/>　　其中的<br/>SYN_RECV表示正在等待处理的请求数；<br/>ESTABLISHED表示正常数据传输状态；<br/>TIME_WAIT表示处理完毕，等待超时结束的请求数。<br/><br/>---------------------------------------------------------------------------------------------<br/><br/>查看Apache并发请求数及其TCP连接状态<br/><br/>查看httpd进程数（即prefork模式下Apache能够处理的并发请求数）：<br/>　　Linux命令：<br/><br/>ps -ef &#124; grep httpd &#124; wc -l<br/><br/>　　返回结果示例：<br/>　　1388<br/>　　表示Apache能够处理1388个并发请求，这个值Apache可根据负载情况自动调整，我这组服务器中每台的峰值曾达到过2002。<br/> <br/>查看Apache的并发请求数及其TCP连接状态：<br/>　　Linux命令：<br/> <br/>netstat -n &#124; awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'<br/>返回结果示例：<br/>　　LAST_ACK 5<br/>　　SYN_RECV 30<br/>　　ESTABLISHED 1597<br/>　　FIN_WAIT1 51<br/>　　FIN_WAIT2 504<br/>　　TIME_WAIT 1057<br/>　　其中的SYN_RECV表示正在等待处理的请求数；ESTABLISHED表示正常数据传输状态；TIME_WAIT表示处理完毕，等待超时结束的请求数。<br/>　　状态：描述<br/><br/>　　CLOSED：无连接是活动 的或正在进行<br/><br/>　　LISTEN：服务器在等待进入呼叫<br/><br/>　　SYN_RECV：一个连接请求已经到达，等待确认<br/><br/>　　SYN_SENT：应用已经开始，打开一个连接<br/><br/>　　ESTABLISHED：正常数据传输状态<br/><br/>　　FIN_WAIT1：应用说它已经完成<br/><br/>　　FIN_WAIT2：另一边已同意释放<br/><br/>　　ITMED_WAIT：等待所有分组死掉<br/><br/>　　CLOSING：两边同时尝试关闭<br/><br/>　　TIME_WAIT：另一边已初始化一个释放<br/><br/>　　LAST_ACK：等待所有分组死掉<br/><br/> <br/><br/>如发现系统存在大量TIME_WAIT状态的连接，通过调整内核参数解决，<br/>vim /etc/sysctl.conf<br/>编辑文件，加入以下内容：<br/>net.ipv4.tcp_syncookies = 1<br/>net.ipv4.tcp_tw_reuse = 1<br/>net.ipv4.tcp_tw_recycle = 1<br/>net.ipv4.tcp_fin_timeout = 30<br/>然后执行 /sbin/sysctl -p 让参数生效。<br/><br/>net.ipv4.tcp_syncookies = 1 表示开启SYN cookies。当出现SYN等待队列溢出时，启用cookies来处理，可防范少量SYN攻击，默认为0，表示关闭；<br/>net.ipv4.tcp_tw_reuse = 1 表示开启重用。允许将TIME-WAIT sockets重新用于新的TCP连接，默认为0，表示关闭；<br/>net.ipv4.tcp_tw_recycle = 1 表示开启TCP连接中TIME-WAIT sockets的快速回收，默认为0，表示关闭。<br/>net.ipv4.tcp_fin_timeout 修改系統默认的 TIMEOUT 时间<br/>下面附上TIME_WAIT状态的意义：<br/><br/>客户端与服务器端建立TCP/IP连接后关闭SOCKET后，服务器端连接的端口<br/>状态为TIME_WAIT<br/><br/>是不是所有执行主动关闭的socket都会进入TIME_WAIT状态呢？<br/>有没有什么情况使主动关闭的socket直接进入CLOSED状态呢？<br/><br/>主动关闭的一方在发送最后一个 ack 后<br/>就会进入 TIME_WAIT 状态 停留2MSL（max segment lifetime）时间<br/>这个是TCP/IP必不可少的，也就是“解决”不了的。<br/><br/>也就是TCP/IP设计者本来是这么设计的<br/>主要有两个原因<br/>1。防止上一次连接中的包，迷路后重新出现，影响新连接<br/>（经过2MSL，上一次连接中所有的重复包都会消失）<br/>2。可靠的关闭TCP连接<br/>在主动关闭方发送的最后一个 ack(fin) ，有可能丢失，这时被动方会重新发<br/>fin, 如果这时主动方处于 CLOSED 状态 ，就会响应 rst 而不是 ack。所以<br/>主动方要处于 TIME_WAIT 状态，而不能是 CLOSED 。<br/><br/>TIME_WAIT 并不会占用很大资源的，除非受到攻击。<br/><br/>还有，如果一方 send 或 recv 超时，就会直接进入 CLOSED 状态<br/><br/>如何合理设置apache httpd的最大连接数？<br/><br/>手头有一个网站在线人数增多，访问时很慢。初步认为是服务器资源不足了，但经反复测试，一旦连接上，不断点击同一个页面上不同的链接，都能迅速打开，这种现象就是说明apache最大连接数已经满了，新的访客只能排队等待有空闲的链接，而如果一旦连接上，在keeyalive 的存活时间内（KeepAliveTimeout，默认5秒）都不用重新打开连接，因此解决的方法就是加大apache的最大连接数。<br/><br/>1.在哪里设置？<br/>apache 2.24，使用默认配置（FreeBSD 默认不加载自定义MPM配置），默认最大连接数是250<br/><br/>在/usr/local/etc/apache22/httpd.conf中加载MPM配置（去掉前面的注释）：<br/># Server-pool management (MPM specific)<br/>Include etc/apache22/extra/httpd-mpm.conf<br/><br/>可见的MPM配置在/usr/local/etc/apache22/extra/httpd-mpm.conf，但里面根据httpd的工作模式分了很多块，哪一部才是当前httpd的工作模式呢？可通过执行 apachectl -l 来查看：<br/>Compiled in modules:<br/> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;core.c<br/> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;prefork.c<br/> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;http_core.c<br/> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;mod_so.c<br/><br/>看到prefork 字眼，因此可见当前httpd应该是工作在prefork模式，prefork模式的默认配置是：<br/><IfModule mpm_prefork_module><br/> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;StartServers &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;5<br/> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;MinSpareServers &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 5<br/> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;MaxSpareServers &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;10<br/> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;MaxClients &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;150<br/> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;MaxRequestsPerChild &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 0<br/></IfModule><br/><br/>2.要加到多少？<br/><br/>连接数理论上当然是支持越大越好，但要在服务器的能力范围内，这跟服务器的CPU、内存、带宽等都有关系。<br/><br/>查看当前的连接数可以用：<br/>ps aux &#124; grep httpd &#124; wc -l<br/><br/>或：<br/>pgrep httpd&#124;wc -l<br/><br/>计算httpd占用内存的平均数:<br/>ps aux&#124;grep -v grep&#124;awk '/httpd/{sum+=$6;n++};END{print sum/n}'<br/><br/>由于基本都是静态页面，CPU消耗很低，每进程占用内存也不算多，大约200K。<br/><br/>服务器内存有2G，除去常规启动的服务大约需要500M（保守估计），还剩1.5G可用，那么理论上可以支持1.5*1024*1024*1024/200000 = 8053.06368<br/><br/>约8K个进程，支持2W人同时访问应该是没有问题的（能保证其中8K的人访问很快，其他的可能需要等待1、2秒才能连上，而一旦连上就会很流畅）<br/><br/>控制最大连接数的MaxClients ，因此可以尝试配置为：<br/><IfModule mpm_prefork_module><br/> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;StartServers &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;5<br/> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;MinSpareServers &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 5<br/> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;MaxSpareServers &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;10<br/> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;ServerLimit &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;5500<br/> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;MaxClients &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 5000<br/> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;MaxRequestsPerChild &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 100<br/></IfModule><br/><br/>注意，MaxClients默认最大为250，若要超过这个值就要显式设置ServerLimit，且ServerLimit要放在MaxClients之前，值要不小于MaxClients，不然重启httpd时会有提示。<br/><br/>重启httpd后，通过反复执行pgrep httpd&#124;wc -l 来观察连接数，可以看到连接数在达到MaxClients的设值后不再增加，但此时访问网站也很流畅，那就不用贪心再设置更高的值了，不然以后如果网站访问突增不小心就会耗光服务器内存，可根据以后访问压力趋势及内存的占用变化再逐渐调整，直到找到一个最优的设置值。<br/><br/>(MaxRequestsPerChild不能设置为0，可能会因内存泄露导致服务器崩溃）<br/><br/>更佳最大值计算的公式：<br/><br/>apache_max_process_with_good_perfermance < (total_hardware_memory / apache_memory_per_process ) * 2<br/>apache_max_process = apache_max_process_with_good_perfermance * 1.5<br/><br/>附：<br/><br/>实时检测HTTPD连接数：<br/>watch -n 1 -d "pgrep httpd&#124;wc -l"<br/><br/><br/>Tags - <a href="tag.php?tag=freebsd" rel="tag">freebsd</a> , <a href="tag.php?tag=apache" rel="tag">apache</a>
]]>
</description>
</item><item>
<link>http://www.bizeway.net/read.php?597</link>
<title><![CDATA[Mysql长连接]]></title> 
<author>ArthurXF &lt;arthurxf@gmail.com&gt;</author>
<category><![CDATA[MySQL]]></category>
<pubDate>Fri, 30 Dec 2011 10:52:51 +0000</pubDate> 
<guid>http://www.bizeway.net/read.php?597</guid> 
<description>
<![CDATA[ 
	长短连接区别<br/><br/>不同于mysql_connect的短连接，mysql_pconnect持久连接的时候，将先尝试寻找一个在同一个主机上用同样的用户名和密码已经打开的（持久）连接，如果找到，则返回此连接标识而不打开新连接。<br/>当执行完毕后，到 mysql 服务器的持久连接不会被关闭，此连接将保持打开以备以后使用，即mysql_close() 不会关闭由 mysql_pconnect() 建立的连接。<br/> <br/>Apache与长连接管理<br/><br/>PHP本身并没有数据库连接池的概念，但是Apache有进程池的概念, 一个Apache子进程结束后会被放回进程池, 这也就使得用mysql_pconnect打开的的那个mysql连接资源可以不被释放，而是依附在相应的Apache子进程上保存到了进程池中。于是在下一个连接请求时它就可以被复用。但是在Apache并发访问量大的时候，如果使用mysql_pconnect，会由于之前的Apache子进程占用的MySQL连接没有close, 很快使MySQL达到最大连接数，使得之后的请求可能得不到响应。<br/>当然，高并发情况下也不能怪罪pconnect，用短连接频繁连接mysql，也一样有问题。在没有连接池的情况下，用apache做连接池管理是比较好的选择。<br/><br/><br/>Tags - <a href="tag.php?tag=mysql" rel="tag">mysql</a> , <a href="tag.php?tag=pconnect" rel="tag">pconnect</a>
]]>
</description>
</item><item>
<link>http://www.bizeway.net/read.php?596</link>
<title><![CDATA[FreeBSD更改csh为bash产生错误的解决办法]]></title> 
<author>ArthurXF &lt;arthurxf@gmail.com&gt;</author>
<category><![CDATA[FreeBSD]]></category>
<pubDate>Fri, 30 Dec 2011 06:10:51 +0000</pubDate> 
<guid>http://www.bizeway.net/read.php?596</guid> 
<description>
<![CDATA[ 
	操作系统：freebsd 8.0-RELEASE<br/>接触freebsd一天，感觉很不习惯 想把shell改为熟悉的bash<br/>步骤<br/>#cd /usr/ports/shells/bash<br/># make install clean ##这条命令忘记执行了 结果直接执行了下面的命令<br/>#chsh -s /usr/local/bin/bash<br/>于是杯具出现了 重新登录错误<br/> <br/>su:/usr/local/bin/bash: no such file or directory<br/>可见粗心大意 害人不浅<br/>解决办法：<br/>重启进入单用户模式 #启动时选择4<br/>因为硬重启 所以开始先检测磁盘<br/>#fsck<br/>#mount -a <br/>#chpass -s /bin/csh <br/>重启正常登录 执行<br/># make install clean <br/> <br/>#vim /etc/profile<br/>在里面加入下面命令(这里根据自己情况修改 如果PS1变量正常 不需要改动)<br/> PS1="`whoami`@`hostname &#124; sed 's/&#92;..*//'`"<br/> case `id -u` in<br/> &nbsp; &nbsp; &nbsp; &nbsp;0) PS1="${PS1}# ";;<br/> &nbsp; &nbsp; &nbsp; &nbsp;*) PS1="${PS1}$ ";;<br/> esac<br/>注销重新登录即可<br/><br/>Tags - <a href="tag.php?tag=freebsd" rel="tag">freebsd</a> , <a href="tag.php?tag=csh" rel="tag">csh</a> , <a href="tag.php?tag=bash" rel="tag">bash</a>
]]>
</description>
</item><item>
<link>http://www.bizeway.net/read.php?595</link>
<title><![CDATA[Unable to find the wrapper https错误的解决办法]]></title> 
<author>ArthurXF &lt;arthurxf@gmail.com&gt;</author>
<category><![CDATA[PHP]]></category>
<pubDate>Thu, 22 Dec 2011 04:27:11 +0000</pubDate> 
<guid>http://www.bizeway.net/read.php?595</guid> 
<description>
<![CDATA[ 
	PHP.ini默认配置下，用file_get_contents读取https的链接，就会如下错误：<br/>Warning: fopen() [function.fopen]: Unable to find the wrapper "https" - did you forget to enable it when you configured PHP?<br/><br/>这个错误分3种解决方案：<br/>1.windows下的PHP，只需要到php.ini中把extension=php_openssl.dll前面的;删掉，重启服务就可以了。<br/><br/>2.linux下的PHP，就必须安装openssl模块，安装好了以后就可以访问了。<br/><br/>3.如果服务器你不能修改配置的话，那么就使用curl函数来替代file_get_contents函数，当然不是简单的替换啊。还有相应的参数配置才能正常使用curl函数。
]]>
</description>
</item><item>
<link>http://www.bizeway.net/read.php?594</link>
<title><![CDATA[在服务器上mysql 导入导出 sql文件]]></title> 
<author>ArthurXF &lt;arthurxf@gmail.com&gt;</author>
<category><![CDATA[MySQL]]></category>
<pubDate>Mon, 17 Oct 2011 04:16:47 +0000</pubDate> 
<guid>http://www.bizeway.net/read.php?594</guid> 
<description>
<![CDATA[ 
	1.导出整个数据库<br/><br/>mysqldump -u 用户名 -p 数据库名 > 导出的文件名<br/><br/>mysqldump -u root -p biweb> biweb.sql<br/><br/>2.导出一个表<br/><br/>mysqldump -u 用户名 -p 数据库名 表名> 导出的文件名<br/><br/>mysqldump -u root -p biweb users> biweb_users.sql<br/><br/>3.导出一个数据库结构<br/><br/>mysqldump -u root -p -d --add-drop-table biweb>biweb.sql<br/><br/>-d 没有数据 --add-drop-table 在每个create语句之前增加一个drop table<br/><br/>4.导入数据库<br/> &nbsp; &nbsp; <br/>mysql -u 用户名 -p 数据库名 < 存放位置<br/>mysql -u root -p biwebtuan<biwebtuan.sql<br/><br/>Tags - <a href="tag.php?tag=mysql" rel="tag">mysql</a>
]]>
</description>
</item><item>
<link>http://www.bizeway.net/read.php?593</link>
<title><![CDATA[freebsd下使用的SSH命令]]></title> 
<author>ArthurXF &lt;arthurxf@gmail.com&gt;</author>
<category><![CDATA[FreeBSD]]></category>
<pubDate>Mon, 10 Oct 2011 06:51:30 +0000</pubDate> 
<guid>http://www.bizeway.net/read.php?593</guid> 
<description>
<![CDATA[ 
	ssh -l 用户名 -p 端口 hostip<br/>执行后，输入密码就可以连接到其他的服务器了。<br/>Tags - <a href="tag.php?tag=freebsd" rel="tag">freebsd</a> , <a href="tag.php?tag=ssh" rel="tag">ssh</a>
]]>
</description>
</item><item>
<link>http://www.bizeway.net/read.php?592</link>
<title><![CDATA[MYSQL多表查询结果合并的办法]]></title> 
<author>ArthurXF &lt;arthurxf@gmail.com&gt;</author>
<category><![CDATA[PHP]]></category>
<pubDate>Wed, 07 Sep 2011 07:27:43 +0000</pubDate> 
<guid>http://www.bizeway.net/read.php?592</guid> 
<description>
<![CDATA[ 
	$query_rs .= "SELECT * FROM biweb_news WHERE title LIKE ''%biweb%'' <br/>OR content LIKE ''%biweb%'' UNION SELECT * FROM biweb_user WHERE title LIKE <br/>''%biweb%'' OR content LIKE ''%biweb%'' ORDER BY submit_date DESC";<br/><br/>使用UNION可以把多个select的结果集合并后，进行排序，可以轻松实现多表查询结果合并。<br/><br/>ArthurXF倾情奉献！
]]>
</description>
</item><item>
<link>http://www.bizeway.net/read.php?591</link>
<title><![CDATA[Hadoop分布式文件系统]]></title> 
<author>ArthurXF &lt;arthurxf@gmail.com&gt;</author>
<category><![CDATA[网站架构]]></category>
<pubDate>Fri, 10 Jun 2011 04:01:13 +0000</pubDate> 
<guid>http://www.bizeway.net/read.php?591</guid> 
<description>
<![CDATA[ 
	一个分布式系统基础架构，由Apache基金会开发。用户可以在不了解分布式底层细节的情况下，开发分布式程序。充分利用集群的威力高速运算和存储。Hadoop实现了一个分布式文件系统（Hadoop Distributed File System），简称HDFS。HDFS有着高容错性的特点，并且设计用来部署在低廉的（low-cost）硬件上。而且它提供高传输率（high throughput）来访问应用程序的数据，适合那些有着超大数据集（large data set）的应用程序。HDFS放宽了（relax）POSIX的要求（requirements）这样可以流的形式访问（streaming access）文件系统中的数据。<br/><br/>诸多优点<br/>　　Hadoop 是一个能够对大量数据进行分布式处理的软件框架。但是 Hadoop 是以一种可靠、高效、可伸缩的方式进行处理的。Hadoop 是可靠的，因为它假设计算元素和存储会失败，因此它维护多个工作数据副本，确保能够针对失败的节点重新分布处理。Hadoop 是高效的，因为它以并行的方式工作，通过并行处理加快处理速度。Hadoop 还是可伸缩的，能够处理 PB 级数据。此外，Hadoop 依赖于社区服务器，因此它的成本比较低，任何人都可以使用。 　　Hadoop带有用 Java 语言编写的框架，因此运行在 Linux 生产平台上是非常理想的。Hadoop 上的应用程序也可以使用其他语言编写，比如 C++。<br/><br/>hadoop架构<br/>　　Hadoop 有许多元素构成。最底部是 Hadoop Distributed File Syst &nbsp;Hadoop 集群的简化视图<br/>em（HDFS），它存储 Hadoop 集群中所有存储节点上的文件。HDFS（对于本文）的上一层是 MapReduce 引擎，该引擎由 JobTrackers 和 TaskTrackers 组成。<br/>HDFS<br/>　　对外部客户机而言，HDFS 就像一个传统的分级文件系统。可以创建、删除、移动或重命名文件，等等。但是 HDFS 的架构是基于一组特定的节点构建的（参见图 1），这是由它自身的特点决定的。这些节点包括 NameNode（仅一个），它在 HDFS 内部提供元数据服务；DataNode，它为 HDFS 提供存储块。由于仅存在一个 NameNode，因此这是 HDFS 的一个缺点（单点失败）。 　　制到多个计算机中（DataNode）。这与传统的 RAID 架构大不相同。块的大小（通常为 64MB）和复制的块数量在创建文件时由客户机决定。NameNode 可以控制所有文件操作。HDFS 内部的所有通信都基于标准的 TCP/IP 协议。<br/>NameNode<br/>　　NameNode 是一个通常在 HDFS 实例中的单独机器上运行的软件。它负责管理文件系统名称空间和控制外部客户机的访问。NameNode 决定是否将文件映射到 DataNode 上的复制块上。对于最常见的 3 个复制块，第一个复制块存储在同一机架的不同节点上，最后一个复制块存储在不同机架的某个节点上。注意，这里需要您了解集群架构。 　　实际的 I/O 事务并没有经过 NameNode，只有表示 DataNode 和块的文件映射的元数据经过 NameNode。当外部客户机发送请求要求创建文件时，NameNode 会以块标识和该块的第一个副本的 DataNode IP 地址作为响应。这个 NameNode 还会通知其他将要接收该块的副本的 DataNode。 　　NameNode 在一个称为 FsImage 的文件中存储所有关于文件系统名称空间的信息。这个文件和一个包含所有事务的记录文件（这里是 EditLog）将存储在 NameNode 的本地文件系统上。FsImage 和 EditLog 文件也需要复制副本，以防文件损坏或 NameNode 系统丢失。<br/>DataNode<br/>　　DataNode 也是一个通常在 HDFS 实例中的单独机器上运行的软件。Hadoop 集群包含一个 NameNode 和大量 DataNode。DataNode 通常以机架的形式组织，机架通过一个交换机将所有系统连接起来。Hadoop 的一个假设是：机架内部节点之间的传输速度快于机架间节点的传输速度。 　　DataNode 响应来自 HDFS 客户机的读写请求。它们还响应创建、删除和复制来自 NameNode 的块的命令。NameNode 依赖来自每个 DataNode 的定期心跳（heartbeat）消息。每条消息都包含一个块报告，NameNode 可以根据这个报告验证块映射和其他文件系统元数据。如果 DataNode 不能发送心跳消息，NameNode 将采取修复措施，重新复制在该节点上丢失的块。<br/>文件操作<br/>　　可见，HDFS 并不是一个万能的文件系统。它的主要目的是支持以流的形式访问写入的大型文件。如果客户机想将文件写到 HDFS 上，首先需要将该文件缓存到本地的临时存储。如果缓存的数据大于所需的 HDFS 块大小，创建文件的请求将发送给 NameNode。NameNode 将以 DataNode 标识和目标块响应客户机。同时也通知将要保存文件块副本的 DataNode。当客户机开始将临时文件发送给第一个 DataNode 时，将立即通过管道方式将块内容转发给副本 DataNode。客户机也负责创建保存在相同 HDFS 名称空间中的校验和（checksum）文件。在最后的文件块发送之后，NameNode 将文件创建提交到它的持久化元数据存储（在 EditLog 和 FsImage 文件）。<br/>Linux 集群<br/>　　Hadoop 框架可在单一的 Linux 平台上使用（开发和调试时），但是使用存放在机架上的商业服务器才能发挥它的力量。这些机架组成一个 Hadoop 集群。它通过集群拓扑知识决定如何在整个集群中分配作业和文件。Hadoop 假定节点可能失败，因此采用本机方法处理单个计算机甚至所有机架的失败。<br/><br/>扩展阅读： <br/>1 <br/>http://hadoop.apache.org<br/>2 <br/>http://bbs.hadoopor.com<br/><br/>Tags - <a href="tag.php?tag=hadoop" rel="tag">hadoop</a>
]]>
</description>
</item><item>
<link>http://www.bizeway.net/read.php?590</link>
<title><![CDATA[最新智能手机操作系统市场占用率]]></title> 
<author>ArthurXF &lt;arthurxf@gmail.com&gt;</author>
<category><![CDATA[WAP]]></category>
<pubDate>Tue, 31 May 2011 07:10:11 +0000</pubDate> 
<guid>http://www.bizeway.net/read.php?590</guid> 
<description>
<![CDATA[ 
	<a href="http://www.bizeway.net/attachment/smartphone.jpg" target="_blank"><img src="http://www.bizeway.net/attachment/smartphone.jpg" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><br/>11年5月份最新报告<br/>Tags - <a href="tag.php?tag=%E6%99%BA%E8%83%BD%E6%89%8B%E6%9C%BA" rel="tag">智能手机</a>
]]>
</description>
</item><item>
<link>http://www.bizeway.net/read.php?589</link>
<title><![CDATA[google地图 地点to坐标的]]></title> 
<author>ArthurXF &lt;arthurxf@gmail.com&gt;</author>
<category><![CDATA[PHP]]></category>
<pubDate>Mon, 30 May 2011 10:34:34 +0000</pubDate> 
<guid>http://www.bizeway.net/read.php?589</guid> 
<description>
<![CDATA[ 
	http请求格式<br/><br/>&nbsp;&nbsp;http://maps.google.com/maps/geo?q=查询关键字&output=kml(输出格式可以为xml kml json)&oe=utf8&sensor=true或者false&key=你的apikey<br/><br/>示例<br/><br/>&nbsp;&nbsp;http://maps.google.com/maps/geo?q=湖南大学软件学院&output=kml&key=abcdefg(api key)<br/><br/>&nbsp;&nbsp;输出kml文件如下：<br/><br/>&nbsp;&nbsp;<br/>view plaincopy to clipboardprint?<br/>01.<?xml version="1.0" encoding="UTF-8" ?> &nbsp;<br/>02.<kml xmlns="http://earth.google.com/kml/2.0"><Response> &nbsp;<br/>03. &nbsp;<name>湖南大学软件学院</name> &nbsp;<br/>04. &nbsp;<Status> &nbsp;<br/>05. &nbsp; &nbsp;<code>200</code> &nbsp;<br/>06. &nbsp; &nbsp;<request>geocode</request> &nbsp;<br/>07. &nbsp;</Status> &nbsp;<br/>08. &nbsp;<Placemark id="p1"> &nbsp;<br/>09. &nbsp; &nbsp;<address>中国湖南省长沙市岳麓区麓山南路252号湖南大学软件学院</address> &nbsp;<br/>10. &nbsp; &nbsp;<AddressDetails Accuracy="9" xmlns="urn:oasis:names:tc:ciq:xsdschema:xAL:2.0"><Country><CountryNameCode>CN</CountryNameCode><CountryName>中国</CountryName><AdministrativeArea><AdministrativeAreaName>湖南省</AdministrativeAreaName><Locality><LocalityName>长沙市</LocalityName><DependentLocality><DependentLocalityName>岳麓区</DependentLocalityName><Thoroughfare><ThoroughfareName>麓山南路252号</ThoroughfareName></Thoroughfare><AddressLine>湖南大学软件学院</AddressLine></DependentLocality></Locality></AdministrativeArea></Country></AddressDetails> &nbsp;<br/>11. &nbsp; &nbsp;<ExtendedData> &nbsp;<br/>12. &nbsp; &nbsp; &nbsp;<LatLonBox north="28.1822847" south="28.1626124" east="112.9608784" west="112.9288636" /> &nbsp;<br/>13. &nbsp; &nbsp;</ExtendedData> &nbsp;<br/>14. &nbsp; &nbsp;<Point><coordinates>112.9448710,28.1724490,0</coordinates></Point> &nbsp;<br/>15. &nbsp;</Placemark> &nbsp;<br/>16.</Response></kml> &nbsp;<br/><?xml version="1.0" encoding="UTF-8" ?><br/><kml xmlns="http://earth.google.com/kml/2.0"><Response><br/> &nbsp;<name>湖南大学软件学院</name><br/> &nbsp;<Status><br/> &nbsp; &nbsp;<code>200</code><br/> &nbsp; &nbsp;<request>geocode</request><br/> &nbsp;</Status><br/> &nbsp;<Placemark id="p1"><br/> &nbsp; &nbsp;<address>中国湖南省长沙市岳麓区麓山南路252号湖南大学软件学院</address><br/> &nbsp; &nbsp;<AddressDetails Accuracy="9" xmlns="urn:oasis:names:tc:ciq:xsdschema:xAL:2.0"><Country><CountryNameCode>CN</CountryNameCode><CountryName>中国</CountryName><AdministrativeArea><AdministrativeAreaName>湖南省</AdministrativeAreaName><Locality><LocalityName>长沙市</LocalityName><DependentLocality><DependentLocalityName>岳麓区</DependentLocalityName><Thoroughfare><ThoroughfareName>麓山南路252号</ThoroughfareName></Thoroughfare><AddressLine>湖南大学软件学院</AddressLine></DependentLocality></Locality></AdministrativeArea></Country></AddressDetails><br/> &nbsp; &nbsp;<ExtendedData><br/> &nbsp; &nbsp; &nbsp;<LatLonBox north="28.1822847" south="28.1626124" east="112.9608784" west="112.9288636" /><br/> &nbsp; &nbsp;</ExtendedData><br/> &nbsp; &nbsp;<Point><coordinates>112.9448710,28.1724490,0</coordinates></Point><br/> &nbsp;</Placemark><br/></Response></kml><br/> <br/><br/>解释<br/><br/>&nbsp;&nbsp;<name>为查询关键字标签<br/><br/>&nbsp;&nbsp;<address>为关键字对应的详细地址<br/><br/>&nbsp;&nbsp;<CountryName>国家<br/><br/>&nbsp;&nbsp;<AdministrativeAreaName>省份名<br/><br/>&nbsp;&nbsp;<LocalityName>城市名<br/><br/>&nbsp;&nbsp;<DependentLocalityName>区名<br/><br/>&nbsp;&nbsp;<ThoroughfareName>路名及门牌号<br/><br/>< src="http://hi.images.csdn.net/js/blog/tiny_mce/themes/advanced/langs/zh.js" type="text/javascript"><br/>< src="http://hi.images.csdn.net/js/blog/tiny_mce/plugins/syntaxhl/langs/zh.js" type="text/javascript"><br/>t;&nbsp;&nbsp;<coordinates>经度，纬度<br/><br/>详细api文档请浏览 http://code.google.com/intl/zh-CN/apis/maps/documentation/geocoding/ <br/><br/>http://www.step1.cn/googleapi/map/kml.htm<br/><br/><br/>Tags - <a href="tag.php?tag=google%E5%9C%B0%E5%9B%BE" rel="tag">google地图</a>
]]>
</description>
</item><item>
<link>http://www.bizeway.net/read.php?588</link>
<title><![CDATA[用bin日志中恢复MySQL数据库]]></title> 
<author>ArthurXF &lt;arthurxf@gmail.com&gt;</author>
<category><![CDATA[MySQL]]></category>
<pubDate>Mon, 18 Apr 2011 08:57:14 +0000</pubDate> 
<guid>http://www.bizeway.net/read.php?588</guid> 
<description>
<![CDATA[ 
	如果MySQL服务器启用了二进制日志，你可以使用mysqlbinlog工具来恢复从指定的时间点开始 (例如，从你最后一次备份)直到现在或另一个指定的时间点的数据。“mysqlbinlog：用于处理二进制日志文件的实用工具”。<br/><br/>要想从二进制日志恢复数据，你需要知道当前二进制日志文件的路径和文件名。一般可以从选项文件(即my.cnf or my.ini，取决于你的系统)中找到路径。如果未包含在选项文件中，当服务器启动时，可以在命令行中以选项的形式给出。启用二进制日志的选项为–log-bin。要想确定当前的二进制日志文件的文件名，输入下面的MySQL语句：<br/><br/>SHOW BINLOG EVENTS G<br/><br/>你还可以从命令行输入下面的内容：<br/><br/>mysql –user=root -pmy_pwd -e ‘SHOW BINLOG EVENTS G’<br/><br/>将密码my_pwd替换为服务器的root密码。<br/><br/>1. 指定恢复时间<br/><br/>对于MySQL 4.1.4，可以在mysqlbinlog语句中通过–start-date和–stop-date选项指定DATETIME格式的起止时间。举例说明，假设在今天上午10:00(今天是2006年4月20日)，执行SQL语句来删除一个大表。要想恢复表和数据，你可以恢复前晚上的备份，并输入：<br/><br/>mysqlbinlog –stop-date=”2005-04-20 9:59:59″ /var/log/mysql/bin.123456<br/><br/>&#124; mysql -u root -pmypwd<br/><br/>该命令将恢复截止到在–stop-date选项中以DATETIME格式给出的日期和时间的所有数据。如果你没有检测到几个小时后输入的错误的SQL语句，可能你想要恢复后面发生的活动。根据这些，你可以用起使日期和时间再次运行mysqlbinlog：<br/><br/>mysqlbinlog –start-date=”2005-04-20 10:01:00″ /var/log/mysql/bin.123456<br/><br/>&#124; mysql -u root -pmypwd<br/><br/>在该行中，从上午10:01登录的SQL语句将运行。组合执行前夜的转储文件和mysqlbinlog的两行可以将所有数据恢复到上午10:00前一秒钟。你应检查日志以确保时间确切。下一节介绍如何实现。<br/><br/>2. 指定恢复位置<br/><br/>也可以不指定日期和时间，而使用mysqlbinlog的选项–start-position和–stop-position来指定日志位置。它们的作用与起止日选项相同，不同的是给出了从日志起的位置号。使用日志位置是更准确的恢复方法，特别是当由于破坏性SQL语句同时发生许多事务的时候。要想确定位置号，可以运行mysqlbinlog寻找执行了不期望的事务的时间范围，但应将结果重新指向文本文件以便进行检查。操作方法为：<br/><br/>mysqlbinlog –start-date=”2005-04-20 9:55:00″ –stop-date=”2005-04-20 10:05:00″<br/><br/>/var/log/mysql/bin.123456 > /tmp/mysql_restore.sql<br/><br/>该命令将在/tmp目录创建小的文本文件，将显示执行了错误的SQL语句时的SQL语句。你可以用文本编辑器打开该文件，寻找你不要想重复的语句。如果二进制日志中的位置号用于停止和继续恢复操作，应进行注释。用log_pos加一个数字来标记位置。使用位置号恢复了以前的备份文件后，你应从命令行输入下面内容：<br/><br/>mysqlbinlog –stop-position=”368312″ /var/log/mysql/bin.123456<br/><br/>mysqlbinlog –start-position=”368315″ /var/log/mysql/bin.123456<br/><br/>上面的第1行将恢复到停止位置为止的所有事务。下一行将恢复从给定的起始位置直到二进制日志结束的所有事务。因为mysqlbinlog的输出包括每个SQL语句记录之前的SET TIMESTAMP语句，恢复的数据和相关MySQL日志将反应事务执行的原时间<br/> <br/><br/>3.指定数据库名<br/>如果一台服务器上有多个库，指定数据库名将不会干扰其他的数据库。格式如下：<br/>mysqlbinlog &nbsp;--database="5217u" --start-date="2012-04-01 00:00:00" --stop-date="2012-05-01 08:00:00" &nbsp;mysql-bin.000088 > restore.sql<br/><br/>切记database是库名不是表名。<br/><br/>4.整理干净的sql文档<br/>虽然我们可以通过上面种种条件指定恢复相应的数据，不过mysalbinlog生成的sql文件会有很多其他的代码。造成sql文件过大，打开缓慢甚至打不开。<br/>我这里给出下列vi命令，来精简sql文件。<br/><br/>删除所有#号开头的行<br/>:%s/^#.*//g<br/>删除所有SET开头的行<br/>:%s/^SET.*//g<br/>删除所有BEGIN的行<br/>:%s/^BEGIN//g<br/>删除所有COMMIT的行<br/>:%s/^COMMIT//g<br/>删除所有的/*!*/;的行<br/>:%s/&#92;/&#92;*&#92;!&#92;*&#92;/;//g<br/>删除/*!..*/的行<br/>:%s/&#92;/&#92;*&#92;!.*//g<br/>删除空行<br/>:g/^$/d<br/><br/>下面是我清除问题数据留底的，读者不能直接使用，不过可以借鉴里面的，跨行多行删除的正则表达式写法<br/>注意：跨行多行的写法只支持vim,vi是不支持的<br/>:%s/^REPLACE INTO biweb_d&#92;_.&#92;{-})$//g<br/>:%s/^REPLACE INTO biweb_u&#92;_.&#92;{-})$//g<br/>:%s/^REPLACE INTO biweb_m&#92;_.&#92;{-})$//g<br/>:%s/^REPLACE INTO biweb_n&#92;_.&#92;{-})$//g<br/>:%s/^REPLACE INTO biweb_a&#92;_.&#92;{-})$//g<br/>:%s/^REPLACE INTO biweb_f&#92;_.&#92;{-})$//g<br/>:%s/^REPLACE INTO biweb_task&#92;_.&#92;{-})$//g<br/>:%s/^UPDATE biweb_d&#92;_.&#92;{-}'$//g<br/>:%s/^UPDATE biweb_a&#92;_.&#92;{-}'$//g<br/>:%s/^UPDATE biweb_u&#92;_.&#92;{-}'$//g<br/>:%s/^UPDATE biweb_m&#92;_.&#92;{-}'$//g<br/>:%s/^DELETE FROM biweb_m.*//g<br/>:%s/^DELETE FROM biweb_d.*//g<br/>:%s/^DELETE FROM biweb_a.*//g<br/>:%s/^UPDATE biweb_task.*//g<br/>:%s/^UPDATE biweb_n&#92;_.&#92;{-})$//g<br/>:%s/^UPDATE biweb_n.*//g<br/>:%s/^ALTER TABLE `biweb_a.*//g<br/>:%s/^UPDATE `5217u`.`biweb_a.*//g<br/>:%s/^UPDATE `5217u`.`biweb_u.*//g<br/>:%s/^UPDATE `5217u`.`biweb_m.*//g<br/>:g/^$/d<br/><br/><br/>Tags - <a href="tag.php?tag=mysql" rel="tag">mysql</a> , <a href="tag.php?tag=bin" rel="tag">bin</a>
]]>
</description>
</item><item>
<link>http://www.bizeway.net/read.php?587</link>
<title><![CDATA[如何规范化地群发邮件？]]></title> 
<author>ArthurXF &lt;arthurxf@gmail.com&gt;</author>
<category><![CDATA[网站架构]]></category>
<pubDate>Wed, 30 Mar 2011 09:24:19 +0000</pubDate> 
<guid>http://www.bizeway.net/read.php?587</guid> 
<description>
<![CDATA[ 
	<div class="answer"><div><p class="MsoNormal" align="center"></p><span><br /></span>&nbsp; <strong><span><span>一、<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span></strong><strong><span>如何选择邮件系统<span><br /></span></span></strong><span>搭建起邮件服务器，你需要邮件系统的基本知识，<span>SMTP</span>协议规范，<span>MIME</span>编码规范，<span>MX</span>记录的基础知识请参考相应的<span>RFC</span>文档。<span><br /></span></span><p class="MsoNormal"><strong><span><span>（一）</span></span><span>IP</span><span>地址选择</span></strong></p><span>选择放置邮件服务器的<span>IDC</span>，更准确地说是所在的<span>IP</span>段，应选择处于完全静态<span>C</span>类<span>IP</span>段之内，最好<span>B</span>类<span>IP</span>段也是静态的。注意有时运营商分配的单个所谓静态<span>IP</span>，可能处于一段<span>C</span>类动态<span>IP</span>段（如<span>ADSL</span>）之内，这时候你的<span>IP</span>就很容易被认为是动态<span>IP</span>，要知道，动态<span>IP</span>在邮件运营商那里是不受欢迎的。另外要检查<span>IP</span>是否被列入国际黑名单（<span>RBL</span>），很多<span>RBL</span>经常将国内的整个<span>B</span>段列入黑名单的。<span><br /></span></span><p class="MsoNormal"><strong><span><span>（二）</span></span><span>邮件发送软件选择</span></strong></p><span>使用一个权威的第三方发送软件，可以免去你很多烦恼。<span>POSTFIX</span>、<span>QMAIL</span>、<span>FOXMAIL</span>、<span>AIMC</span>、<span>COREMAIL</span>等在编码规范、<span>SMTP</span>会话规范方面都有着可靠的经验，基本不会出现协议级的低等错误。如果你选择自主开发，那就要好好补习<span>RFC</span>文档了。<span><br /></span></span><span>如果你的系统有提供给个人用户自定制内容发邮件的功能，如邀请信，贺卡等，你还需要安装一套基本的反垃圾软件，作为一个自律的发送方，这很有必要。<span><br /></span></span><span><br /></span><strong><span><span>二、<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span></strong><strong><span><span>需要</span>建立哪些<span>DNS</span>记录<span><br /></span></span></strong><a id="dns" name="dns"></a><p class="MsoNormal"><span><span>&nbsp;&nbsp;&nbsp; </span></span><span>为什么要为<span>IP</span>做<span>DNS</span>记录？就是要告诉接收方，您使用的是静态的IP和域名，并非伪造，您对这些IP和域名有控制权。</span></p><span>&nbsp;&nbsp;&nbsp; </span><span>下面假设邮件服务器有两台：<span>202.100.100.1<span>&nbsp;&nbsp;&nbsp; </span>202.100.100.2, </span>邮箱域名是&ldquo;<span>@abc.com</span>&rdquo;<span><br /></span></span><p class="MsoNormal"><span><span>&nbsp;&nbsp;&nbsp; </span></span><strong><span><span>（一）</span></span><span>A</span><span>记录</span></strong></p><table border="0" cellspacing="0" cellpadding="0" width="500" class="MsoNormalTable"><tbody><tr><td width="188"><span>主机名<span><br /></span></span></td><td width="145"><span>记录类型<span><br /></span></span></td><td width="167"><span>IP<br /></span></td></tr><tr><td width="188"><span>server1.abc.com<br /></span></td><td width="145"><span>A<br /></span></td><td width="167"><span>202.100.100.1<br /></span></td></tr><tr><td width="188"><span>server2.abc.com<br /></span></td><td width="145"><span>A<br /></span></td><td width="167"><span>202.100.100.2<br /></span></td></tr></tbody></table><span>其中<span>server1.abc.com</span>是在<span>SMTP</span>会话时，向对方服务器发送<span>HELO</span>命令后带的主机名参数。如&ldquo;<span>HELO server1.abc.com</span>&rdquo;。该<span>A</span>记录通常在提供<span>abc.com</span>域名的运营商处可以申请。<span><br /></span></span><span>记录生效后<span>,</span>通过<span>nslookup</span>命令查询应该有如下结果<span>,</span>以<span>QQ</span>邮箱为例<span><br /></span></span><span></span><span><br /></span><span><img src="images/faq/a1.jpg" border="0" />&nbsp;</span><span><br /></span><p class="MsoNormal"><strong><span><span>（二）</span></span><span>PTR</span><span>记录</span></strong></p><table border="0" cellspacing="0" cellpadding="0" width="500" class="MsoNormalTable"><tbody><tr><td width="188"><span>IP<br /></span></td><td width="145"><span>记录类型<span><br /></span></span></td><td width="167"><span>主机名<span><br /></span></span></td></tr><tr><td width="188"><span>202.100.100.1<br /></span></td><td width="145"><span>PTR<br /></span></td><td width="167"><span>server1.abc.com<br /></span></td></tr><tr><td width="188"><span>202.100.100.2<br /></span></td><td width="145"><span>PTR<br /></span></td><td width="167"><span>server2.abc.com<br /></span></td></tr></tbody></table><span>如您所见，<span>PTR</span>记录其实是<span>A</span>记录的反向，<span>A</span>记录将域名解释为<span>IP</span>，<span>PTR</span>记录将<span>IP</span>解释为域名。通常在分配<span>IP</span>地址的电信运营商处可以申请。<span><br /></span></span><p class="MsoNormal"><span>记录生效后<span>,</span>通过<span>nslookup</span>命令查询应该有如下结果，以<span>QQ</span>邮箱为例：</span></p><span><br /></span><span><img src="images/faq/a2.jpg" border="0" />&nbsp;</span> <p class="MsoNormal"><span><strong>（三）<span>TXT</span>记录</strong></span></p><table border="0" cellspacing="0" cellpadding="0" width="500" class="MsoNormalTable"><tbody><tr><td width="188"><span>域名<span><br /></span></span></td><td width="145"><span>记录类型<span><br /></span></span></td><td width="167"><span>IP<br /></span></td></tr><tr><td width="188"><span>abc.com<br /></span></td><td width="145"><span>TXT<br /></span></td><td width="167"><span>202.100.100.1<br /></span></td></tr><tr><td width="188"><span>abc.com<br /></span></td><td width="145"><span>TXT<br /></span></td><td width="167"><span>202.100.100.2<br /></span></td></tr></tbody></table><span>如果你用上了整个<span>C</span>段的<span>IP,</span>像下面这样做就省事多了。<span><br /></span></span><table border="0" cellspacing="0" cellpadding="0" width="500" class="MsoNormalTable"><tbody><tr><td width="188"><span>域名<span><br /></span></span></td><td width="145"><span>记录类型<span><br /></span></span></td><td width="167"><span>IP<br /></span></td></tr><tr><td width="188"><span>abc.com<br /></span></td><td width="145"><span>TXT<br /></span></td><td width="167"><span>202.100.100.0/24<br /></span></td></tr></tbody></table><span>TXT</span><span>记录用于声明本邮箱域名的真正发信服务器<span>IP</span>，同样在提供<span>abc.com</span>域名的运营商处可以申请。<span><br /></span></span><p class="MsoNormal"><span>记录生效后<span>,</span>通过<span>nslookup</span>命令查询应该有如下结果<span>,</span>以<span>QQ</span>邮箱为例：</span></p><span><span>&nbsp;&nbsp;&nbsp; <img src="images/faq/a3.jpg" border="0" /></span><br /></span><span>A</span><span>记录与<span>PTR</span>记录互相搭配，表明你的<span>IP</span>地址是静态的，邮件服务器是固定的。<span>TXT</span>记录能帮助接收方排除仿冒你的域名的来源邮件，从而使你发出的邮件更加可信。</span> <p class="MsoNormal"><strong><span>三、如何规范地群发邮件</span></strong><a id="begin" name="begin"></a></p><span><span>&nbsp;&nbsp;&nbsp; </span></span><span>完成上述工作后，总算可以开始群发邮件了，每天给什么人发？给多少人发？每人发多少？发些什么内容？如何规范地群发邮件？以下是你需要尽可能遵守的原则，</span><span><br /></span><span><p class="MsoNormal"><span><span><strong>（一）控制发信速度</strong></span></span></p><p class="MsoNormal"><span><span>1.<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span>邮件服务器都有对IP的发信频率限制，达到了每分钟/每小时等上限时，邮件往往就发不过去，这时候最好的方法是暂停发送，过若干分钟或小时后重试。</span></span></span></span></p><p class="MsoNormal"><span><span>2.<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>为避免垃圾邮件泛滥，<span>邮件服务器</span>都有日发信量限制，达到每日上限时，当日就不能再发邮件了，只能暂停发送，留待明日继续发信。</span></p><p class="MsoNormal"><span><span>3.<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="font-family: 宋体; font-size: small">运营商设置的发信速度和发信量的限制，是适合绝大多数情况的，如你确实有需要超量发送，而邮件的信誉度和重要性也相当高，可以尝试联系运营商特别处理。</span></span></span></span></p></span><strong><span><span>（二）规范</span></span><span>邮件格式<span><br /></span></span></strong><p class="MsoNormal"><span><span>1.<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>整齐简洁的排版，专业的语言。</span></p><span><span>2.<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>尽可能缩小邮件体积，夹大附件的邮件通常不太受欢迎。<span><br /></span></span><p class="MsoNormal"><span><span>3.<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>在显眼的地方标有退订入口，会为你的诚意增添几分。</span></p><span><br /></span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<img src="images/faq/b1.jpg" border="0" /></span><strong><span><span>（三）规范</span></span><span>邮件内容<span><br /></span></span></strong><p class="MsoNormal"><span><span>1.<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>注册信、密保信等重要邮件请在主题标明关键字眼，一般都不会被过滤。</span>&nbsp;</p><span><span>&nbsp;&nbsp;&nbsp;<img src="images/faq/b2.jpg" border="0" /></span></span><span><br /></span><p class="MsoNormal"><span><span>2.<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>纯广告的邮件最好少发，这是最常受用户投诉的，大多数情况下，你的会员并不需要铺天盖地的广告，倘若真要发的，请放慢速度，主题别忘了加上&ldquo;（<span>AD</span>）&rdquo;</span></p><p class="MsoNormal"><span>&nbsp;&nbsp;&nbsp;<img src="images/faq/b3.jpg" border="0" /></span></p><span><br /></span><p class="MsoNormal"><span><span>3.<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>订阅信息邮件也是一般不会被过滤的。但若是钻空子借订阅邮件大做广告，将引发更多的用户投诉。</span>&nbsp;</p><span><img src="images/faq/b4.jpg" border="0" /></span> <p class="MsoNormal"><strong><span><span>（四）</span></span><span>规范发件人信息</span></strong></p><span><span>1.<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>由系统群发的邮件请使用相同的发件人，<span><a href="mailto:如service@abc.com"><u><span><span>如</span></span><span>service@abc.com</span></u></a></span>就比较好辨认。同时该发件人地址应该能收信，避免退信时失败而造成接收方邮件队列堆积。同时应避免频繁变动发件人或发件域。<span><br /></span></span><span><span>2.<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>如果是自动中转邮件，即使原文中发件人使用原始发信方，<span><a href="mailto:如mike@163.com"><u><span><span>如</span></span><span>mike@163.com</span></u></a>,</span>但<span>SMTP</span>会话中的<span>mail <a href="mailto:from指令也应该使用本域发件人service@abc.com,否则容易被认为是冒用163.com"><u><span>from</span><span><span>指令也应该使用本域发件人</span></span><span>service@abc.com,</span><span><span>否则容易被认为是冒用163.com</span></span></u></a></span>的域名发送。<span><br /></span></span><span><span>3.<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>注册信、密保信等重要邮件最好与纯广告、订阅信分开不同的<span>IP</span>发送，一但发生广告信发送<span>IP</span>被拒，也不会影响正常会员的注册功能。<span><br /></span></span><span><br /></span><strong><span><br /></span></strong><strong><span><span>（五）</span></span><span>更新有效收件人地址<span><br /></span></span></strong><span>经常滚动更新你的会员列表，去掉已经注销的用户或已经退订的会员。做得更细致一点，通过在邮件中放置一些<span>URL</span>，把长期阅读点击率偏低的会员去掉。诚然，这可能会让你损失那么一点潜在用户，但换来好的口碑。何况，激活长期不阅读的沉睡会员的可能性微乎其微。</span><strong><span><span>（六）</span></span><span>主动清理门户<span><br /></span></span></strong><span>有些功能可以提供会员向外发邮件，例如邀请信，贺卡等。别有用心的人可能利用这些功能群发垃圾邮件、欺诈信息、政治敏感信息等，这无异于养虎遗患。这类会员是坚决要清理掉的。</span> <p class="MsoNormal"><strong><span>四、如何定位发送失败原因</span></strong></p><strong><span><span>（一）</span></span><span><span> </span></span><span>定位问题<span><br /></span></span></strong><p class="MsoNormal"><span>定位问题，最直接的方式是查看系统日志，捕捉<span>SMTP</span>会话中接收方返回的错误信息。不同的邮件软件有不同的返回信息，但基本相似。这里需要定位的是究竟是系统问题还是用户问题。我们以下面的例子说明：</span></p><span><br /></span><span><strong>系统问题：<span><br /></span></strong></span><span>Connection time out<br /></span><span>Open relay denied<br /></span><span>IP involved in rbl<br /></span><span>Server refused mail service</span><span><strong>用户问题：<span><br /></span></strong></span><span>User not found<br /></span><span>Mail size exceeded<br /></span><span>No space in mail box<br /></span><span><br /></span><span>正像你看到的，系统问题一般是由网络、<span>RBL</span>、内容过滤，会话规范、频率限制一类的全局问题导致。而用户问题一般是由对方用户名、邮箱空间之类的个别问题导致的。<span><br /></span></span><span>我们需要去解决的，通常仅仅是系统问题。</span><span><span>&nbsp; </span><br /></span><strong><span><span>（二）</span></span><span><span> </span></span><span>沟通申诉<span><br /></span></span></strong><span>沟通申诉之前，你需要准备一些资料，以便提高排查速度和准确率。</span><span><span>1.<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>本方发信<span>IP</span>地址<span><br /></span></span><span><span>2.<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>返回错误信息的接受方<span>IP</span>地址<span><br /></span></span><span><span>3.<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>错误日志，最好具备清晰易懂的日志输出，有完整的时间点，收发件人，错误信息等记录。<span><br /></span></span></div></div><br/>Tags - <a href="tag.php?tag=%E7%BE%A4%E5%8F%91%E9%82%AE%E4%BB%B6" rel="tag">群发邮件</a>
]]>
</description>
</item><item>
<link>http://www.bizeway.net/read.php?586</link>
<title><![CDATA[sohu退信代码]]></title> 
<author>ArthurXF &lt;arthurxf@gmail.com&gt;</author>
<category><![CDATA[网站架构]]></category>
<pubDate>Sun, 20 Mar 2011 05:56:07 +0000</pubDate> 
<guid>http://www.bizeway.net/read.php?586</guid> 
<description>
<![CDATA[ 
	若您的邮件无法送达搜狐各域邮箱，并收到退信。请根据退信里的关键字，在下面的表格中查询具体的退信原因。<br/>退信代码 &nbsp;说明 &nbsp;解决方法 &nbsp;<br/>450 4.1.8 发件人被拒 请检查发件人地址 <br/>554 5.7.1 发件人被拒 请检查发件人地址 <br/>504 5.5.2 发件人被拒 请检查发件人地址 <br/>550 5.1.1 接收人被拒 请检查收件人地址 <br/>554 5.7.1 接收人被拒 请检查收件人地址 <br/>450 4.1.8 发件人被拒 请查看DNS配置 <br/>552 5.3.4 邮件大小超限 请减小邮件的大小 <br/>503 5.5.0 连接被拒 遵守协议规则 <br/>553 5.7.0 IP地址被拒 停止发信,等待其解禁 <br/>553 5.7.1 发件人被拒 停止发信,等其解禁 <br/>553 5.7.2 收件人被拒 联系收件人修改邮箱配置 <br/>553 5.7.3 内容被拒 停止发信,等待其解禁 <br/>553 5.7.4 IP地址被拒 停止发信,等待其解禁 <br/>421 4.2.1 临时错误 重试 <br/>553 5.7.3 &nbsp;不支持附件发送 取消附件重试 <br/><br/>如果上述信息仍不能解决你的问题，请联系abuse@sohu-inc.com 寻求帮助<br/>Tags - <a href="tag.php?tag=%E9%80%80%E4%BF%A1%E4%BB%A3%E7%A0%81" rel="tag">退信代码</a>
]]>
</description>
</item><item>
<link>http://www.bizeway.net/read.php?585</link>
<title><![CDATA[什么是SPF记录？如何设置SPF来防止我的邮件被拒收呢？]]></title> 
<author>ArthurXF &lt;arthurxf@gmail.com&gt;</author>
<category><![CDATA[网站架构]]></category>
<pubDate>Thu, 17 Mar 2011 07:32:17 +0000</pubDate> 
<guid>http://www.bizeway.net/read.php?585</guid> 
<description>
<![CDATA[ 
	<div>什么是SPF记录？如何设置SPF来防止我的邮件被拒收呢？</div><div><div><div><div><span style="color: #555555"><strong>什么是SPF记录？</strong></span></div><div><span style="font-size: 14px">定义：</span></div><div><span style="font-size: 14px">(Sender Policy Framework) 的缩写，一种以IP地址认证发信人身份的技术，</span></div><div><span style="font-size: 14px">作用：</span></div><div><span style="font-size: 14px"><span style="font-size: 14px"><span style="font-size: 14px"><span style="font-size: 14px">可以<span style="font-family: 宋体; font-size: 10pt; mso-ascii-font-family: 'Times new roman'; mso-hansi-font-family: 'Times new roman'; mso-bidi-font-family: 'Times new roman'; mso-font-kerning: 1.0pt; mso-ansi-language: en-Us; mso-fareast-language: ZH-Cn; mso-bidi-language: Ar-sA">避免伪造地址的垃圾邮件，避免有其他人伪造我的域名来投递。提高发送外域邮箱的成功率。</span></span></span></span></span></div><div><span style="font-size: 14px">原理：</span></div><div><span style="font-size: 14px"><span style="font-size: 14px"><span style="font-size: 14px"><span style="font-size: 14px"><span style="font-family: 'Times new roman', 'serif'; font-size: 10pt; mso-font-kerning: 1.0pt; mso-ansi-language: en-Us; mso-fareast-language: ZH-Cn; mso-bidi-language: Ar-sA; mso-fareast-font-family: 宋体">spf</span><span style="font-family: 宋体; font-size: 10pt; mso-ascii-font-family: 'Times new roman'; mso-hansi-font-family: 'Times new roman'; mso-bidi-font-family: 'Times new roman'; mso-font-kerning: 1.0pt; mso-ansi-language: en-Us; mso-fareast-language: ZH-Cn; mso-bidi-language: Ar-sA">规则规定了一个域名下的邮件必须通过哪些</span><span style="font-family: 'Times new roman', 'serif'; font-size: 10pt; mso-font-kerning: 1.0pt; mso-ansi-language: en-Us; mso-fareast-language: ZH-Cn; mso-bidi-language: Ar-sA; mso-fareast-font-family: 宋体">smtp</span><span style="font-family: 宋体; font-size: 10pt; mso-ascii-font-family: 'Times new roman'; mso-hansi-font-family: 'Times new roman'; mso-bidi-font-family: 'Times new roman'; mso-font-kerning: 1.0pt; mso-ansi-language: en-Us; mso-fareast-language: ZH-Cn; mso-bidi-language: Ar-sA">服务器来发送。一个域名可以为自己创建一个</span><span style="font-family: 'Times new roman', 'serif'; font-size: 10pt; mso-font-kerning: 1.0pt; mso-ansi-language: en-Us; mso-fareast-language: ZH-Cn; mso-bidi-language: Ar-sA; mso-fareast-font-family: 宋体">txt</span><span style="font-family: 宋体; font-size: 10pt; mso-ascii-font-family: 'Times new roman'; mso-hansi-font-family: 'Times new roman'; mso-bidi-font-family: 'Times new roman'; mso-font-kerning: 1.0pt; mso-ansi-language: en-Us; mso-fareast-language: ZH-Cn; mso-bidi-language: Ar-sA">解析记录，在这个解析记录里面是这个域名下所有的</span><span style="font-family: 'Times new roman', 'serif'; font-size: 10pt; mso-font-kerning: 1.0pt; mso-ansi-language: en-Us; mso-fareast-language: ZH-Cn; mso-bidi-language: Ar-sA; mso-fareast-font-family: 宋体">smtp</span><span style="font-family: 宋体; font-size: 10pt; mso-ascii-font-family: 'Times new roman'; mso-hansi-font-family: 'Times new roman'; mso-bidi-font-family: 'Times new roman'; mso-font-kerning: 1.0pt; mso-ansi-language: en-Us; mso-fareast-language: ZH-Cn; mso-bidi-language: Ar-sA">服务器的</span><span style="font-family: 'Times new roman', 'serif'; font-size: 10pt; mso-font-kerning: 1.0pt; mso-ansi-language: en-Us; mso-fareast-language: ZH-Cn; mso-bidi-language: Ar-sA; mso-fareast-font-family: 宋体">ip</span><span style="font-family: 宋体; font-size: 10pt; mso-ascii-font-family: 'Times new roman'; mso-hansi-font-family: 'Times new roman'; mso-bidi-font-family: 'Times new roman'; mso-font-kerning: 1.0pt; mso-ansi-language: en-Us; mso-fareast-language: ZH-Cn; mso-bidi-language: Ar-sA">地址。</span> </span></span></span></span></div><div><span style="font-size: 14px">接收邮件方会首先检查对方邮箱后缀域名的SPF记录，来确定发件人的smtp服务器的IP地址是否被包含在SPF记录里面，如果在，就认为是一封正确的邮件，否则会认为是一封伪造的邮件进行退回。</span></div><div>&nbsp;</div><div><p><strong>查询txt记录的方法：</strong></p><p><strong>nslookup</strong></p><p>&gt; <strong>set q=txt</strong></p><p>&gt; net263.com</p><p>Server:&nbsp; ns2.263isp.net</p><p>Address:&nbsp; 211.150.124.66</p><p>Non-authoritative answer:</p><p>net263.com&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; text =</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;v=spf1 include:spf.263xmail.com ~all&quot;</p><p><strong>查询txt记录下对应的ip的方法</strong></p><p>查询 include 后面字段的域名即可</p><p>&gt; set q=txt</p><p>&gt; <strong>spf.263xmail.com</strong></p><p>Server:&nbsp; ns2.263isp.net</p><p>Address:&nbsp; 211.150.124.66</p><p>Non-authoritative answer:</p><p>spf.263xmail.com&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; text =</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;v=spf1 ip4:211.150.67.0/24 ip4:211.150.96.0/24 ip4:211.150.100.0/24 ip4</p><p>:211.157.128.0/24 ip4:211.150.64.0/24 ip4:211.150.122.0/24 ip4:74.86.11.0/28 ip4</p><p>:63.217.87.0/28 ip4:211.157.224.0/24 ~all&quot;</p><p>&nbsp;以上所有的IP都SMTP的服务器IP地址</p><p>~all和?all 代表不确定的，我们的mx服务器不会去拒收</p><p>-all 代表确定的，一旦发信人没有使用txt记录下规定的ip投递，我们的mx服务器就会拒收。</p></div><div><span style="font-size: 14px">&nbsp;</span></div></div><div><strong>如何设置域名邮箱的SPF记录呢？</strong></div><div>&nbsp;</div><div><div>为了提升域名邮箱发送外域（@qq.com以外的邮箱）邮件的成功率，建议您给自己的域名设置一条TXT记录来避免这种情况。</div><div>&nbsp;</div></div><div>TXT记录值为：<span style="color: #ff0000; font-size: 14px">v=spf1 include:spf.mail.qq.com ~all</span></div><div><span style="color: #ff0000; font-size: 14px">附263企邮箱的TXT记录值为：v=spf1 include:spf.263xmail.com ~all</span></div><div>&nbsp;</div><div>如图：万网的设置页面</div><div>1.从<a href="http://diy.hichina.com/">diy.hichina.com</a>处登录域名管理系统；</div><div>&nbsp;</div><div>2.在TXT（正文字串）处设置一条TXT记录，如下：</div><div>&nbsp;</div><div><img src="http://service.mail.qq.com/images/faq/%7BD8BDD255-042E-4B1D-8E32-8A6C791E8E0F%7D.tmp" border="0" alt="什么是SPF记录？如何设置SPF来防止我的邮件被拒收呢？" title="什么是SPF记录？如何设置SPF来防止我的邮件被拒收呢？" height="79" /></div><div>&nbsp;</div><div>注：<span style="color: #ff0000; font-size: 14px">易名中国</span>，<span style="color: #ff0000; font-size: 14px">中资源</span>目前不支持设置TXT记录&nbsp;</div><div>--------------------------------------------------------------------------------------------------</div><div>如何增加SPF记录<br />非常简单，在DNS里面添加TXT记录即可。登陆<a href="http://www.openspf.org/">http://www.openspf.org/</a>在里面输入你的域名，点击Begin，然后会自动得到你域名的一些相关信息。<br />a 你域名的A记录，一般选择yes，因为他有可能发出邮件。<br />mx 一般也是yes，MX服务器会有退信等。<br />ptr 选择no，官方建议的。</div><div><p>a：有没有其他的二级域名？比如：mail.abc.com和www不在一台server上，则填入mail.abc.com。否则清空。<br />mx: 一般不会再有其他的mx记录了。<br />ip4： 你还有没有其他的ip发信？可能你的smtp服务器是独立出来的，那么就填入你的IP地址或者网段。<br />include: 如果有可能通过一个isp来发信，这个有自己的SPF记录，则填入这个isp的域名，比如：dgcgw.com<br />~all: 意思是除了上面的，其他的都不认可。当然是yes了。</p><p>好了，点击Continue&hellip;..<br />自动生成了一条SPF记录，比如abc.com的是<br />v=spf1 a mx ~all<br />并且在下面告诉你如何在你的bind里面添加一条<br />abc.com. IN TXT &ldquo;v=spf1 a mx ~all&rdquo;</p><p>加入你的bind，然后ndc reload即可。<br />检查一下：<br />dig -t txt extmail.org</p><p>如果您的域名是我们的dns服务器进行解析的，我们的网页上没有设置TXT记录的地方，但是如果你的DNS主server是在在我们这里的，我们可以代帮忙设置。设置完毕后您即可以通过使用spf策略进行垃圾邮件验证了。</p></div></div></div><br/>Tags - <a href="tag.php?tag=spf" rel="tag">spf</a>
]]>
</description>
</item><item>
<link>http://www.bizeway.net/read.php?584</link>
<title><![CDATA[正常邮件被误判到不明文件夹的解决方案]]></title> 
<author>ArthurXF &lt;arthurxf@gmail.com&gt;</author>
<category><![CDATA[网站架构]]></category>
<pubDate>Thu, 17 Mar 2011 07:30:19 +0000</pubDate> 
<guid>http://www.bizeway.net/read.php?584</guid> 
<description>
<![CDATA[ 
	对于正常邮件被投递到不明文件夹，可以指导用户按采用如下几种方法进行处理：<br/><br/> &nbsp; &nbsp; &nbsp;1、通过WEBMAIL登录邮箱，打开收到不明文件夹中的邮件，点击发件方人右侧的“这不是垃圾邮件”按钮，这样会系统会自动把邮件由不明文件夹移收到收件箱中，并自动把发件方地址添加到地址本，以后所有来自该地址给您发送的邮件均会投递到收件箱中。<br/><br/> &nbsp; &nbsp; &nbsp;2、登录到超级域管理员，使用“域过滤及黑白名单管理”中“邮件地址白名单”或“邮件域名白名单”功能将发件方地址或发件方域添加到白名单中，以后发件方地址或发件域给贵公司所有企业邮箱发送的邮件均会投递到收件箱中。<br/><br/> &nbsp; &nbsp; &nbsp; 3、将收到不明文件夹的正常邮件做为附件转发以“邮件误判”为主题发送至管理员的信箱，公司管理员的反垃圾部门会对邮件特征重新进行分析，使邮件系统慢慢将此类邮件识别为正常邮件，以减小误判率。<br/><br/>Tags - <a href="tag.php?tag=%E6%AD%A3%E5%B8%B8%E9%82%AE%E4%BB%B6%E8%AF%AF%E5%88%A4" rel="tag">正常邮件误判</a>
]]>
</description>
</item><item>
<link>http://www.bizeway.net/read.php?583</link>
<title><![CDATA[IP黑名单解决办法]]></title> 
<author>ArthurXF &lt;arthurxf@gmail.com&gt;</author>
<category><![CDATA[网站架构]]></category>
<pubDate>Thu, 17 Mar 2011 07:28:41 +0000</pubDate> 
<guid>http://www.bizeway.net/read.php?583</guid> 
<description>
<![CDATA[ 
	1、IP黑名单的机制：把垃圾邮件过滤到不明文件夹，只是临时的解决方案，如果想从根本上解决这个问题，必须对垃圾邮件源进行控制，目前263的邮件系统为了对垃圾邮件源进行控制，会时时对263企业邮局MX服务器投递垃圾邮件的IP进行统计，如果单个IP向我们MX服务器投递垃圾邮件达到一定数量时，我们的反垃圾网关会自动把这个IP加入到黑名单，禁止这个IP向我们MX服务器投递邮件。<br/><br/>2、IP黑名单的现像：对于发件方服务器IP被加到黑名单的，发件方服务器连接263企业邮箱服务器投递邮件，在rcpt to命令后，263服务器会返回"598 ip address in blacklist Please see http://211.150.100.59:8083/blacklist/blacklist.htm for more details”提示，发件方邮件系统收到该提示后，会给发件方信箱弹回包含该提示的退信。<br/><br/>3、IP黑名单的处理方法：请发件方邮件服务提供商的邮件管理员直接同abuse@net263.com信箱（263反垃圾专员的联系信箱）联系放开，abuse@net263.com信箱会把263服务器提取到垃圾邮件样本提供给发件方邮件服务提供商的邮件管理员，在对方作出处理或保证以后不在发送垃圾邮件后，反垃圾专员会对IP进行放开。<br/><br/>Tags - <a href="tag.php?tag=%E9%BB%91%E5%90%8D%E5%8D%95" rel="tag">黑名单</a>
]]>
</description>
</item><item>
<link>http://www.bizeway.net/read.php?582</link>
<title><![CDATA[open-flash-chart开源的flash画图组件（饼状图、柱状图、曲线图）]]></title> 
<author>ArthurXF &lt;arthurxf@gmail.com&gt;</author>
<category><![CDATA[Flash]]></category>
<pubDate>Wed, 16 Mar 2011 08:45:16 +0000</pubDate> 
<guid>http://www.bizeway.net/read.php?582</guid> 
<description>
<![CDATA[ 
	<a href="http://teethgrinder.co.uk/open-flash-chart/" target="_blank">http://teethgrinder.co.uk/open-flash-chart/</a>
]]>
</description>
</item><item>
<link>http://www.bizeway.net/read.php?581</link>
<title><![CDATA[38种波霸]]></title> 
<author>ArthurXF &lt;arthurxf@gmail.com&gt;</author>
<category><![CDATA[保健常识]]></category>
<pubDate>Tue, 18 Jan 2011 05:35:59 +0000</pubDate> 
<guid>http://www.bizeway.net/read.php?581</guid> 
<description>
<![CDATA[ 
	　　以“飞机场”来形容女性的身材，绝对是一种侮辱。今天美眉们就要站起来，齐齐健“胸”大行动，特地为你网罗了被公认的38种健胸大法，款款都行之有效。<br/><br/>　　基本常识：全球公认的标准美胸<br/><br/>　　据可靠调查数据表明，34B大小的胸部是全世界审美标准都能接受的完美胸部。当然，除了尺寸大小外，乳房的坚挺、饱满也是非常重要的。而保证胸部丰满程度的，除了女性自身脑下垂体及卵巢雌乙醇激素的分泌量外，游离性脂肪的数量也是决定胸部完美与否的重要内在因素，这就是为什么每当你减肥(减肥食品)时，无论真正成功与否，罩杯都会掉一号的原因。<br/><br/>　　(一)饮食法：蔬果牛奶鱼肉能丰乳<br/><br/>　　1、木瓜、鱼、肉及鲜奶等含丰富蛋白质(蛋白质食品)的食物，均可健胸。<br/><br/>　　2、黄豆、花生、杏仁、桃仁、芝麻及粟米等种籽和坚果类，是有效的健胸食品，不妨多吃。<br/><br/>　　3、橙、葡萄葡萄食品)、西柚及蕃茄等含维他命C的食物，可防止胸部变形。<br/><br/>　　4、芹菜、核桃及红腰豆等含维他命E的食物，有助胸部发育。<br/><br/>　　5、椰菜、椰菜花及葵花籽油(油食品)等含维他命A的食物，都有利激素的分泌。<br/><br/>　　6、牛肉、牛奶、豆类及猪肝等含维他命B的食物，亦有助激素的合成。<br/><br/>　　7、牛奶炖鸡──以嫩鸡加入牛奶同炖，能有丰胸(丰胸食品)的作用。<br/><br/>　　8、饮用一些含中药成分的靓汤，如紫河车炖乳鸽汤。材料包括有紫河车、当归、北旗、红枣及乳鸽等。紫河车是胎盘素，含丰富的激素及荷尔蒙;当归、红枣及北旗则补气血，而乳鸽则有强身健体的功效。<br/><br/>　　9、亦可饮用以黄精、当归、白术、云苓、鲤鱼及生姜等材料熬成的鲤鱼汤。因鲤鱼具有强身效用，而白术则能健脾，结合下来，又有健胸效果。<br/><br/>　　10、多喝参归猪心汤亦具有益气养血及健胸的疗效。<br/><br/>　　11、草药的疗效也不俗，如羊乳和奶参等，也具有健胸的食疗。这两种草药能强健脾胃，增强人体的吸收能力，有助胸部的发育。<br/><br/>　　12、也可饮用以下两款中药茶，包括归脾茶及养心茶。前者益气养血，后者补益心气、养心安神。酒酿蛋蜂皇浆具扩建力。<br/><br/>　　13、酒酿蛋──把酒酿、糖加进熟蛋中，于生理期间早晚服用一碗，可达美容(美容食品)和丰胸的效果。<br/><br/>　　14、蜂皇浆──连续服用数月，即能有一定的丰胸功效，因蜂皇浆有刺激荷尔蒙分泌的功用。<br/><br/>　　15、蹄筋、海参及猪脚等富含胶质的食物，能增加胸部发育。<br/><br/>　　16、多吃海产食品，如虾贝类等，其所含的锌是制造荷尔蒙的重要元素。<br/><br/>　　常识：不可错过的最佳美胸时间<br/><br/>　　从月经来的第11、12、13天，这三天为丰胸最佳时期，第18、19、20、21、22、23、24七天为次佳的时期，因为在这10天当中影响胸部丰满的卵巢动情激素是24小时等量分泌的，这也正是激发乳房脂肪囤积增厚的最佳时机。<br/><br/>　　(二)运动(运动食品)法：常举哑铃与游泳<br/><br/>　　17、举哑铃运动，可令胸部肌肉结实，持之以恒能有效达致扩胸的功效。<br/><br/>　　18、扩胸运动──两腿分开，双手握紧哑铃，上半身向前，而背部和颈部保持挺直。把哑铃上、下抬举到胸前，抬起时吸气，放下时呼气。<br/><br/>　　19、结实胸腹运动──颈和腰同时保持挺直，再把双手伸直后，集中力量在腹部，一边呼气一边将手向两旁伸张。<br/><br/>　　20、强化胸部运动──上半身向前，一只手握哑铃，另一手按于膝盖上以支撑身体;把哑铃举到胸前，然后垂下，左右手轮流做10次。<br/><br/>　　21、下斜推举──双手各举5磅哑铃，注意推上时要呼气，手肘关节则保持微曲，推至最高时保持约1秒;放下时手肘要保持90度角，可连续做12次左右。<br/><br/>　　22、胸前推举──以手臂的三头肌发力，初学时应举10磅左右的哑铃，并注意背部肌肉要锁紧。<br/><br/>　　23、器械运动──做这节机械扩胸运动时，要注意双手的开合动作要慢，不能拉得太开，伸张至180度便可，否则容易拉伤胸肌。<br/><br/>　　24、游泳──通过水压能对胸部起按摩的功效，对胸部发育有一定的帮助。<br/><br/>　　(三)姿势法：坐立起卧要正确<br/><br/>　　25、走路时──要保持背部挺直，并要收腹、提臂，将重心集中在上身。<br/><br/>　　26、坐下时──要挺胸抬头、伸直腰板，切勿佝偻着身子，一副没精打彩的样子。<br/><br/>　　27、休息时──宜以侧卧或仰卧的姿势睡觉，不宜俯卧，以免挤压着胸部。<br/><br/>　　(四)矫饰法：选购胸围有窍门<br/><br/>　　28、可在选购胸围时下工夫，在型号上选择小一些的款式，而并非小一个码。<br/><br/>　　29、如穿全杯型的，则可选穿3/4杯型的;若穿3/4杯的，那可能1/2杯更适合。<br/><br/>　　30、要选择有钢托及成型罩杯的胸围，因可把胸部托起，令外观看来较丰满。<br/><br/>　　31、亦可在胸围中加进活动胸垫。<br/><br/>　　32、避免穿戴运动型的胸围，因其质料较软，且没有加垫和钢托，会把本已“波平如镜”的胸脯，压得更平、更扁。<br/><br/>　　(五)保健(保健食品)法：甜食宜戒烟勿沾<br/><br/>　　33、多进食豆类食物，因豆类食物能减少女性荷尔蒙的分泌，能预防乳癌的发生。<br/><br/>　　34、日常生活中减少进食高脂肪食物，因高脂能引致肥胖，而肥胖亦是致癌的原因之一。<br/><br/>　　35、勿食过量甜食，因长期进食高糖类，会令血液中的胰岛素含量增高，而胰岛素正有助乳癌细胞的生长。<br/><br/>　　36、保持每天运动一小时以上，能有效减低患上乳癌的机会，这些运动包括步行和缓步跑等有氧运动。<br/><br/>　　(六)胡乱扩建会惹祸<br/><br/>　　37、健胸产品──据消费者委员会的调查报告指出，市面上有部分标榜着健胸的产品或食物，经动物测试后，发现含有“雌激素”。<br/><br/>　　如大量滥用雌激素，可能会抑制本身体内的雌激素分泌，结果或会弄巧反拙，妨碍了胸部的发育。<br/><br/>　　38、除开发现含有“雌激素”的产品之外。一般健胸食品均含有大豆、葛根类植物或胎盘素，而健胸膏则含草药或滋润成分，惟孕妇(孕妇食品)、哺乳中的妇女、儿童(儿童食品)和乳癌病患者在使用这类产品时要非常小心，应先咨询医生意见。<br/><br/>Tags - <a href="tag.php?tag=%E6%B3%A2%E9%9C%B8" rel="tag">波霸</a>
]]>
</description>
</item><item>
<link>http://www.bizeway.net/read.php?580</link>
<title><![CDATA[肖飞：mysql汉字16进制编码转换方法]]></title> 
<author>ArthurXF &lt;arthurxf@gmail.com&gt;</author>
<category><![CDATA[媒体报导]]></category>
<pubDate>Sun, 16 Jan 2011 12:08:16 +0000</pubDate> 
<guid>http://www.bizeway.net/read.php?580</guid> 
<description>
<![CDATA[ 
	今天在做一个系统GBK转UTF8的编码转换，竟然发现这个系统的sql文件里的汉字都被处理成了16进制编码了。<br/>而GBK，和UTF8的16进制编码不一致，导致根本无法在utf8下正常导入数据库。<br/><br/>现我肖飞为大家倾情奉献，解决办法如下：<br/>一、在utf8的mysql下<br/>得到中文‘游客’的gbk下的16进制编码<br/>mysql> SELECT hex(CONVERT( '游客' USING gbk ));<br/> &nbsp; &nbsp; &nbsp; -> D3CEBFCD<br/><br/>反推gbk的16进制编码，取回中文<br/>mysql> SELECT CONVERT( unhex('d3cebfcd') USING gbk);<br/> &nbsp; &nbsp; &nbsp; -> ’游客'<br/><br/>从gbk的16进制编码直接转成utf8的16进制编码<br/>mysql> SELECT HEX(CONVERT(CONVERT( unhex('d3cebfcd') USING gbk) USING utf8));<br/> &nbsp; &nbsp; &nbsp; -> 'E6B8B8E5AEA2'<br/><br/><br/>二、如果在gbk的mysql环境下<br/>得到中文‘游客’的gbk下的16进制编码<br/>mysql> SELECT hex('游客');<br/> &nbsp; &nbsp; &nbsp; -> D3CEBFCD<br/><br/>反推gbk的16进制编码，取回中文<br/>mysql> unhex('d3cebfcd') ;<br/> &nbsp; &nbsp; &nbsp; -> ’游客'<br/><br/>原理知道了，就可以写个小程序来替换进行转编码了。不过特别提醒在文本里16进制必须在头部加上0x，例如：0xD3CEBFCD才能正常使用。<br/><br/>Tags - <a href="tag.php?tag=mysql" rel="tag">mysql</a> , <a href="tag.php?tag=16%E8%BF%9B%E5%88%B6%E7%BC%96%E7%A0%81%E8%BD%AC%E6%8D%A2" rel="tag">16进制编码转换</a>
]]>
</description>
</item>
</channel>
</rss>
