<?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>&#22823;&#34430;&#30340;&#23398;&#20064;&#31354;&#38388; &#187; Albert</title>
	<atom:link href="http://blog.fabrichina.net/archives/author/admin/feed" rel="self" type="application/rss+xml" />
	<link>http://blog.fabrichina.net</link>
	<description>PHP SEO &#30005;&#23376;&#21830;&#21153;&#26550;&#26500;</description>
	<lastBuildDate>Mon, 06 Sep 2010 07:47:16 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>gearmand vs php的server&amp;client&amp;job安装，使用</title>
		<link>http://blog.fabrichina.net/archives/466</link>
		<comments>http://blog.fabrichina.net/archives/466#comments</comments>
		<pubDate>Mon, 06 Sep 2010 07:47:16 +0000</pubDate>
		<dc:creator>Albert</dc:creator>
				<category><![CDATA[PHP语言学习]]></category>

		<guid isPermaLink="false">http://blog.fabrichina.net/?p=466</guid>
		<description><![CDATA[wget http://launchpad.net/gearmand/trunk/0.9/+download/gearmand-0.9.tar.gz tar zxvf gearmand-0.9.tar.gz cd gearmand-0.9/ ./configure make make install /sbin/ldconfig cd ../ wget http://pecl.php.net/get/gearman-0.7.0.tgz tar zxvf gearman-0.7.0.tgz cd gearman-0.7.0 /usr/local/php/bin/phpize ./configure &#8211;with-php-config=/usr/local/php/bin/php-config &#8211;with-gearman make make install cd ../ configure php的时候出现这个 configure: WARNING: You will need re2c 0.13.4 or later if you want to regenerate PHP parsers. http://sourceforge.net/projects/re2c/files/ wget http://sourceforge.net/projects/re2c/files/re2c/0.13.5/re2c-0.13.5.tar.gz/download tar -zxvf re2c-0.13.5.tar.gz cd [...]]]></description>
			<content:encoded><![CDATA[<p>wget <a href="http://launchpad.net/gearmand/trunk/0.9/+download/gearmand-0.9.tar.gz" target="_blank">http://launchpad.net/gearmand/trunk/0.9/+download/gearmand-0.9.tar.gz</a><br />
tar zxvf gearmand-0.9.tar.gz<br />
cd gearmand-0.9/<br />
./configure<br />
make<br />
make install<br />
/sbin/ldconfig<br />
cd ../<br />
wget <a href="http://pecl.php.net/get/gearman-0.7.0.tgz">http://pecl.php.net/get/gearman-0.7.0.tgz</a><br />
tar zxvf gearman-0.7.0.tgz<br />
cd gearman-0.7.0<br />
/usr/local/php/bin/phpize<br />
./configure &#8211;with-php-config=/usr/local/php/bin/php-config &#8211;with-gearman<br />
make<br />
make install<br />
cd ../</p>
<p>configure php的时候出现这个<br />
configure: WARNING: You will need re2c 0.13.4 or later if you want to regenerate PHP parsers.<br />
<a href="http://sourceforge.net/projects/re2c/files/">http://sourceforge.net/projects/re2c/files/</a><br />
wget <a href="http://sourceforge.net/projects/re2c/files/re2c/0.13.5/re2c-0.13.5.tar.gz/download">http://sourceforge.net/projects/re2c/files/re2c/0.13.5/re2c-0.13.5.tar.gz/download</a><br />
tar -zxvf re2c-0.13.5.tar.gz<br />
cd re2c-0.13.5<br />
./configure &amp;&amp; make &amp;&amp; make install</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.fabrichina.net/archives/466/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>php array占用内存测试</title>
		<link>http://blog.fabrichina.net/archives/464</link>
		<comments>http://blog.fabrichina.net/archives/464#comments</comments>
		<pubDate>Fri, 03 Sep 2010 08:43:34 +0000</pubDate>
		<dc:creator>Albert</dc:creator>
				<category><![CDATA[PHP语言学习]]></category>

		<guid isPermaLink="false">http://blog.fabrichina.net/?p=464</guid>
		<description><![CDATA[&#60;?php function convert($size)  {     $unit=array(&#8216;b&#8217;,'kb&#8217;,'mb&#8217;,'gb&#8217;,'tb&#8217;,'pb&#8217;);     return @round($size/pow(1024,($i=floor(log($size,1024)))),2).&#8217; &#8216;.$unit[$i];  } $start=memory_get_usage(true); $test=array(); for($i=0;$i&#60;100000;$i++)         $test[md5($i)]=1; echo convert(memory_get_usage(true) &#8211; $start); 结果：17.25 mb 意思就是10万个32位的array key,占用内存17.25M]]></description>
			<content:encoded><![CDATA[<p>&lt;?php<br />
function convert($size)<br />
 {<br />
    $unit=array(&#8216;b&#8217;,'kb&#8217;,'mb&#8217;,'gb&#8217;,'tb&#8217;,'pb&#8217;);<br />
    return @round($size/pow(1024,($i=floor(log($size,1024)))),2).&#8217; &#8216;.$unit[$i];<br />
 }</p>
<p>$start=memory_get_usage(true);<br />
$test=array();<br />
for($i=0;$i&lt;100000;$i++)<br />
        $test[md5($i)]=1;<br />
echo convert(memory_get_usage(true) &#8211; $start);</p>
<p>结果：17.25 mb</p>
<p>意思就是10万个32位的array key,占用内存17.25M</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.fabrichina.net/archives/464/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>php利用syslog函数分布式将log集中到中央log服务器</title>
		<link>http://blog.fabrichina.net/archives/460</link>
		<comments>http://blog.fabrichina.net/archives/460#comments</comments>
		<pubDate>Thu, 02 Sep 2010 09:24:56 +0000</pubDate>
		<dc:creator>Albert</dc:creator>
				<category><![CDATA[PHP语言学习]]></category>

		<guid isPermaLink="false">http://blog.fabrichina.net/?p=460</guid>
		<description><![CDATA[使用php的syslog函数，调用本地的syslog服务，然后从本地syslog发送到中央syslog服务器进行分析整理，配置如下 首先我们先写一个php的测试文件 &#60;?php define_syslog_variables(); openlog(&#8220;TextLog&#8221;, LOG_PID, LOG_LOCAL0); $data = date(&#8220;Y/m/d H:i:s&#8221;); syslog(LOG_DEBUG,&#8221;Messagge: $data&#8221;); closelog(); ?&#62; 注意，我们用local0这个openlog所以在本地的syslog.conf中需配置local0具体配置如下 vi /etc/syslog.conf local0.*                @index-server 保存退出以后/etc/init.d/syslog restart index-server是中央服务器的hostname也可以是IP地址 然后我们配置中央服务器的syslog vi /etc/sysconfig/syslog 将SYSLOGD_OPTIONS=&#8221;-m 0&#8243;改成SYSLOGD_OPTIONS=&#8221;-m 0 -r&#8221;  存盘退出 vi /etc/syslog.conf local0.*                        /var/log/php.log #这里就是从各个机器打过来的log放在哪个文件里。。这个文件可能会比较大，建议对这个文件作每日存档 #还有local0.debug 可以打在/var/log/php_debug.log中类似这种。。。可以自由发挥。。 存盘退出以后/etc/init.d/syslog restart 在远端机执行t.php Sep  2 04:17:58 app01 TextLog[2408]: Messagge: 2010/09/02 04:17:56 你看。。app01的log已经写入index-server的php.log文件中了！是不是很简单，很好用？？至于t.php如何封装一下，优化一下。。这个也太简单了。。自己琢磨吧！]]></description>
			<content:encoded><![CDATA[<p>使用php的syslog函数，调用本地的syslog服务，然后从本地syslog发送到中央syslog服务器进行分析整理，配置如下</p>
<p>首先我们先写一个php的测试文件</p>
<p>&lt;?php<br />
define_syslog_variables();<br />
openlog(&#8220;TextLog&#8221;, LOG_PID, LOG_LOCAL0);</p>
<p>$data = date(&#8220;Y/m/d H:i:s&#8221;);<br />
syslog(LOG_DEBUG,&#8221;Messagge: $data&#8221;);</p>
<p>closelog();<br />
?&gt;<br />
注意，我们用local0这个openlog所以在本地的syslog.conf中需配置local0具体配置如下</p>
<p>vi /etc/syslog.conf<br />
local0.*                @index-server<br />
保存退出以后/etc/init.d/syslog restart</p>
<p>index-server是中央服务器的hostname也可以是IP地址</p>
<p>然后我们配置中央服务器的syslog<br />
vi /etc/sysconfig/syslog<br />
将SYSLOGD_OPTIONS=&#8221;-m 0&#8243;改成SYSLOGD_OPTIONS=&#8221;-m 0 -r&#8221; <br />
存盘退出<br />
vi /etc/syslog.conf<br />
local0.*                        /var/log/php.log<br />
#这里就是从各个机器打过来的log放在哪个文件里。。这个文件可能会比较大，建议对这个文件作每日存档<br />
#还有local0.debug 可以打在/var/log/php_debug.log中类似这种。。。可以自由发挥。。<br />
存盘退出以后/etc/init.d/syslog restart</p>
<p>在远端机执行t.php<br />
Sep  2 04:17:58 app01 TextLog[2408]: Messagge: 2010/09/02 04:17:56<br />
你看。。app01的log已经写入index-server的php.log文件中了！是不是很简单，很好用？？至于t.php如何封装一下，优化一下。。这个也太简单了。。自己琢磨吧！</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.fabrichina.net/archives/460/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>和php的getmypid相关的一些函数，挺有用的</title>
		<link>http://blog.fabrichina.net/archives/456</link>
		<comments>http://blog.fabrichina.net/archives/456#comments</comments>
		<pubDate>Wed, 01 Sep 2010 06:38:21 +0000</pubDate>
		<dc:creator>Albert</dc:creator>
				<category><![CDATA[PHP语言学习]]></category>

		<guid isPermaLink="false">http://blog.fabrichina.net/?p=456</guid>
		<description><![CDATA[&#60;?php /**  * Check for a current process by filename  * @param $file[optional] Filename  * @return Boolean  */ function processExists($file = false) {     $exists     = false;     $file       = $file ? $file : __FILE__;     // Check if file is in process list     exec(&#8220;ps -C $file -o pid=&#8221;, $pids);     [...]]]></description>
			<content:encoded><![CDATA[<p>&lt;?php</p>
<p>/**<br />
 * Check for a current process by filename<br />
 * @param $file[optional] Filename<br />
 * @return Boolean<br />
 */<br />
function processExists($file = false) {</p>
<p>    $exists     = false;<br />
    $file       = $file ? $file : __FILE__;</p>
<p>    // Check if file is in process list<br />
    exec(&#8220;ps -C $file -o pid=&#8221;, $pids);<br />
    if (count($pids) &gt; 1) {<br />
        $exists = true;<br />
    }<br />
    return $exists;<br />
}</p>
<p>?&gt;</p>
<p><code>&lt;?php<br />
/*</p>
<p>mixed getpidinfo(mixed pid [, string system_ps_command_options])</p>
<p>this function gets PID-info from system ps command and return it in useful assoc-array,<br />
or return false and trigger warning if PID doesn't exists</p>
<p>$pidifo=getpidinfo(12345);</p>
<p>print_r($pidifo);</p>
<p>Array<br />
(<br />
    [USER] =&gt; user<br />
    [PID] =&gt; 12345<br />
    [%CPU] =&gt; 0.0<br />
    [%MEM] =&gt; 0.0<br />
    [VSZ] =&gt; 1720<br />
    [RSS] =&gt; 8<br />
    [TT] =&gt; ??<br />
    [STAT] =&gt; Is<br />
    [STARTED] =&gt; 6:00PM<br />
    [TIME] =&gt; 0:00.01<br />
    [COMMAND] =&gt; php someproces.php &gt; logfile<br />
)</p>
<p>*/</p>
<p>//////////////////////////////////////////////</p>
<p>function getpidinfo($pid, $ps_opt="aux"){</p>
<p>   $ps=shell_exec("ps ".$ps_opt."p ".$pid);<br />
   $ps=explode("\n", $ps);<br />
  <br />
   if(count($ps)&lt;2){<br />
      trigger_error("PID ".$pid." doesn't exists", E_USER_WARNING);<br />
      return false;<br />
   }</p>
<p>   foreach($ps as $key=&gt;$val){<br />
      $ps[$key]=explode(" ", ereg_replace(" +", " ", trim($ps[$key])));<br />
   }</p>
<p>   foreach($ps[0] as $key=&gt;$val){<br />
      $pidinfo[$val] = $ps[1][$key];<br />
      unset($ps[1][$key]);<br />
   }<br />
  <br />
   if(is_array($ps[1])){<br />
      $pidinfo[$val].=" ".implode(" ", $ps[1]);<br />
   }<br />
   return $pidinfo;<br />
}</p>
<p>?&gt; </code></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.fabrichina.net/archives/456/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>solr vs 中文分词</title>
		<link>http://blog.fabrichina.net/archives/453</link>
		<comments>http://blog.fabrichina.net/archives/453#comments</comments>
		<pubDate>Tue, 31 Aug 2010 09:29:24 +0000</pubDate>
		<dc:creator>Albert</dc:creator>
				<category><![CDATA[PHP语言学习]]></category>

		<guid isPermaLink="false">http://blog.fabrichina.net/?p=453</guid>
		<description><![CDATA[solr本身内核是utf-8的，所以建立索引的时候中文可以正确进入索引，建立索引的时候用的中文分词器应该与读取索引时用的分词器一致]]></description>
			<content:encoded><![CDATA[<p>solr本身内核是utf-8的，所以建立索引的时候中文可以正确进入索引，建立索引的时候用的中文分词器应该与读取索引时用的分词器一致</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.fabrichina.net/archives/453/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>php solr jetty 安装测试</title>
		<link>http://blog.fabrichina.net/archives/447</link>
		<comments>http://blog.fabrichina.net/archives/447#comments</comments>
		<pubDate>Mon, 30 Aug 2010 09:33:54 +0000</pubDate>
		<dc:creator>Albert</dc:creator>
				<category><![CDATA[PHP语言学习]]></category>

		<guid isPermaLink="false">http://blog.fabrichina.net/?p=447</guid>
		<description><![CDATA[php中比较大的问题还是搜索问题，pecl开放了solr的包，应用起来应该比较靠谱 安装solr需要先有一个java webserver..我们选用jetty http://dist.codehaus.org/jetty/jetty-6.1.25/jetty-6.1.25.zip unzip jetty-6.1.25.zip java -jar start.jar etc/jetty.xml 把它起来。。 后来我发现自己弄jetty太累了，solr自己启动的时候自动就是jetty 的，自己装有病不是。。 java -Xms2048m -Xmx2048m -server -jar start.jar (在solr的example目录下） 分配内存一定是1024的倍数 完了以后，看http://host:8983/solr/admin/ 安装php solr的pecl phpize ./configure &#8211;with-php-config=.. &#38;&#38; make &#38;&#38; make install vi php.ini 加载上solr.so 打开phpinfo()看看 solr Solr Extension Version 0.9.11 Solr Extension Revision Id $Revision: 300493 $ Last Build Date Aug 30 2010 Last [...]]]></description>
			<content:encoded><![CDATA[<p>php中比较大的问题还是搜索问题，pecl开放了solr的包，应用起来应该比较靠谱</p>
<p>安装solr需要先有一个java webserver..我们选用jetty</p>
<p><a href="http://dist.codehaus.org/jetty/jetty-6.1.25/jetty-6.1.25.zip">http://dist.codehaus.org/jetty/jetty-6.1.25/jetty-6.1.25.zip</a></p>
<p>unzip jetty-6.1.25.zip</p>
<p>java -jar start.jar etc/jetty.xml</p>
<p>把它起来。。</p>
<p>后来我发现自己弄jetty太累了，solr自己启动的时候自动就是jetty 的，自己装有病不是。。</p>
<p>java -Xms2048m -Xmx2048m -server -jar start.jar (在solr的example目录下）</p>
<p>分配内存一定是1024的倍数</p>
<p>完了以后，看http://host:<a href="http://192.168.1.72:8983/solr/admin/">8983/solr/admin/</a></p>
<p>安装php solr的pecl</p>
<p>phpize</p>
<p>./configure &#8211;with-php-config=.. &amp;&amp; make &amp;&amp; make install</p>
<p>vi php.ini 加载上solr.so<br />
打开phpinfo()看看<br />
<a name="module_solr">solr</a></p>
<table border="0" cellpadding="3" width="600">
<tbody>
<tr>
<th>Solr Extension Version</th>
<th>0.9.11</th>
</tr>
<tr>
<td>Solr Extension Revision Id</td>
<td>$Revision: 300493 $</td>
</tr>
<tr>
<td>Last Build Date</td>
<td>Aug 30 2010</td>
</tr>
<tr>
<td>Last Build Time</td>
<td>17:11:02</td>
</tr>
<tr>
<td>SolrObject</td>
<td>enabled</td>
</tr>
<tr>
<td>SolrDocument</td>
<td>enabled</td>
</tr>
<tr>
<td>SolrDocumentField</td>
<td>enabled</td>
</tr>
<tr>
<td>SolrInputDocument</td>
<td>enabled</td>
</tr>
<tr>
<td>SolrClient</td>
<td>enabled</td>
</tr>
<tr>
<td>SolrParams</td>
<td>enabled</td>
</tr>
<tr>
<td>SolrQuery</td>
<td>enabled</td>
</tr>
<tr>
<td>SolrModifiableParams</td>
<td>enabled</td>
</tr>
<tr>
<td>SolrResponse</td>
<td>enabled</td>
</tr>
<tr>
<td>SolrQueryResponse</td>
<td>enabled</td>
</tr>
<tr>
<td>SolrUpdateResponse</td>
<td>enabled</td>
</tr>
<tr>
<td>SolrPingResponse</td>
<td>enabled</td>
</tr>
<tr>
<td>SolrGenericResponse</td>
<td>enabled</td>
</tr>
<tr>
<td>SolrUtils</td>
<td>enabled</td>
</tr>
<tr>
<td>SolrException</td>
<td>enabled</td>
</tr>
<tr>
<td>SolrIllegalOperationException</td>
<td>enabled</td>
</tr>
<tr>
<td>SolrIllegalArgumentException</td>
<td>enabled</td>
</tr>
<tr>
<td>SolrClientException</td>
<td>enabled</td>
</tr>
</tbody>
</table>
<p>搞定接下来，连连试试呗</p>
<p>&lt;?php</p>
<p>$options = array<br />
(<br />
    &#8216;hostname&#8217; =&gt; &#8216;localhost&#8217;,<br />
    &#8216;port&#8217;     =&gt; 8983,<br />
);</p>
<p>$client = new SolrClient($options);</p>
<p>$doc = new SolrInputDocument();</p>
<p>$doc-&gt;addField(&#8216;id&#8217;, 334455);<br />
$doc-&gt;addField(&#8216;cat&#8217;, &#8216;Software&#8217;);<br />
$doc-&gt;addField(&#8216;cat&#8217;, &#8216;Lucene&#8217;);</p>
<p>$updateResponse = $client-&gt;addDocument($doc);</p>
<p>print_r($updateResponse-&gt;getResponse());</p>
<p>执行后，返回</p>
<p>SolrObject Object<br />
(<br />
    [responseHeader] =&gt; SolrObject Object<br />
        (<br />
            [status] =&gt; 0<br />
            [QTime] =&gt; 62<br />
        )</p>
<p>)</p>
<p>恩，看来这东西。。又是白菜一样的简单了。。。一个指令启服务，安装个.so就能用了。。。性能测试了一下还是不错的。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.fabrichina.net/archives/447/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>nginx 关闭 Transfer-Encoding:chunked</title>
		<link>http://blog.fabrichina.net/archives/445</link>
		<comments>http://blog.fabrichina.net/archives/445#comments</comments>
		<pubDate>Sat, 28 Aug 2010 15:27:23 +0000</pubDate>
		<dc:creator>Albert</dc:creator>
				<category><![CDATA[PHP语言学习]]></category>

		<guid isPermaLink="false">http://blog.fabrichina.net/?p=445</guid>
		<description><![CDATA[发现怎么关也关不了，但是用http 1.0的请求还是可以 不过用了http 1.0去请求nginx往后发的时候用的也是1.0,导致后端服务器不返回cotent-length&#8230; 这个。。只好去改后端的服务了。。 最后我看，nginx对http1.1-&#62;http 1.0是不支持的，他只支持http1.1-&#62;http1.1 和http1.0-&#62;http1.0 而Transfer-Encoding:chunked是在http 1.1上包办出现的，想他不出现都不行。。。不过我就奇怪了，我的2台nginx-&#62;nginx的静态文件服务器，也是用的http1.1但是结果就是没有Transfer-Encoding:chunked而且content-length也出来了，真没搞明白为什么~~~从文件头上看，都完全一样，不知道为什么就是不行。。]]></description>
			<content:encoded><![CDATA[<p>发现怎么关也关不了，但是用http 1.0的请求还是可以</p>
<p>不过用了http 1.0去请求nginx往后发的时候用的也是1.0,导致后端服务器不返回cotent-length&#8230;</p>
<p>这个。。只好去改后端的服务了。。</p>
<p>最后我看，nginx对http1.1-&gt;http 1.0是不支持的，他只支持http1.1-&gt;http1.1 和http1.0-&gt;http1.0</p>
<p>而Transfer-Encoding:chunked是在http 1.1上包办出现的，想他不出现都不行。。。不过我就奇怪了，我的2台nginx-&gt;nginx的静态文件服务器，也是用的http1.1但是结果就是没有Transfer-Encoding:chunked而且content-length也出来了，真没搞明白为什么~~~从文件头上看，都完全一样，不知道为什么就是不行。。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.fabrichina.net/archives/445/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>pptpd 源代码安装</title>
		<link>http://blog.fabrichina.net/archives/440</link>
		<comments>http://blog.fabrichina.net/archives/440#comments</comments>
		<pubDate>Thu, 26 Aug 2010 08:20:55 +0000</pubDate>
		<dc:creator>Albert</dc:creator>
				<category><![CDATA[linux 服务器安装]]></category>

		<guid isPermaLink="false">http://blog.fabrichina.net/?p=440</guid>
		<description><![CDATA[wget http://www.sfr-fresh.com/linux/misc/pptpd-1.3.4.tar.gz tar .. ./configure &#38;&#38; make &#38;&#38; make install cp samples/pptpd.conf /etc/. cp samples/options.pptpd /etc/ppp/. cp samples/chap-secrets /etc/ppp/. cp pptpd.init /etc/rc.d/init.d/pptpd chmod +x /etc/rc.d/init.d/pptpd /etc/rc.d/init.d/pptpd start 编辑/etc/sysctl.conf，看一下net.ipv4.ip_forward参数是不是1。 改完一个sysctl -p一下 iptables -A INPUT -p tcp &#8211;dport 1723 -j ACCEPT iptables -A INPUT -p tcp &#8211;dport 47 -j ACCEPT iptables -A INPUT -p gre -j ACCEPT [...]]]></description>
			<content:encoded><![CDATA[<p>wget http://www.sfr-fresh.com/linux/misc/pptpd-1.3.4.tar.gz<br />
tar ..<br />
./configure &amp;&amp; make &amp;&amp; make install<br />
cp samples/pptpd.conf /etc/.<br />
cp samples/options.pptpd /etc/ppp/.<br />
cp samples/chap-secrets /etc/ppp/.<br />
cp pptpd.init /etc/rc.d/init.d/pptpd<br />
chmod +x /etc/rc.d/init.d/pptpd<br />
/etc/rc.d/init.d/pptpd start<br />
编辑/etc/sysctl.conf，看一下net.ipv4.ip_forward参数是不是1。<br />
改完一个sysctl -p一下</p>
<p><span style="text-decoration: underline;">iptables -A INPUT -p tcp &#8211;dport 1723 -j ACCEPT</span></p>
<p><span style="text-decoration: underline;">iptables -A INPUT -p tcp &#8211;dport 47 -j ACCEPT</span></p>
<p><span style="text-decoration: underline;">iptables -A INPUT -p gre -j ACCEPT</span></p>
<p><span style="text-decoration: underline;">iptables -t nat -A POSTROUTING -s 192.168.8.0/24 -o eth0 -j MASQUERADE</span></p>
<p>完成后输入<span style="text-decoration: underline;">/etc/init.d/iptables save</span>保存，并且输入<span style="text-decoration: underline;">/etc/init.d/iptables restart</span>重新启动。</p>
<p>我连接的时候出现了vpn 619错误，查了一下是路由器nat -t上pptp nat穿透选项的问题，但是我另外一个vpn是可以用的，所以我还需要研究一下为什么另外一个能用！</p>
<p>可能是服务器的机房路由器没有开启pptp的通过，我已经open ticket让他们开了，看看开了以后会不会就好了！</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.fabrichina.net/archives/440/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>一个简单高效的分词方法</title>
		<link>http://blog.fabrichina.net/archives/436</link>
		<comments>http://blog.fabrichina.net/archives/436#comments</comments>
		<pubDate>Wed, 25 Aug 2010 02:50:00 +0000</pubDate>
		<dc:creator>Albert</dc:creator>
				<category><![CDATA[PHP语言学习]]></category>

		<guid isPermaLink="false">http://blog.fabrichina.net/?p=436</guid>
		<description><![CDATA[$u=preg_split(&#8220;/[^0-9a-z-]/i&#8221;,strtolower($str)); foreach($u as $key=>$val) { if(strlen($val)$val) { if(strlen($val)]]></description>
			<content:encoded><![CDATA[<p>$u=preg_split(&#8220;/[^0-9a-z-]/i&#8221;,strtolower($str));<br />
  foreach($u as $key=>$val)<br />
  {<br />
    if(strlen($val)<2) unset($u[$key]);<br />
  }<br />
  return implode('-',$u);<br />
小于两个字符的，不算词。</p>
<p>$u=preg_split("/[^0-9a-z-]/i",strtolower($str));<br />
$b=array();<br />
  foreach($u as $key=>$val)<br />
  {<br />
    if(strlen($val)<2) unset($u[$key]);<br />
    else $b[$val]=1;<br />
        }<br />
$b=array_keys($b);<br />
sort($b);<br />
echo  implode(&#8216;_&#8217;,$b);<br />
echo &#8220;\r\n&#8221;.md5(implode(&#8216;_&#8217;,$b)).&#8221;\r\n&#8221;;<br />
这个呢。。是把重复的单词滤掉。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.fabrichina.net/archives/436/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>memcachedb 运用&#8217;db_archive&#8217;指令清除log</title>
		<link>http://blog.fabrichina.net/archives/434</link>
		<comments>http://blog.fabrichina.net/archives/434#comments</comments>
		<pubDate>Tue, 24 Aug 2010 08:33:17 +0000</pubDate>
		<dc:creator>Albert</dc:creator>
				<category><![CDATA[PHP语言学习]]></category>

		<guid isPermaLink="false">http://blog.fabrichina.net/?p=434</guid>
		<description><![CDATA[实际上memcachedb就有清除db的指令 telnet localhost 21201 db_archive 运行之前的 -rw-r&#8211;r&#8211; 1 www www 8192 Aug 24 03:10 data.db -rw-r&#8212;&#8211; 1 www www 10485760 Aug 24 02:10 log.0000000001 -rw-r&#8212;&#8211; 1 www www 10485760 Aug 24 03:10 log.0000000002 运行之后 -rw-r&#8211;r&#8211; 1 www www 8192 Aug 24 03:10 data.db -rw-r&#8212;&#8211; 1 www www 10485760 Aug 24 03:10 log.0000000002 说明还是生效的~~~]]></description>
			<content:encoded><![CDATA[<p>实际上memcachedb就有清除db的指令<br />
telnet localhost 21201<br />
db_archive<br />
运行之前的<br />
-rw-r&#8211;r&#8211; 1 www www     8192 Aug 24 03:10 data.db<br />
-rw-r&#8212;&#8211; 1 www www 10485760 Aug 24 02:10 log.0000000001<br />
-rw-r&#8212;&#8211; 1 www www 10485760 Aug 24 03:10 log.0000000002<br />
运行之后<br />
-rw-r&#8211;r&#8211; 1 www www     8192 Aug 24 03:10 data.db<br />
-rw-r&#8212;&#8211; 1 www www 10485760 Aug 24 03:10 log.0000000002</p>
<p>说明还是生效的~~~</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.fabrichina.net/archives/434/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>memcachedb 日志文件归档处理php脚本</title>
		<link>http://blog.fabrichina.net/archives/430</link>
		<comments>http://blog.fabrichina.net/archives/430#comments</comments>
		<pubDate>Tue, 24 Aug 2010 08:21:44 +0000</pubDate>
		<dc:creator>Albert</dc:creator>
				<category><![CDATA[PHP语言学习]]></category>

		<guid isPermaLink="false">http://blog.fabrichina.net/?p=430</guid>
		<description><![CDATA[memcachedb最大的问题就是数据库的归档log太大了！google code上有一个php的归档脚本，拿来用用。。 &#60;?php class Approach implements IApproach {     public function run($sPath) {         $nRemains = 10;         $aFiles = scandir($sPath, 1);         $aDestPaths = array();         $aDestFiles = array();         $i = 0;         if($aFiles) foreach($aFiles as $f) {             $p = $sPath . DIRECTORY_SEPARATOR . $f;             if(is_dir($p)                 &#124;&#124; strtolower(substr($f, 0, 4)) [...]]]></description>
			<content:encoded><![CDATA[<p>memcachedb最大的问题就是数据库的归档log太大了！google code上有一个php的归档脚本，拿来用用。。</p>
<pre lang=php>
&lt;?php
class Approach implements IApproach {
    public function run($sPath) {
        $nRemains = 10;
        $aFiles = scandir($sPath, 1);
        $aDestPaths = array();
        $aDestFiles = array();
        $i = 0;
        if($aFiles) foreach($aFiles as $f) {
            $p = $sPath . DIRECTORY_SEPARATOR . $f;
            if(is_dir($p)
                || strtolower(substr($f, 0, 4)) != "log."
                || strtolower(pathinfo($p, PATHINFO_EXTENSION)) == "gz") {
                continue;
            }

            if($i &lt; $nRemains) {
                $i++;
                continue;
            }

            $aDestPaths[] = $p;
            $aDestFiles[] = $f;
        }

        // pack
        if($aDestFiles) {
            $sDestFiles = implode(" ", $aDestFiles);
            $sArchivePath = $sPath . DIRECTORY_SEPARATOR . strftime("log.%Y%m%d%H%M%S.tar.gz");
            $sCommand = "tar -C $sPath -zcvf $sArchivePath $sDestFiles";
            system($sCommand, $tmp);
        }

        // remove
        if($aDestPaths) foreach($aDestPaths as $p) {
            unlink($p);
        }
    }

    public function getName() {
        return "MemcacheDB日志清理";
    }

    public function getDescription() {
        return "针对MemcacheDB的日志设计的清理及备份方案。";
    }
}
?&gt;
</pre>
]]></content:encoded>
			<wfw:commentRss>http://blog.fabrichina.net/archives/430/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>memcachedb 安装/测试 VS TokyoTyrant 性能差</title>
		<link>http://blog.fabrichina.net/archives/426</link>
		<comments>http://blog.fabrichina.net/archives/426#comments</comments>
		<pubDate>Tue, 24 Aug 2010 08:11:34 +0000</pubDate>
		<dc:creator>Albert</dc:creator>
				<category><![CDATA[PHP语言学习]]></category>

		<guid isPermaLink="false">http://blog.fabrichina.net/?p=426</guid>
		<description><![CDATA[svn checkout http://memcachedb.googlecode.com/svn/trunk/ memcachedb-read-only http://www.oracle.com/technetwork/database/berkeleydb/overview/index.html http://download.oracle.com/otn/berkeley-db/db-5.0.26.tar.gz tar -zxvf db-5.0.26.tar.tar cd db-5.0.26 cd build_unix/ ../dist/configure make &#38;&#38; make install cd ../../ cd memcachedb-read-only/ ./configure &#8211;enable-threads -with-bdb=/usr/local/BerkeleyDB.5.0/ make &#38;&#38; make install cd .. memcachedb -u -p 21201 -t 8 -d -r -H /data/memcachedb -N -v -E -X -m 512 -L 8MB -C 20 -T 60 &#62;/dev/null &#38; [...]]]></description>
			<content:encoded><![CDATA[<p>svn checkout <a href="http://memcachedb.googlecode.com/svn/trunk/">http://memcachedb.googlecode.com/svn/trunk/</a> memcachedb-read-only</p>
<p><a href="http://www.oracle.com/technetwork/database/berkeleydb/overview/index.html">http://www.oracle.com/technetwork/database/berkeleydb/overview/index.html</a><br />
<a href="http://download.oracle.com/otn/berkeley-db/db-5.0.26.tar.gz">http://download.oracle.com/otn/berkeley-db/db-5.0.26.tar.gz</a><br />
tar -zxvf db-5.0.26.tar.tar<br />
cd db-5.0.26<br />
cd build_unix/<br />
../dist/configure<br />
make &amp;&amp; make install<br />
cd ../../</p>
<p>cd memcachedb-read-only/<br />
./configure &#8211;enable-threads -with-bdb=/usr/local/BerkeleyDB.5.0/<br />
make &amp;&amp; make install<br />
cd ..<br />
memcachedb -u -p 21201 -t 8 -d -r -H /data/memcachedb -N -v -E -X -m 512 -L 8MB -C 20 -T 60 &gt;/dev/null &amp;<br />
&gt;/data/memcachedb/memcachedb.log 2&gt;&amp;1<br />
memcachedb -p21201 -d -r -H /data/memcachedb -N -R 127.0.0.1:31201 -M -n 2 -v &gt;/data/memcachedb/memcachedb.log 2&gt;&amp;1</p>
<p>用php测试memcachedb和tokyoDb，他们的差别</p>
<p>[root@Index-Server dataget]# /usr/local/php/bin/php tts.php<br />
Did nothing in 0.65564799308777 seconds<br />
value[root@Index-Server dataget]# /usr/local/php/bin/php mem.php<br />
Did nothing in 0.73450708389282 seconds<br />
test[root@Index-Server dataget]# /usr/local/php/bin/php tts.php<br />
Did nothing in 0.85011577606201 seconds<br />
value[root@Index-Server dataget]# /usr/local/php/bin/php tts.php<br />
Did nothing in 0.92772603034973 seconds<br />
value[root@Index-Server dataget]# /usr/local/php/bin/php tts.php<br />
Did nothing in 0.99560403823853 seconds<br />
value[root@Index-Server dataget]# /usr/local/php/bin/php tts.php<br />
Did nothing in 1.0420861244202 seconds<br />
value[root@Index-Server dataget]# /usr/local/php/bin/php tts.php<br />
Did nothing in 0.89272093772888 seconds<br />
value[root@Index-Server dataget]# /usr/local/php/bin/php tts.php<br />
Did nothing in 1.04558801651 seconds<br />
value[root@Index-Server dataget]# /usr/local/php/bin/php tts.php<br />
Did nothing in 0.81222891807556 seconds<br />
value[root@Index-Server dataget]# /usr/local/php/bin/php mem.php<br />
Did nothing in 0.68305706977844 seconds<br />
test[root@Index-Server dataget]# /usr/local/php/bin/php mem.php<br />
Did nothing in 0.68526387214661 seconds<br />
test[root@Index-Server dataget]# /usr/local/php/bin/php mem.php<br />
Did nothing in 0.69543099403381 seconds<br />
test[root@Index-Server dataget]# /usr/local/php/bin/php mem.php<br />
Did nothing in 0.67856597900391 seconds<br />
test[root@Index-Server dataget]# /usr/local/php/bin/php mem.php<br />
Did nothing in 0.67917394638062 seconds<br />
test[root@Index-Server dataget]# /usr/local/php/bin/php mem.php<br />
Did nothing in 0.682452917099 seconds<br />
test[root@Index-Server dataget]#</p>
<p>可以看出tokyoDb的性能不是太稳定，memcachedb还是要稳定很多的。速度上也是memcachedb来的更快。</p>
<p>TokyoTyrant 我用的是tbh 优化了xmsize应该是他比较优化的性能了，和memcachedb还是有一些差距的。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.fabrichina.net/archives/426/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>mysql 添加用户 一组IP 一组表</title>
		<link>http://blog.fabrichina.net/archives/424</link>
		<comments>http://blog.fabrichina.net/archives/424#comments</comments>
		<pubDate>Mon, 23 Aug 2010 15:02:28 +0000</pubDate>
		<dc:creator>Albert</dc:creator>
				<category><![CDATA[PHP语言学习]]></category>

		<guid isPermaLink="false">http://blog.fabrichina.net/?p=424</guid>
		<description><![CDATA[通配符就是%设置表和IP都可以使用% 比如 192.168.1.% 就是 192.168.1.* 比如XX% 就是所有xx开头的表的权限。 TestTab 192.168.1.% 是 USAGE 否 数据库 权限 授权 按表指定权限 操作 TestTab% SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, REFERENCES, INDEX, ALTER, CREATE TEMPORARY TABLES, CREATE VIEW, EVENT, TRIGGER, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, EXECUTE 否 否]]></description>
			<content:encoded><![CDATA[<p>通配符就是%设置表和IP都可以使用%</p>
<p>比如 192.168.1.% 就是 192.168.1.*</p>
<p>比如XX% 就是所有xx开头的表的权限。</p>
<table id="tableuserrights">
<tbody>
<tr>
<td><label for="checkbox_sel_users_5">TestTab</label></td>
<td>192.168.1.%</td>
<td>是</td>
<td><tt><dfn title="无权限。">USAGE</dfn> </tt></td>
<td>否</td>
<td align="center"><a href="http://phpmyadmin.factory.dhgate.com/server_privileges.php?server=2&amp;token=a7f51a089394b6d808820f2ac1eaeef7&amp;username=HGGJ&amp;hostname=192.168.1.%25&amp;dbname=&amp;tablename="><img title="编辑权限" src="http://phpmyadmin.factory.dhgate.com/themes/original/img/b_usredit.png" alt="编辑权限" width="16" height="16" /></a></td>
</tr>
</tbody>
</table>
<table>
<thead>
<tr>
<th>数据库</th>
<th>权限</th>
<th>授权</th>
<th>按表指定权限</th>
<th colspan="2">操作</th>
</tr>
</thead>
<tbody>
<tr>
<td>TestTab%</td>
<td><tt><dfn title="允许读取数据。">SELECT</dfn>, <dfn title="允许插入和替换数据。">INSERT</dfn>, <dfn title="允许修改数据。">UPDATE</dfn>, <dfn title="允许删除数据。">DELETE</dfn>, <dfn title="允许创建新数据库和数据表。">CREATE</dfn>, <dfn title="允许删除数据库和数据表。">DROP</dfn>, <dfn title="在此版本的 MySQL 中无效。">REFERENCES</dfn>, <dfn title="允许创建和删除索引。">INDEX</dfn>, <dfn title="允许修改现有数据表的结构。">ALTER</dfn>, <dfn title="允许创建临时表。">CREATE TEMPORARY TABLES</dfn>, <dfn title="允许创建视图。">CREATE VIEW</dfn>, <dfn title="允许为事件触发器设置事件">EVENT</dfn>, <dfn title="允许创建和删除触发器">TRIGGER</dfn>, <dfn title="允许执行 SHOW CREATE VIEW 查询。">SHOW VIEW</dfn>, <dfn title="允许创建存储过程。">CREATE ROUTINE</dfn>, <dfn title="允许修改或删除储存过程。">ALTER ROUTINE</dfn>, <dfn title="允许运行存储过程。">EXECUTE</dfn> </tt></td>
<td>否</td>
<td>否</td>
<td><a href="http://phpmyadmin.factory.dhgate.com/server_privileges.php?server=2&amp;token=a7f51a089394b6d808820f2ac1eaeef7&amp;username=HGGJ&amp;hostname=192.168.1.%25&amp;dbname=HGGJ%25&amp;tablename="><img title="编辑权限" src="http://phpmyadmin.factory.dhgate.com/themes/original/img/b_usredit.png" alt="编辑权限" width="16" height="16" /></a></td>
</tr>
</tbody>
</table>
]]></content:encoded>
			<wfw:commentRss>http://blog.fabrichina.net/archives/424/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ssh 信任关系（无密码）</title>
		<link>http://blog.fabrichina.net/archives/420</link>
		<comments>http://blog.fabrichina.net/archives/420#comments</comments>
		<pubDate>Mon, 23 Aug 2010 05:38:37 +0000</pubDate>
		<dc:creator>Albert</dc:creator>
				<category><![CDATA[PHP语言学习]]></category>

		<guid isPermaLink="false">http://blog.fabrichina.net/?p=420</guid>
		<description><![CDATA[:::::::::::::: ssh.sh :::::::::::::: #!/bin/bash #for 249 login others with no passwd #by shao for i in $@ do if [ ! -f /home/www/.ssh/id_dsa.pub ];then     ssh-keygen -t dsa fi scp /home/www/.ssh/id_dsa.pub www@$i:/tmp/ echo &#8220;copied&#8221; ssh -l www www@$i &#8221; [ -e /home/www/.ssh ] &#124;&#124; mkdir /home/www/.ssh&#8221; ssh -l www www@$i &#8220;cat /tmp/id_dsa.pub &#62;&#62; /home/www/.ssh/authorized_keys&#8221; echo [...]]]></description>
			<content:encoded><![CDATA[<p>::::::::::::::<br />
ssh.sh<br />
::::::::::::::<br />
#!/bin/bash<br />
#for 249 login others with no passwd<br />
#by shao<br />
for i in $@</p>
<p>do</p>
<p>if [ ! -f /home/www/.ssh/id_dsa.pub ];then<br />
    ssh-keygen -t dsa<br />
fi</p>
<p>scp /home/www/.ssh/id_dsa.pub <a href="mailto:www@$i:/tmp/">www@$i:/tmp/</a><br />
echo &#8220;copied&#8221;<br />
ssh -l www <a href="mailto:www@$i">www@$i</a> &#8221; [ -e /home/www/.ssh ] || mkdir /home/www/.ssh&#8221;<br />
ssh -l www <a href="mailto:www@$i">www@$i</a> &#8220;cat /tmp/id_dsa.pub &gt;&gt; /home/www/.ssh/authorized_keys&#8221;<br />
echo &#8220;attaphed&#8221;<br />
echo &#8220;$i is done!&#8221;<br />
ssh -l www <a href="mailto:www@$i">www@$i</a> &#8220;rm -f  /tmp/id_dsa.pub&#8221;<br />
done</p>
<p>用户目录权限为 755 或者 700，就是不能是77x<br />
.ssh目录权限必须为755<br />
rsa_id.pub 及authorized_keys权限必须为644或600<br />
rsa_id权限必须为600</p>
<p>rsa_id.pub 在生成 authorized_keys后即可以删除。<br />
rsa_id为私钥，也应该从服务器上删除</p>
<p>如果还不对的话 ssh -v <a href="mailto:user@host">user@host</a> 看一下</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.fabrichina.net/archives/420/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>mysql-proxy 配置</title>
		<link>http://blog.fabrichina.net/archives/409</link>
		<comments>http://blog.fabrichina.net/archives/409#comments</comments>
		<pubDate>Fri, 20 Aug 2010 10:39:32 +0000</pubDate>
		<dc:creator>Albert</dc:creator>
				<category><![CDATA[PHP语言学习]]></category>

		<guid isPermaLink="false">http://blog.fabrichina.net/?p=409</guid>
		<description><![CDATA[./mysql-proxy: error while loading shared libraries: libmysql-chassis.so.0: cannot open shared object file: No such file or directory  cd /usr/lib cp /usr/local/mysql-proxy/lib/libmysql-* . ln -s了一堆so以后 ** ERROR **: GLib version too old (micro mismatch), got: lib=2.12.3, headers=2.16.6 这个可真是头疼了！ wget http://ftp.gnome.org/pub/gnome/sources/glib/2.18/glib-2.18.4.tar.gz tar zvfx glib-2.18.4.tar.gz cd glib-2.18.4 ./configure &#8211;prefix=/usr &#8211;libdir=/usr/lib make make install ./configure &#8211;prefix=/usr &#8211;libdir=/usr/lib 很重要，否则没用！我白编译了一遍~~ 然后记得在/etc/ld.so.conf中加上/usr/local/lib [...]]]></description>
			<content:encoded><![CDATA[<p>./mysql-proxy: error while loading shared libraries: libmysql-chassis.so.0: cannot open shared object file: No such file or directory</p>
<p> cd /usr/lib</p>
<p>cp /usr/local/mysql-proxy/lib/libmysql-* .</p>
<p>ln -s了一堆so以后</p>
<p>** ERROR **: GLib version too old (micro mismatch), got: lib=2.12.3, headers=2.16.6</p>
<p>这个可真是头疼了！</p>
<p>wget <a href="http://ftp.gnome.org/pub/gnome/sources/glib/2.18/glib-2.18.4.tar.gz">http://ftp.gnome.org/pub/gnome/sources/glib/2.18/glib-2.18.4.tar.gz</a><br />
tar zvfx glib-2.18.4.tar.gz<br />
cd glib-2.18.4<br />
./configure &#8211;prefix=/usr &#8211;libdir=/usr/lib<br />
make<br />
make install</p>
<p>./configure &#8211;prefix=/usr &#8211;libdir=/usr/lib 很重要，否则没用！我白编译了一遍~~</p>
<p>然后记得在/etc/ld.so.conf中加上/usr/local/lib 然后ldconfig，这才终于算是可以用到新版本的glib了！</p>
<p>./mysql-proxy &#8211;daemon &#8211;keepalive &#8211;basedir=/usr/local/mysql-proxy/ &#8211;proxy-address=192.168.1.180:3306 &#8211;proxy-backend-addresses=db01:3306 &#8211;proxy-read-only-backend-addresses=db02:3306 &#8211;proxy-lua-script=lib/mysql-proxy/lua/proxy/ &#8211;log-file=/var/log/mysql-proxy.log &#8211;log-level=debug</p>
<p>启动了这个以后去看log</p>
<p>010-08-20 08:31:00: (message) proxy listening on port 192.168.1.180:3306<br />
2010-08-20 08:31:00: (message) added read/write backend: db01:3306<br />
2010-08-20 08:31:00: (message) added read-only backend: db02:3306<br />
2010-08-20 08:31:22: (debug) abs wait-for-event::done            usec=       0<br />
2010-08-20 08:31:22: (debug) abs lua-exec::done                  usec=       0</p>
<p>这就是成功了！o ye ~~</p>
<p>不过我现在用的是blance </p>
<p>=/usr/local/share/mysql-proxy/rw-splitting.lua 用这个的话是读写分离的lua不过我吧debug打开以后发现他还会将大量的读打到我设置的主写服务器，估计是什么地方弄错了？？<br />
/usr/local/mysql-proxy/libexec/mysql-proxy &#8211;daemon &#8211;keepalive &#8211;basedir=/usr/local/mysql-proxy/ &#8211;proxy-address=192.168.1.180:3306 &#8211;proxy-backend-addresses=db01:3306 &#8211;proxy-read-only-backend-addresses=db02:3306 &#8211;proxy-lua-script=share/doc/mysql-proxy/rw-splitting.lua &#8211;log-file=/var/log/mysql-proxy.log &#8211;log-level=debug</p>
<p>测试了一下中文，直接连库没问题，通过mysql-proxy就会悲剧。。。</p>
<div id="_mcePaste">default-character-set = utf8<br />
skip-character-set-client-handshake<br />
character-set-server = utf8<br />
collation-server = utf8_general_ci<br />
#init-connect = SET NAMES utf8</div>
<div>把这个加到2台服务器的my.conf中再试试吧。。</div>
<div>不过我也是觉得最后这句有点问题，每个connect都发一个set name实在不怎么样，好在我去了以后也没问题，索性我就去了最后一行，效率应该能好些！</div>
]]></content:encoded>
			<wfw:commentRss>http://blog.fabrichina.net/archives/409/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>mysql my.cnf 含义</title>
		<link>http://blog.fabrichina.net/archives/406</link>
		<comments>http://blog.fabrichina.net/archives/406#comments</comments>
		<pubDate>Fri, 20 Aug 2010 10:01:45 +0000</pubDate>
		<dc:creator>Albert</dc:creator>
				<category><![CDATA[PHP语言学习]]></category>

		<guid isPermaLink="false">http://blog.fabrichina.net/?p=406</guid>
		<description><![CDATA[MySQL資料庫5.0的my.cnf配置選項概述: mysqld程序–目錄和文件 basedir = path 使用給定目錄作為根目錄(安裝目錄)。 character-sets-dir = path 給出存放著字符集的目錄。 datadir = path 從給定目錄讀取資料庫文件。 pid-file = filename 為mysqld程序指定一個存放進程ID的文件(僅適用於UNIX/Linux系統) Init-V腳本需要使用這個文件裡的進程ID結束mysqld進程。 socket = filename 為MySQL客戶程序與服務器之間的本地通信指定一個套接字文件 (僅適用於UNIX/Linux系統; 默認設置一般是/var/lib/mysql/mysql.sock文件)。 在Windows環境下，如果MySQL客戶與服務器是通過命名管道進行通信的，–sock選項給出的將是該命名管道的名字(默認設置是MySQL)。 lower_case_table_name = 1/0 新目錄和資料表的名字是否只允許使用小寫字母; 這個選項在Windows環境下的默認設置是1(只允許使用小寫字母)。 mysqld程序–語言設置 character-sets-server = name 新資料庫或資料表的默認字符集。為了與MySQL的早期版本保持兼容，這個字符集也可以用–default-character-set選項給出; 但這個選項已經顯得有點過時了。 collation-server = name 新資料庫或資料表的默認排序方式。 lanuage = name 用指定的語言顯示出錯信息。 mysqld程序–通信、網絡、信息安全 enable-named-pipes 允許Windows 2000/XP環境下的客戶和服務器使用命名管道(named pipe)進行通信。這個命名管道的默認名字是MySQL，但可以用–socket選項來改變。 local-infile [=0] 允許/禁止使用LOAD DATA LOCAL語句來處理本地文件。 [...]]]></description>
			<content:encoded><![CDATA[<p>MySQL資料庫5.0的my.cnf配置選項概述:<br />
<strong></strong></p>
<p><strong>mysqld程序–目錄和文件</strong><br />
<strong>basedir</strong> = path 使用給定目錄作為根目錄(安裝目錄)。<br />
<strong>character-sets-dir</strong> = path 給出存放著字符集的目錄。<br />
<strong>datadir</strong> = path 從給定目錄讀取資料庫文件。<br />
<strong>pid-file</strong> = filename 為mysqld程序指定一個存放進程ID的文件(僅適用於UNIX/Linux系統)<br />
Init-V腳本需要使用這個文件裡的進程ID結束mysqld進程。<br />
<strong>socket</strong> = filename 為MySQL客戶程序與服務器之間的本地通信指定一個套接字文件<br />
(僅適用於UNIX/Linux系統; 默認設置一般是/var/lib/mysql/mysql.sock文件)。<br />
在Windows環境下，如果MySQL客戶與服務器是通過命名管道進行通信的，–sock選項給出的將是該命名管道的名字(默認設置是MySQL)。<br />
<strong>l</strong><strong>ower_case_table_name</strong> = 1/0 新目錄和資料表的名字是否只允許使用小寫字母; 這個選項在Windows環境下的默認設置是1(只允許使用小寫字母)。<br />
<strong></strong></p>
<p><strong>mysqld程序–語言設置</strong><br />
<strong>character-sets-server</strong> = name 新資料庫或資料表的默認字符集。為了與MySQL的早期版本保持兼容，這個字符集也可以用–default-character-set選項給出; 但這個選項已經顯得有點過時了。<br />
<strong>collation-server</strong> = name 新資料庫或資料表的默認排序方式。<br />
<strong>lanuage</strong> = name 用指定的語言顯示出錯信息。<br />
<strong></strong></p>
<p><strong>mysqld程序–通信、網絡、信息安全</strong><br />
<strong>enable-named-pipes</strong> 允許Windows 2000/XP環境下的客戶和服務器使用命名管道(named pipe)進行通信。這個命名管道的默認名字是MySQL，但可以用–socket選項來改變。<br />
<strong>local-infile</strong> [=0] 允許/禁止使用LOAD DATA LOCAL語句來處理本地文件。<br />
<strong>myisam-recover</strong> [=opt1, opt2, ...] 在啟動時自動修復所有受損的MyISAM資料表。這個選項的可取值有4種EFAULT、BACKUP、QUICK和FORCE; 它們與myisamchk程序的同名選項作用相同。<br />
<strong>old-passwords</strong> 使用MySQL 3.23和4.0版本中的老算法來加密mysql資料庫裡的密碼(默認使用MySQL 4.1版本開始引入的新加密算法)。<br />
<strong>port</strong> = n 為MySQL程序指定一個TCP/IP通信端口(通常是3306端口)。<br />
<strong>safe-user-create</strong> 只有在mysql.user資料庫表上擁有INSERT權限的用戶才能使用GRANT命令; 這是一種雙保險機制(此用戶還必須具備GRANT權限才能執行GRANT命令)。<br />
<strong>shared-memory</strong> 允許使用記憶體(shared memory)進行通信(僅適用於Windows)。<br />
<strong>shared-memory-base-name</strong> = name 給共享記憶體塊起一個名字(默認的名字是MySQL)。<br />
<strong>skip-grant-tables</strong> 不使用mysql資料庫裡的信息來進行訪問控制(警告:這將允許用戶任何用戶去修改任何資料庫)。<br />
<strong>skip-host-cache</strong> 不使用高速緩存區來存放主機名和IP地址的對應關係。<br />
<strong>skip-name-resovle</strong> 不把IP地址解析為主機名; 與訪問控制(mysql.user資料表)有關的檢查全部通過IP地址行進。<br />
<strong>skip-networking</strong> 只允許通過一個套接字文件(Unix/Linux系統)或通過命名管道(Windows系統)進行本地連接，不允許ICP/IP連接; 這提高了安全性，但阻斷了來自網絡的外部連接和所有的Java客戶程序(Java客戶即使在本地連接裡也使用TCP/IP)。<br />
<strong>user</strong> = name mysqld程序在啟動後將在給定UNIX/Linux賬戶下執行; mysqld必須從root賬戶啟動才能在啟動後切換到另一個賬戶下執行; mysqld_safe腳本將默認使用–user=mysql選項來啟動mysqld程序。<br />
<strong></strong></p>
<p><strong>mysqld程序–記憶體管理、優化、查詢緩存區</strong><br />
<strong>bulk_insert_buffer_size</strong> = n 為一次插入多條新記錄的INSERT命令分配的緩存區長度(默認設置是8M)。<br />
<strong>key_buffer_size</strong> = n 用來存放索引區塊的RMA值(默認設置是8M)。<br />
<strong>join_buffer_size</strong> = n 在參加JOIN操作的數據列沒有索引時為JOIN操作分配的緩存區長度(默認設置是128K)。<br />
<strong>max_heap_table_size</strong> = n HEAP資料表的最大長度(默認設置是16M); 超過這個長度的HEAP資料表將被存入一個臨時文件而不是駐留在記憶體裡。<br />
<strong>max_connections</strong> = n MySQL服務器同時處理的資料庫連接的最大數量(默認設置是100)。<br />
<strong>query_cache_limit</strong> = n 允許臨時存放在查詢緩存區裡的查詢結果的最大長度(默認設置是1M)。<br />
<strong>query_cache_size</strong> = n 查詢緩存區的最大長度(默認設置是0，不開闢查詢緩存區)。<br />
<strong>query_cache_type</strong> = 0/1/2 查詢緩存區的工作模式:0, 禁用查詢緩存區; 1，啟用查詢緩存區(默認設置); 2，’按需分配’模式，只響應SELECT SQL_CACHE命令。<br />
<strong>read_buffer_size</strong> = n 為從資料表順序讀取數據的讀操作保留的緩存區的長度(默認設置是128KB); 這個選項的設置值在必要時可以用SQL命令SET SESSION read_buffer_size = n命令加以改變。<br />
<strong>read_rnd_buffer_size</strong> = n 類似於read_buffer_size選項，但針對的是按某種特定順序(比如使用了ORDER BY子句的查詢)輸出的查詢結果(默認設置是256K)。<br />
<strong>sore_buffer</strong> = n 為排序操作分配的緩存區的長度(默認設置是2M); 如果這個緩存區太小，則必須創建一個臨時文件來進行排序。<br />
<strong>table_cache</strong> = n 同時打開的資料表的數量(默認設置是64)。<br />
<strong>tmp_table_size</strong> = n 臨時HEAP資料表的最大長度(默認設置是32M); 超過這個長度的臨時資料表將被轉換為MyISAM資料表並存入一個臨時文件。<br />
<strong></strong></p>
<p><strong>mysqld程序–日誌</strong><br />
<strong>log</strong> [= file] 把所有的連接以及所有的SQL命令記入日誌(通用查詢日誌); 如果沒有給出file參數，MySQL將在資料庫目錄裡創建一個hostname.log文件作為這種日誌文件(hostname是服務器的主機名)。<br />
<strong>log-slow-queries</strong> [= file] 把執行用時超過long_query_time變量值的查詢命令記入日誌(慢查詢日誌); 如果沒有給出file參數，MySQL將在資料庫目錄裡創建一個hostname-slow.log文件作為這種日誌文件(hostname是服務器主機 名)。<br />
<strong>long_query_time</strong> = n 慢查詢的執行用時上限(默認設置是10s)。<br />
<strong>long_queries_not_using_indexs</strong> 把慢查詢以及執行時沒有使用索引的查詢命令全都記入日誌(其餘同–log-slow-queries選項)。<br />
<strong>log-bin</strong> [= filename] 把對數據進行修改的所有SQL命令(也就是INSERT、UPDATE和DELETE命令)以二進制格式記入日誌(二進制變更日誌，binary update log)。這種日誌的文件名是filename.n或默認的hostname.n，其中n是一個6位數字的整數(日誌文件按順序編號)。<br />
<strong>log-bin-index</strong> = filename 二進制日誌功能的索引文件名。在默認情況下，這個索引文件與二進制日誌文件的名字相同，但後綴名是.index而不是.nnnnnn。<br />
<strong>max_binlog_size</strong> = n 二進制日誌文件的最大長度(默認設置是1GB)。在前一個二進制日誌文件裡的信息量超過這個最大長度之前，MySQL服務器會自動提供一個新的二進制日誌文件接續上。<br />
<strong>binlog-do-db</strong> = dbname 只把給定資料庫裡的變化情況記入二進制日誌文件，其他資料庫裡的變化情況不記載。如果需要記載多個資料庫裡的變化情況，就必須在配置文件使用多個本選項來設置，每個資料庫一行。<br />
<strong>binlog-ignore-db</strong> = dbname 不把給定資料庫裡的變化情況記入二進制日誌文件。<br />
<strong>sync_binlog</strong> = n 每經過n次日誌寫操作就把日誌文件寫入硬盤一次(對日誌信息進行一次同步)。n=1是最安全的做法，但效率最低。默認設置是n=0，意思是由操作系統來負責二進制日誌文件的同步工作。<br />
<strong>log-update</strong> [= file] 記載出錯情況的日誌文件名(出錯日誌)。這種日誌功能無法禁用。如果沒有給出file參數，MySQL會使用hostname.err作為種日誌文件的名字。<br />
<strong></strong></p>
<p><strong>mysqld程序–鏡像(主控鏡像服務器)</strong><br />
<strong>server-id</strong> = n 給服務器分配一個獨一無二的ID編號; n的取值範圍是1~2的32次方啟用二進制日誌功能。<br />
<strong>log-bin</strong> = name 啟用二進制日誌功能。這種日誌的文件名是filename.n或默認的hostname.n，其中的n是一個6位數字的整數(日誌文件順序編號)。<br />
<strong>binlog-do/ignore-db</strong> = dbname 只把給定資料庫裡的變化情況記入二進制日誌文件/不把給定的資料庫裡的變化記入二進制日誌文件。<br />
<strong></strong></p>
<p><strong>mysqld程序–鏡像(從屬鏡像服務器)</strong><br />
<strong>server-id</strong> = n 給服務器分配一個唯一的ID編號<br />
<strong>log-slave-updates</strong> 啟用從屬服務器上的日誌功能，使這台計算機可以用來構成一個鏡像鏈(A-&gt;B-&gt;C)。<br />
<strong>master-host</strong> = hostname 主控服務器的主機名或IP地址。如果從屬服務器上存在mater.info文件(鏡像關係定義文件)，它將忽略此選項。<br />
<strong>master-user</strong> = replicusername 從屬服務器用來連接主控服務器的用戶名。如果從屬服務器上存在mater.info文件，它將忽略此選項。<br />
<strong>master-password</strong> = passwd 從屬服務器用來連接主控服務器的密碼。如果從屬服務器上存在mater.info文件，它將忽略此選項。<br />
<strong>master-port</strong> = n 從屬服務器用來連接主控服務器的TCP/IP端口(默認設置是3306端口)。<br />
<strong>master-connect-retry</strong> = n 如果與主控服務器的連接沒有成功，則等待n秒(s)後再進行管理方式(默認設置是60s)。如果從屬服務器存在mater.info文件，<br />
它將忽略此選項。<br />
<strong>master-ssl-xxx</strong> = xxx 對主、從服務器之間的SSL通信進行配置。<br />
<strong>read-only</strong> = 0/1 0: 允許從屬服務器獨立地執行SQL命令(默認設置); 1: 從屬服務器只能執行來自主控服務器的SQL命令。<br />
<strong>read-log-purge</strong> = 0/1 1: 把處理完的SQL命令立刻從中繼日誌文件裡刪除(默認設置); 0: 不把處理完的SQL命令立刻從中繼日誌文件裡刪除。<br />
<strong>replicate-do-table</strong> = dbname.tablename 與–replicate-do-table選項的含義和用法相同，但資料庫和資料表名字裡允許出現通配符’%’</p>
<p>(例如: test%.%–對名字以’test’開頭的所有資料庫裡的所以資料庫表進行鏡像處理)。<br />
<strong>replicate-do-db</strong> = name 只對這個資料庫進行鏡像處理。</p>
<p><strong>replicate-ignore-table</strong> = dbname.tablename 不對這個資料表進行鏡像處理。<br />
<strong>replicate-wild-ignore-table</strong> = dbn.tablen 不對這些資料表進行鏡像處理。<br />
<strong>replicate-ignore-db</strong> = dbname 不對這個資料庫進行鏡像處理。<br />
<strong>replicate-rewrite-db</strong> = db1name &gt; db2name 把主控資料庫上的db1name資料庫鏡像處理為從屬服務器上的db2name資料庫。<br />
<strong>report-host</strong> = hostname 從屬服務器的主機名; 這項信息只與SHOW SLAVE HOSTS命令有關–主控服務器可以用這條命令生成一份從屬服務器的名單。<br />
<strong>slave-compressed-protocol</strong> = 1 主、從服務器使用壓縮格式進行通信–如果它們都支持這麼做的話。<br />
<strong>slave-skip-errors</strong> = n1, n2, …或all 即使發生出錯代碼為n1、n2等的錯誤，鏡像處理工作也繼續進行(即不管發生什麼錯誤，鏡像處理工作也繼續進行)。<br />
如果配置得當，從屬服務器不應該在執行SQL命令時發生錯誤(在主控服務器上執行出錯的SQL命令不會被發送到從屬服務器上做鏡像處理); 如果不使用<br />
slave-skip-errors選項，從屬服務器上的鏡像工作就可能人為發生錯誤而中斷，中斷後需要有人工參與才能繼續進行。<br />
<strong></strong></p>
<p><strong>mysqld–InnoDB–基本設置、表空間文件</strong><br />
<strong>skip-innodb</strong> 不加載InnoDB資料表驅動程序–如果用不著InnoDB資料表，可以用這個選項節省一些記憶體。<br />
<strong>innodb-file-per-table</strong> 為每一個新資料表創建一個表空間文件而不是把資料表都集中保存在中央表空間裡(後者是默認設置)。該選項始見於MySQL 4.1。<br />
<strong>innodb-open-file</strong> = n InnoDB資料表驅動程序最多可以同時打開的文件數(默認設置是300)。如果使用了innodb-file-per-table選項並且需要同時打開很多<br />
資料表的話，這個數字很可能需要加大。<br />
<strong>innodb_data_home_dir</strong> = p InnoDB主目錄，所有與InnoDB資料表有關的目錄或文件路徑都相對於這個路徑。在默認的情況下，這個主目錄就是MySQL的數據目錄。<br />
<strong>innodb_data_file_path</strong> = ts 用來容納InnoDB為資料表的表空間: 可能涉及一個以上的文件; 每一個表空間文件的最大長度都必須以字節(B)、兆字節(MB)或<br />
千兆字節(GB)為單位給出; 表空間文件的名字必須以分號隔開; 最後一個表空間文件還可以帶一個autoextend屬性和一個最大長度(max:n)。<br />
例如，ibdata1:1G; ibdata2:1G:autoextend:max:2G的意思是: 表空間文件ibdata1的最大長度是1GB，ibdata2的最大長度也是1G，但允許它擴充到2GB。<br />
除文件名外，還可以用硬盤分區的設置名來定義表空間，此時必須給表空間的最大初始長度值加上newraw關鍵字做後綴，給表空間的最大擴充長度值加上<br />
raw關鍵字做後綴(例如/dev/hdb1:20Gnewraw或/dev/hdb1:20Graw); MySQL 4.0及更高版本的默認設置是ibdata1:10M:autoextend。<br />
<strong>innodb_autoextend_increment</strong> = n 帶有autoextend屬性的表空間文件每次加大多少兆字節(默認設置是8MB)。這個屬性不涉及具體的資料表文件，那些文件的<br />
增大速度相對是比較小的。<br />
<strong>innodb_lock_wait_timeout</strong> = n 如果某個事務在等待n秒(s)後還沒有獲得所需要的資源，就使用ROLLBACK命令放棄這個事務。這項設置對於發現和處理未能被<br />
InnoDB資料表驅動程序識別出來的死鎖條件有著重要的意義。這個選項的默認設置是50s。<br />
<strong>innodb_fast_shutdown</strong> 0/1 是否以最快的速度關閉InnoDB，默認設置是1，意思是不把緩存在INSERT緩存區的數據寫入資料表，那些數據將在MySQL服務器下次<br />
啟動時再寫入(這麼做沒有什麼風險，因為INSERT緩存區是表空間的一個組成部分，數據不會丟失)。把這個選項設置為0反面危險，因為在計算機關閉時，<br />
InnoDB驅動程序很可能沒有足夠的時間完成它的數據同步工作，操作系統也許會在它完成數據同步工作之前強行結束InnoDB，而這會導致數據不完整。<br />
<strong></strong></p>
<p><strong>mysqld程序–InnoDB–日誌</strong><br />
<strong>innodb_log_group_home_dir</strong> = p 用來存放InnoDB日誌文件的目錄路徑(如ib_logfile0、ib_logfile1等)。在默認的情況下，InnoDB驅動程序將使用MySQL數據目<br />
錄作為自己保存日誌文件的位置。<br />
<strong>innodb_log_files_in_group</strong> = n 使用多少個日誌文件(默認設置是2)。InnoDB資料表驅動程序將以輪轉方式依次填寫這些文件; 當所有的日誌文件都寫滿以後，<br />
之後的日誌信息將寫入第一個日誌文件的最大長度(默認設置是5MB)。這個長度必須以MB(兆字節)或GB(千兆字節)為單位進行設置。<br />
<strong>innodb_flush_log_at_trx_commit</strong> = 0/1/2 這個選項決定著什麼時候把日誌信息寫入日誌文件以及什麼時候把這些文件物理地寫(術語稱為’同步’)到硬盤上。<br />
設置值0的意思是每隔一秒寫一次日誌並進行同步，這可以減少硬盤寫操作次數，但可能造成數據丟失; 設置值1(設置設置)的意思是在每執行完一條COMMIT<br />
命令就寫一次日誌並進行同步，這可以防止數據丟失，但硬盤寫操作可能會很頻繁; 設置值2是一般折衷的辦法，即每執行完一條COMMIT命令寫一次日誌，<br />
每隔一秒進行一次同步。<br />
<strong>innodb_flush_method</strong> = x InnoDB日誌文件的同步辦法(僅適用於UNIX/Linux系統)。這個選項的可取值有兩種: fdatasync，用fsync()函數進行同步; O_DSYNC，<br />
用O_SYNC()函數進行同步。<br />
<strong>innodb_log_archive</strong> = 1 啟用InnoDB驅動程序的archive(檔案)日誌功能，把日誌信息寫入ib_arch_log_n文件。啟用這種日誌功能在InnoDB與MySQL一起使用時沒有<br />
多大意義(啟用MySQL服務器的二進制日誌功能就足夠用了)。<br />
<strong></strong></p>
<p><strong>mysqld程序–InnoDB–緩存區的設置和優化</strong><br />
<strong>innodb_log_buffer_pool_size</strong> = n 為InnoDB資料表及其索引而保留的RAM記憶體量(默認設置是8MB)。這個參數對速度有著相當大的影響，如果計算機上只運行有<br />
MySQL/InnoDB資料庫服務器，就應該把全部記憶體的80%用於這個用途。<br />
<strong>innodb_log_buffer_size</strong> = n 事務日誌文件寫操作緩存區的最大長度(默認設置是1MB)。<br />
<strong>innodb_additional_men_pool_size</strong> = n 為用於內部管理的各種數據結構分配的緩存區最大長度(默認設置是1MB)。<br />
<strong>innodb_file_io_threads</strong> = n I/O操作(硬盤寫操作)的最大線程個數(默認設置是4)。<br />
<strong>innodb_thread_concurrency</strong> = n InnoDB驅動程序能夠同時使用的最大線程個數(默認設置是8)。<br />
<strong></strong></p>
<p><strong>mysqld程序–其它選項</strong><br />
<strong>bind-address</strong> = ipaddr MySQL服務器的IP地址。如果MySQL服務器所在的計算機有多個IP地址，這個選項將非常重要。<br />
<strong>default-storage-engine</strong> = type 新資料表的默認資料表類型(默認設置是MyISAM)。這項設置還可以通過–default-table-type選項來設置。<br />
<strong>default-timezone</strong> = name 為MySQL服務器設置一個地理時區(如果它與本地計算機的地理時區不一樣)。<br />
<strong>ft_min_word_len</strong> = n 全文索引的最小單詞長度工。這個選項的默認設置是4，意思是在創建全文索引時不考慮那些由3個或更少的字符構建單詞。<br />
<strong>Max-allowed-packet</strong> = n 客戶與服務器之間交換的數據包的最大長度，這個數字至少應該大於客戶程序將要處理的最大BLOB塊的長度。這個選項的默認設置是1MB。<br />
<strong>Sql-mode</strong> = model1, mode2, … MySQL將運行在哪一種SQL模式下。這個選項的作用是讓MySQL與其他的資料庫系統保持最大程度的兼容。這個選項的可取值包括<br />
ansi、db2、oracle、no_zero_date、pipes_as_concat。<br />
注意：如果在配置文件裡給出的某個選項是mysqld無法識別的(如，因為犯了一個愚蠢的打字錯誤)，MySQL服務器將不啟動。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.fabrichina.net/archives/406/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>mysql proxy 安装</title>
		<link>http://blog.fabrichina.net/archives/404</link>
		<comments>http://blog.fabrichina.net/archives/404#comments</comments>
		<pubDate>Fri, 20 Aug 2010 10:01:23 +0000</pubDate>
		<dc:creator>Albert</dc:creator>
				<category><![CDATA[PHP语言学习]]></category>

		<guid isPermaLink="false">http://blog.fabrichina.net/?p=404</guid>
		<description><![CDATA[  下面这个包是一个编译好的。。直接copy过去就行了 http://dev.mysql.com/get/Downloads/MySQL-Proxy/mysql-proxy-0.8.0-linux-rhel5-x86-64bit.tar.gz/from/http://mysql.he.net/ http://www.lua.org/ftp/lua-5.1.4.tar.gz install Here is a how-to: cd /usr/local wget lua.tar.gz wget mysql-proxy.tar.gz tar xzf lua.tar.gz tar xzf mysql-proxy.tar.gz cd lua* In Makefile change INSTALL_TOP= /opt/lua vi Makefile make linux make install cd.. cd mysql-proxy* yum install libevent-devel glib2-devel ./configure &#8211;prefix=/usr/local/mysql-proxy &#8211;with-lua LDFLAGS=&#8221;-lm -ldl&#8221; LUA_CFLAGS=&#8221;-I/opt/lua/lib/&#8221; LUA_LIBS=/opt/lua/lib/liblua.la make make install Now, it&#8217;s time to [...]]]></description>
			<content:encoded><![CDATA[<p> </p>
<p>下面这个包是一个编译好的。。直接copy过去就行了</p>
<p><a href="http://dev.mysql.com/get/Downloads/MySQL-Proxy/mysql-proxy-0.8.0-linux-rhel5-x86-64bit.tar.gz/from/http://mysql.he.net/">http://dev.mysql.com/get/Downloads/MySQL-Proxy/mysql-proxy-0.8.0-linux-rhel5-x86-64bit.tar.gz/from/http://mysql.he.net/</a></p>
<p><a href="http://www.lua.org/ftp/lua-5.1.4.tar.gz">http://www.lua.org/ftp/lua-5.1.4.tar.gz</a><br />
install<br />
Here is a how-to:</p>
<p>cd /usr/local<br />
wget lua.tar.gz<br />
wget mysql-proxy.tar.gz<br />
tar xzf lua.tar.gz<br />
tar xzf mysql-proxy.tar.gz<br />
cd lua*<br />
In Makefile change INSTALL_TOP= /opt/lua</p>
<p>vi Makefile<br />
make linux<br />
make install<br />
cd..<br />
cd mysql-proxy*</p>
<p>yum install libevent-devel glib2-devel<br />
./configure &#8211;prefix=/usr/local/mysql-proxy &#8211;with-lua LDFLAGS=&#8221;-lm -ldl&#8221; LUA_CFLAGS=&#8221;-I/opt/lua/lib/&#8221; LUA_LIBS=/opt/lua/lib/liblua.la<br />
make<br />
make install</p>
<p>Now, it&#8217;s time to put mysql-proxy on init:</p>
<p>cat &gt;/etc/init.d/mysql-proxy<br />
Paste here MySQL Proxy init contents CTRL+D to save</p>
<p>chmod 0755 /etc/init.d/mysql-proxy<br />
chkconfig mysql-proxy on</p>
<p>cat &gt;/etc/sysconfig/mysql-proxy<br />
# Options to mysql-proxy<br />
# do not remove &#8211;daemon<br />
PROXY_OPTIONS=&#8221;&#8211;daemon&#8221;</p>
<p>/etc/init.d/mysql-proxy<br />
Only change PROXY_PATH=/opt/mysql-proxy/sbin var to directory where mysql-proxy bin is located.</p>
<p>#!/bin/sh<br />
#<br />
# mysql-proxy This script starts and stops the mysql-proxy daemon<br />
#<br />
# chkconfig: &#8211; 78 30<br />
# processname: mysql-proxy<br />
# description: mysql-proxy is a proxy daemon to mysql</p>
<p># Source function library.<br />
. /etc/rc.d/init.d/functions</p>
<p>PROXY_PATH=/opt/mysql-proxy/sbin</p>
<p>prog=&#8221;mysql-proxy&#8221;</p>
<p># Source networking configuration.<br />
. /etc/sysconfig/network</p>
<p># Check that networking is up.<br />
[ ${NETWORKING} = "no" ] &amp;&amp; exit 0</p>
<p># Set default mysql-proxy configuration.<br />
PROXY_OPTIONS=&#8221;&#8211;daemon&#8221;<br />
PROXY_PID=/var/run/mysql-proxy.pid</p>
<p># Source mysql-proxy configuration.<br />
if [ -f /etc/sysconfig/mysql-proxy ] ; then<br />
        . /etc/sysconfig/mysql-proxy<br />
fi</p>
<p>PATH=$PATH:/usr/bin:/usr/local/bin:$PROXY_PATH</p>
<p># By default it&#8217;s all good<br />
RETVAL=0</p>
<p># See how we were called.<br />
case &#8220;$1&#8243; in<br />
  start)<br />
        # Start daemon.<br />
        echo -n $&#8221;Starting $prog: &#8221;<br />
        daemon $NICELEVEL $PROXY_PATH/mysql-proxy $PROXY_OPTIONS &#8211;pid-file $PROXY_PID<br />
        RETVAL=$?<br />
        echo<br />
        if [ $RETVAL = 0 ]; then<br />
                touch /var/lock/subsys/mysql-proxy<br />
        fi<br />
        ;;<br />
  stop)<br />
        # Stop daemons.<br />
        echo -n $&#8221;Stopping $prog: &#8221;<br />
        killproc $prog<br />
        RETVAL=$?<br />
        echo<br />
        if [ $RETVAL = 0 ]; then<br />
                rm -f /var/lock/subsys/mysql-proxy<br />
                rm -f $PROXY_PID<br />
        fi<br />
        ;;<br />
  restart)<br />
        $0 stop<br />
        sleep 3<br />
        $0 start<br />
        ;;<br />
  condrestart)<br />
       [ -e /var/lock/subsys/mysql-proxy ] &amp;&amp; $0 restart<br />
       ;;<br />
  status)<br />
        status mysql-proxy<br />
        RETVAL=$?<br />
        ;;<br />
  *)<br />
        echo &#8220;Usage: $0 {start|stop|restart|status|condrestart}&#8221;<br />
        RETVAL=1<br />
        ;;<br />
esac</p>
<p>exit $RETVAL<br />
[edit] /etc/sysconfig/mysql-proxy<br />
Here you set mysql-proxy parameters</p>
<p># Options to mysql-proxy<br />
# do not remove &#8211;daemon<br />
PROXY_OPTIONS=&#8221;&#8211;daemon&#8221;</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.fabrichina.net/archives/404/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>编译lua报错luaconf.h:275:31: error: readline/readline.h: No such file or directory</title>
		<link>http://blog.fabrichina.net/archives/401</link>
		<comments>http://blog.fabrichina.net/archives/401#comments</comments>
		<pubDate>Fri, 20 Aug 2010 09:32:54 +0000</pubDate>
		<dc:creator>Albert</dc:creator>
				<category><![CDATA[PHP语言学习]]></category>

		<guid isPermaLink="false">http://blog.fabrichina.net/?p=401</guid>
		<description><![CDATA[wget ftp://ftp.cwru.edu/pub/bash/readline-6.1.tar.gz tar -zxvf readline-6.1.tar.gz cd ~~ ./configure &#38;&#38; make &#38;&#38; make install ldconfig 回到lua里面make linux ;搞定！]]></description>
			<content:encoded><![CDATA[<p>wget <a href="ftp://ftp.cwru.edu/pub/bash/readline-6.1.tar.gz">ftp://ftp.cwru.edu/pub/bash/readline-6.1.tar.gz</a></p>
<p>tar -zxvf readline-6.1.tar.gz</p>
<p>cd ~~ ./configure &amp;&amp; make &amp;&amp; make install</p>
<p>ldconfig</p>
<p>回到lua里面make linux ;搞定！</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.fabrichina.net/archives/401/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>设置mysql slave Master_Log_File</title>
		<link>http://blog.fabrichina.net/archives/399</link>
		<comments>http://blog.fabrichina.net/archives/399#comments</comments>
		<pubDate>Fri, 20 Aug 2010 07:03:53 +0000</pubDate>
		<dc:creator>Albert</dc:creator>
				<category><![CDATA[PHP语言学习]]></category>

		<guid isPermaLink="false">http://blog.fabrichina.net/?p=399</guid>
		<description><![CDATA[mysql&#62; show master status; +&#8212;&#8212;&#8212;&#8212;&#8212;+&#8212;&#8212;&#8212;-+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;+ &#124; File          &#124; Position &#124; Binlog_Do_DB                                               &#124; Binlog_Ignore_DB &#124; +&#8212;&#8212;&#8212;&#8212;&#8212;+&#8212;&#8212;&#8212;-+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;+ &#124; binlog.000003 &#124;      107 &#124; HGGJDATAS01,HGGJDATAS02,HGGJDATAS03,HGGJDATAS04,HGGJGLOBAL &#124;                  &#124; +&#8212;&#8212;&#8212;&#8212;&#8212;+&#8212;&#8212;&#8212;-+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;+ 1 row in set (0.00 sec) file在0003 pos是107 在slave机器上 CHANGE master TO master_host=&#8217;db01&#8242;, master_port=3306, master_user=&#8217;root&#8217;, master_password=&#8217;dhgatefactory&#8217;, master_log_file=&#8217;binlog.000003&#8242;, master_log_pos=107; 如果以前启动过slave可以先stop slave;然后执行完了start slave; 最后用show slave status;看一下如何 用phpmyadmin看一下 Slave_IO_State Waiting for master to send [...]]]></description>
			<content:encoded><![CDATA[<p>mysql&gt; show master status;<br />
+&#8212;&#8212;&#8212;&#8212;&#8212;+&#8212;&#8212;&#8212;-+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;+<br />
| File          | Position | Binlog_Do_DB                                               | Binlog_Ignore_DB |<br />
+&#8212;&#8212;&#8212;&#8212;&#8212;+&#8212;&#8212;&#8212;-+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;+<br />
| binlog.000003 |      107 | HGGJDATAS01,HGGJDATAS02,HGGJDATAS03,HGGJDATAS04,HGGJGLOBAL |                  |<br />
+&#8212;&#8212;&#8212;&#8212;&#8212;+&#8212;&#8212;&#8212;-+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;+<br />
1 row in set (0.00 sec)</p>
<p>file在0003 pos是107</p>
<p>在slave机器上</p>
<p>CHANGE master TO master_host=&#8217;db01&#8242;, master_port=3306, master_user=&#8217;root&#8217;, master_password=&#8217;dhgatefactory&#8217;, master_log_file=&#8217;binlog.000003&#8242;, master_log_pos=107;</p>
<p>如果以前启动过slave可以先stop slave;然后执行完了start slave;</p>
<p>最后用show slave status;看一下如何</p>
<p>用phpmyadmin看一下</p>
<table id="serverslavereplicationsummary">
<tbody>
<tr>
<td>Slave_IO_State</td>
<td>Waiting for master to send event</td>
</tr>
</tbody>
</table>
<p>基本上就OK~~</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.fabrichina.net/archives/399/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>网络IP地址算法&#8217;/&#8217; 的用法</title>
		<link>http://blog.fabrichina.net/archives/396</link>
		<comments>http://blog.fabrichina.net/archives/396#comments</comments>
		<pubDate>Wed, 18 Aug 2010 08:03:16 +0000</pubDate>
		<dc:creator>Albert</dc:creator>
				<category><![CDATA[PHP语言学习]]></category>

		<guid isPermaLink="false">http://blog.fabrichina.net/?p=396</guid>
		<description><![CDATA[xxx.xxx.xxx.xxx/32 这表示前面这个ip xxx.xxx.xxx.xxx/31 标示前面这个ip后面2个 都是按照32-实际数字 作为2的次方来算的必然24就是2的8次方 就是256个ip就是一个C段，如果16就是2个 比如192.168.1.0/24 就是192168.1.0-192.168.1.255 192.168.0.0/16 就是192.168.0.0 -192.168.255.255 依此类推！]]></description>
			<content:encoded><![CDATA[<p>xxx.xxx.xxx.xxx/32 这表示前面这个ip</p>
<p>xxx.xxx.xxx.xxx/31 标示前面这个ip后面2个</p>
<p>都是按照32-实际数字 作为2的次方来算的必然24就是2的8次方 就是256个ip就是一个C段，如果16就是2个</p>
<p>比如192.168.1.0/24 就是192168.1.0-192.168.1.255</p>
<p>192.168.0.0/16 就是192.168.0.0 -192.168.255.255</p>
<p>依此类推！</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.fabrichina.net/archives/396/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
