Archive for August, 2010

solr vs 中文分词

solr本身内核是utf-8的,所以建立索引的时候中文可以正确进入索引,建立索引的时候用的中文分词器应该与读取索引时用的分词器一致

No Comments

php solr jetty 安装测试

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 –with-php-config=.. && make && 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 Build Time 17:11:02
SolrObject enabled
SolrDocument enabled
SolrDocumentField enabled
SolrInputDocument enabled
SolrClient enabled
SolrParams enabled
SolrQuery enabled
SolrModifiableParams enabled
SolrResponse enabled
SolrQueryResponse enabled
SolrUpdateResponse enabled
SolrPingResponse enabled
SolrGenericResponse enabled
SolrUtils enabled
SolrException enabled
SolrIllegalOperationException enabled
SolrIllegalArgumentException enabled
SolrClientException enabled

搞定接下来,连连试试呗

<?php

$options = array
(
    ‘hostname’ => ‘localhost’,
    ‘port’     => 8983,
);

$client = new SolrClient($options);

$doc = new SolrInputDocument();

$doc->addField(‘id’, 334455);
$doc->addField(‘cat’, ‘Software’);
$doc->addField(‘cat’, ‘Lucene’);

$updateResponse = $client->addDocument($doc);

print_r($updateResponse->getResponse());

执行后,返回

SolrObject Object
(
    [responseHeader] => SolrObject Object
        (
            [status] => 0
            [QTime] => 62
        )

)

恩,看来这东西。。又是白菜一样的简单了。。。一个指令启服务,安装个.so就能用了。。。性能测试了一下还是不错的。

No Comments

nginx 关闭 Transfer-Encoding:chunked

发现怎么关也关不了,但是用http 1.0的请求还是可以

不过用了http 1.0去请求nginx往后发的时候用的也是1.0,导致后端服务器不返回cotent-length…

这个。。只好去改后端的服务了。。

最后我看,nginx对http1.1->http 1.0是不支持的,他只支持http1.1->http1.1 和http1.0->http1.0

而Transfer-Encoding:chunked是在http 1.1上包办出现的,想他不出现都不行。。。不过我就奇怪了,我的2台nginx->nginx的静态文件服务器,也是用的http1.1但是结果就是没有Transfer-Encoding:chunked而且content-length也出来了,真没搞明白为什么~~~从文件头上看,都完全一样,不知道为什么就是不行。。

No Comments

pptpd 源代码安装

wget http://www.sfr-fresh.com/linux/misc/pptpd-1.3.4.tar.gz
tar ..
./configure && make && 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 –dport 1723 -j ACCEPT

iptables -A INPUT -p tcp –dport 47 -j ACCEPT

iptables -A INPUT -p gre -j ACCEPT

iptables -t nat -A POSTROUTING -s 192.168.8.0/24 -o eth0 -j MASQUERADE

完成后输入/etc/init.d/iptables save保存,并且输入/etc/init.d/iptables restart重新启动。

我连接的时候出现了vpn 619错误,查了一下是路由器nat -t上pptp nat穿透选项的问题,但是我另外一个vpn是可以用的,所以我还需要研究一下为什么另外一个能用!

可能是服务器的机房路由器没有开启pptp的通过,我已经open ticket让他们开了,看看开了以后会不会就好了!

No Comments

一个简单高效的分词方法

$u=preg_split(“/[^0-9a-z-]/i”,strtolower($str));
foreach($u as $key=>$val)
{
if(strlen($val)<2) unset($u[$key]);
}
return implode('-',$u);
小于两个字符的,不算词。

$u=preg_split("/[^0-9a-z-]/i",strtolower($str));
$b=array();
foreach($u as $key=>$val)
{
if(strlen($val)<2) unset($u[$key]);
else $b[$val]=1;
}
$b=array_keys($b);
sort($b);
echo implode(‘_’,$b);
echo “\r\n”.md5(implode(‘_’,$b)).”\r\n”;
这个呢。。是把重复的单词滤掉。

No Comments

memcachedb 运用’db_archive’指令清除log

实际上memcachedb就有清除db的指令
telnet localhost 21201
db_archive
运行之前的
-rw-r–r– 1 www www 8192 Aug 24 03:10 data.db
-rw-r—– 1 www www 10485760 Aug 24 02:10 log.0000000001
-rw-r—– 1 www www 10485760 Aug 24 03:10 log.0000000002
运行之后
-rw-r–r– 1 www www 8192 Aug 24 03:10 data.db
-rw-r—– 1 www www 10485760 Aug 24 03:10 log.0000000002

说明还是生效的~~~

No Comments

memcachedb 日志文件归档处理php脚本

memcachedb最大的问题就是数据库的归档log太大了!google code上有一个php的归档脚本,拿来用用。。

<?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 < $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的日志设计的清理及备份方案。";
    }
}
?>

1 Comment

memcachedb 安装/测试 VS TokyoTyrant 性能差

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 && make install
cd ../../

cd memcachedb-read-only/
./configure –enable-threads -with-bdb=/usr/local/BerkeleyDB.5.0/
make && 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 >/dev/null &
>/data/memcachedb/memcachedb.log 2>&1
memcachedb -p21201 -d -r -H /data/memcachedb -N -R 127.0.0.1:31201 -M -n 2 -v >/data/memcachedb/memcachedb.log 2>&1

用php测试memcachedb和tokyoDb,他们的差别

[root@Index-Server dataget]# /usr/local/php/bin/php tts.php
Did nothing in 0.65564799308777 seconds
value[root@Index-Server dataget]# /usr/local/php/bin/php mem.php
Did nothing in 0.73450708389282 seconds
test[root@Index-Server dataget]# /usr/local/php/bin/php tts.php
Did nothing in 0.85011577606201 seconds
value[root@Index-Server dataget]# /usr/local/php/bin/php tts.php
Did nothing in 0.92772603034973 seconds
value[root@Index-Server dataget]# /usr/local/php/bin/php tts.php
Did nothing in 0.99560403823853 seconds
value[root@Index-Server dataget]# /usr/local/php/bin/php tts.php
Did nothing in 1.0420861244202 seconds
value[root@Index-Server dataget]# /usr/local/php/bin/php tts.php
Did nothing in 0.89272093772888 seconds
value[root@Index-Server dataget]# /usr/local/php/bin/php tts.php
Did nothing in 1.04558801651 seconds
value[root@Index-Server dataget]# /usr/local/php/bin/php tts.php
Did nothing in 0.81222891807556 seconds
value[root@Index-Server dataget]# /usr/local/php/bin/php mem.php
Did nothing in 0.68305706977844 seconds
test[root@Index-Server dataget]# /usr/local/php/bin/php mem.php
Did nothing in 0.68526387214661 seconds
test[root@Index-Server dataget]# /usr/local/php/bin/php mem.php
Did nothing in 0.69543099403381 seconds
test[root@Index-Server dataget]# /usr/local/php/bin/php mem.php
Did nothing in 0.67856597900391 seconds
test[root@Index-Server dataget]# /usr/local/php/bin/php mem.php
Did nothing in 0.67917394638062 seconds
test[root@Index-Server dataget]# /usr/local/php/bin/php mem.php
Did nothing in 0.682452917099 seconds
test[root@Index-Server dataget]#

可以看出tokyoDb的性能不是太稳定,memcachedb还是要稳定很多的。速度上也是memcachedb来的更快。

TokyoTyrant 我用的是tbh 优化了xmsize应该是他比较优化的性能了,和memcachedb还是有一些差距的。

No Comments

mysql 添加用户 一组IP 一组表

通配符就是%设置表和IP都可以使用%

比如 192.168.1.% 就是 192.168.1.*

比如XX% 就是所有xx开头的表的权限。

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 编辑权限

No Comments

ssh 信任关系(无密码)

::::::::::::::
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 “copied”
ssh -l www www@$i ” [ -e /home/www/.ssh ] || mkdir /home/www/.ssh”
ssh -l www www@$i “cat /tmp/id_dsa.pub >> /home/www/.ssh/authorized_keys”
echo “attaphed”
echo “$i is done!”
ssh -l www www@$i “rm -f  /tmp/id_dsa.pub”
done

用户目录权限为 755 或者 700,就是不能是77x
.ssh目录权限必须为755
rsa_id.pub 及authorized_keys权限必须为644或600
rsa_id权限必须为600

rsa_id.pub 在生成 authorized_keys后即可以删除。
rsa_id为私钥,也应该从服务器上删除

如果还不对的话 ssh -v user@host 看一下

No Comments

mysql-proxy 配置

./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 –prefix=/usr –libdir=/usr/lib
make
make install

./configure –prefix=/usr –libdir=/usr/lib 很重要,否则没用!我白编译了一遍~~

然后记得在/etc/ld.so.conf中加上/usr/local/lib 然后ldconfig,这才终于算是可以用到新版本的glib了!

./mysql-proxy –daemon –keepalive –basedir=/usr/local/mysql-proxy/ –proxy-address=192.168.1.180:3306 –proxy-backend-addresses=db01:3306 –proxy-read-only-backend-addresses=db02:3306 –proxy-lua-script=lib/mysql-proxy/lua/proxy/ –log-file=/var/log/mysql-proxy.log –log-level=debug

启动了这个以后去看log

010-08-20 08:31:00: (message) proxy listening on port 192.168.1.180:3306
2010-08-20 08:31:00: (message) added read/write backend: db01:3306
2010-08-20 08:31:00: (message) added read-only backend: db02:3306
2010-08-20 08:31:22: (debug) abs wait-for-event::done            usec=       0
2010-08-20 08:31:22: (debug) abs lua-exec::done                  usec=       0

这就是成功了!o ye ~~

不过我现在用的是blance 

=/usr/local/share/mysql-proxy/rw-splitting.lua 用这个的话是读写分离的lua不过我吧debug打开以后发现他还会将大量的读打到我设置的主写服务器,估计是什么地方弄错了??
/usr/local/mysql-proxy/libexec/mysql-proxy –daemon –keepalive –basedir=/usr/local/mysql-proxy/ –proxy-address=192.168.1.180:3306 –proxy-backend-addresses=db01:3306 –proxy-read-only-backend-addresses=db02:3306 –proxy-lua-script=share/doc/mysql-proxy/rw-splitting.lua –log-file=/var/log/mysql-proxy.log –log-level=debug

测试了一下中文,直接连库没问题,通过mysql-proxy就会悲剧。。。

default-character-set = utf8
skip-character-set-client-handshake
character-set-server = utf8
collation-server = utf8_general_ci
#init-connect = SET NAMES utf8
把这个加到2台服务器的my.conf中再试试吧。。
不过我也是觉得最后这句有点问题,每个connect都发一个set name实在不怎么样,好在我去了以后也没问题,索性我就去了最后一行,效率应该能好些!

No Comments

mysql my.cnf 含义

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語句來處理本地文件。
myisam-recover [=opt1, opt2, ...] 在啟動時自動修復所有受損的MyISAM資料表。這個選項的可取值有4種EFAULT、BACKUP、QUICK和FORCE; 它們與myisamchk程序的同名選項作用相同。
old-passwords 使用MySQL 3.23和4.0版本中的老算法來加密mysql資料庫裡的密碼(默認使用MySQL 4.1版本開始引入的新加密算法)。
port = n 為MySQL程序指定一個TCP/IP通信端口(通常是3306端口)。
safe-user-create 只有在mysql.user資料庫表上擁有INSERT權限的用戶才能使用GRANT命令; 這是一種雙保險機制(此用戶還必須具備GRANT權限才能執行GRANT命令)。
shared-memory 允許使用記憶體(shared memory)進行通信(僅適用於Windows)。
shared-memory-base-name = name 給共享記憶體塊起一個名字(默認的名字是MySQL)。
skip-grant-tables 不使用mysql資料庫裡的信息來進行訪問控制(警告:這將允許用戶任何用戶去修改任何資料庫)。
skip-host-cache 不使用高速緩存區來存放主機名和IP地址的對應關係。
skip-name-resovle 不把IP地址解析為主機名; 與訪問控制(mysql.user資料表)有關的檢查全部通過IP地址行進。
skip-networking 只允許通過一個套接字文件(Unix/Linux系統)或通過命名管道(Windows系統)進行本地連接,不允許ICP/IP連接; 這提高了安全性,但阻斷了來自網絡的外部連接和所有的Java客戶程序(Java客戶即使在本地連接裡也使用TCP/IP)。
user = name mysqld程序在啟動後將在給定UNIX/Linux賬戶下執行; mysqld必須從root賬戶啟動才能在啟動後切換到另一個賬戶下執行; mysqld_safe腳本將默認使用–user=mysql選項來啟動mysqld程序。

mysqld程序–記憶體管理、優化、查詢緩存區
bulk_insert_buffer_size = n 為一次插入多條新記錄的INSERT命令分配的緩存區長度(默認設置是8M)。
key_buffer_size = n 用來存放索引區塊的RMA值(默認設置是8M)。
join_buffer_size = n 在參加JOIN操作的數據列沒有索引時為JOIN操作分配的緩存區長度(默認設置是128K)。
max_heap_table_size = n HEAP資料表的最大長度(默認設置是16M); 超過這個長度的HEAP資料表將被存入一個臨時文件而不是駐留在記憶體裡。
max_connections = n MySQL服務器同時處理的資料庫連接的最大數量(默認設置是100)。
query_cache_limit = n 允許臨時存放在查詢緩存區裡的查詢結果的最大長度(默認設置是1M)。
query_cache_size = n 查詢緩存區的最大長度(默認設置是0,不開闢查詢緩存區)。
query_cache_type = 0/1/2 查詢緩存區的工作模式:0, 禁用查詢緩存區; 1,啟用查詢緩存區(默認設置); 2,’按需分配’模式,只響應SELECT SQL_CACHE命令。
read_buffer_size = n 為從資料表順序讀取數據的讀操作保留的緩存區的長度(默認設置是128KB); 這個選項的設置值在必要時可以用SQL命令SET SESSION read_buffer_size = n命令加以改變。
read_rnd_buffer_size = n 類似於read_buffer_size選項,但針對的是按某種特定順序(比如使用了ORDER BY子句的查詢)輸出的查詢結果(默認設置是256K)。
sore_buffer = n 為排序操作分配的緩存區的長度(默認設置是2M); 如果這個緩存區太小,則必須創建一個臨時文件來進行排序。
table_cache = n 同時打開的資料表的數量(默認設置是64)。
tmp_table_size = n 臨時HEAP資料表的最大長度(默認設置是32M); 超過這個長度的臨時資料表將被轉換為MyISAM資料表並存入一個臨時文件。

mysqld程序–日誌
log [= file] 把所有的連接以及所有的SQL命令記入日誌(通用查詢日誌); 如果沒有給出file參數,MySQL將在資料庫目錄裡創建一個hostname.log文件作為這種日誌文件(hostname是服務器的主機名)。
log-slow-queries [= file] 把執行用時超過long_query_time變量值的查詢命令記入日誌(慢查詢日誌); 如果沒有給出file參數,MySQL將在資料庫目錄裡創建一個hostname-slow.log文件作為這種日誌文件(hostname是服務器主機 名)。
long_query_time = n 慢查詢的執行用時上限(默認設置是10s)。
long_queries_not_using_indexs 把慢查詢以及執行時沒有使用索引的查詢命令全都記入日誌(其餘同–log-slow-queries選項)。
log-bin [= filename] 把對數據進行修改的所有SQL命令(也就是INSERT、UPDATE和DELETE命令)以二進制格式記入日誌(二進制變更日誌,binary update log)。這種日誌的文件名是filename.n或默認的hostname.n,其中n是一個6位數字的整數(日誌文件按順序編號)。
log-bin-index = filename 二進制日誌功能的索引文件名。在默認情況下,這個索引文件與二進制日誌文件的名字相同,但後綴名是.index而不是.nnnnnn。
max_binlog_size = n 二進制日誌文件的最大長度(默認設置是1GB)。在前一個二進制日誌文件裡的信息量超過這個最大長度之前,MySQL服務器會自動提供一個新的二進制日誌文件接續上。
binlog-do-db = dbname 只把給定資料庫裡的變化情況記入二進制日誌文件,其他資料庫裡的變化情況不記載。如果需要記載多個資料庫裡的變化情況,就必須在配置文件使用多個本選項來設置,每個資料庫一行。
binlog-ignore-db = dbname 不把給定資料庫裡的變化情況記入二進制日誌文件。
sync_binlog = n 每經過n次日誌寫操作就把日誌文件寫入硬盤一次(對日誌信息進行一次同步)。n=1是最安全的做法,但效率最低。默認設置是n=0,意思是由操作系統來負責二進制日誌文件的同步工作。
log-update [= file] 記載出錯情況的日誌文件名(出錯日誌)。這種日誌功能無法禁用。如果沒有給出file參數,MySQL會使用hostname.err作為種日誌文件的名字。

mysqld程序–鏡像(主控鏡像服務器)
server-id = n 給服務器分配一個獨一無二的ID編號; n的取值範圍是1~2的32次方啟用二進制日誌功能。
log-bin = name 啟用二進制日誌功能。這種日誌的文件名是filename.n或默認的hostname.n,其中的n是一個6位數字的整數(日誌文件順序編號)。
binlog-do/ignore-db = dbname 只把給定資料庫裡的變化情況記入二進制日誌文件/不把給定的資料庫裡的變化記入二進制日誌文件。

mysqld程序–鏡像(從屬鏡像服務器)
server-id = n 給服務器分配一個唯一的ID編號
log-slave-updates 啟用從屬服務器上的日誌功能,使這台計算機可以用來構成一個鏡像鏈(A->B->C)。
master-host = hostname 主控服務器的主機名或IP地址。如果從屬服務器上存在mater.info文件(鏡像關係定義文件),它將忽略此選項。
master-user = replicusername 從屬服務器用來連接主控服務器的用戶名。如果從屬服務器上存在mater.info文件,它將忽略此選項。
master-password = passwd 從屬服務器用來連接主控服務器的密碼。如果從屬服務器上存在mater.info文件,它將忽略此選項。
master-port = n 從屬服務器用來連接主控服務器的TCP/IP端口(默認設置是3306端口)。
master-connect-retry = n 如果與主控服務器的連接沒有成功,則等待n秒(s)後再進行管理方式(默認設置是60s)。如果從屬服務器存在mater.info文件,
它將忽略此選項。
master-ssl-xxx = xxx 對主、從服務器之間的SSL通信進行配置。
read-only = 0/1 0: 允許從屬服務器獨立地執行SQL命令(默認設置); 1: 從屬服務器只能執行來自主控服務器的SQL命令。
read-log-purge = 0/1 1: 把處理完的SQL命令立刻從中繼日誌文件裡刪除(默認設置); 0: 不把處理完的SQL命令立刻從中繼日誌文件裡刪除。
replicate-do-table = dbname.tablename 與–replicate-do-table選項的含義和用法相同,但資料庫和資料表名字裡允許出現通配符’%’

(例如: test%.%–對名字以’test’開頭的所有資料庫裡的所以資料庫表進行鏡像處理)。
replicate-do-db = name 只對這個資料庫進行鏡像處理。

replicate-ignore-table = dbname.tablename 不對這個資料表進行鏡像處理。
replicate-wild-ignore-table = dbn.tablen 不對這些資料表進行鏡像處理。
replicate-ignore-db = dbname 不對這個資料庫進行鏡像處理。
replicate-rewrite-db = db1name > db2name 把主控資料庫上的db1name資料庫鏡像處理為從屬服務器上的db2name資料庫。
report-host = hostname 從屬服務器的主機名; 這項信息只與SHOW SLAVE HOSTS命令有關–主控服務器可以用這條命令生成一份從屬服務器的名單。
slave-compressed-protocol = 1 主、從服務器使用壓縮格式進行通信–如果它們都支持這麼做的話。
slave-skip-errors = n1, n2, …或all 即使發生出錯代碼為n1、n2等的錯誤,鏡像處理工作也繼續進行(即不管發生什麼錯誤,鏡像處理工作也繼續進行)。
如果配置得當,從屬服務器不應該在執行SQL命令時發生錯誤(在主控服務器上執行出錯的SQL命令不會被發送到從屬服務器上做鏡像處理); 如果不使用
slave-skip-errors選項,從屬服務器上的鏡像工作就可能人為發生錯誤而中斷,中斷後需要有人工參與才能繼續進行。

mysqld–InnoDB–基本設置、表空間文件
skip-innodb 不加載InnoDB資料表驅動程序–如果用不著InnoDB資料表,可以用這個選項節省一些記憶體。
innodb-file-per-table 為每一個新資料表創建一個表空間文件而不是把資料表都集中保存在中央表空間裡(後者是默認設置)。該選項始見於MySQL 4.1。
innodb-open-file = n InnoDB資料表驅動程序最多可以同時打開的文件數(默認設置是300)。如果使用了innodb-file-per-table選項並且需要同時打開很多
資料表的話,這個數字很可能需要加大。
innodb_data_home_dir = p InnoDB主目錄,所有與InnoDB資料表有關的目錄或文件路徑都相對於這個路徑。在默認的情況下,這個主目錄就是MySQL的數據目錄。
innodb_data_file_path = ts 用來容納InnoDB為資料表的表空間: 可能涉及一個以上的文件; 每一個表空間文件的最大長度都必須以字節(B)、兆字節(MB)或
千兆字節(GB)為單位給出; 表空間文件的名字必須以分號隔開; 最後一個表空間文件還可以帶一個autoextend屬性和一個最大長度(max:n)。
例如,ibdata1:1G; ibdata2:1G:autoextend:max:2G的意思是: 表空間文件ibdata1的最大長度是1GB,ibdata2的最大長度也是1G,但允許它擴充到2GB。
除文件名外,還可以用硬盤分區的設置名來定義表空間,此時必須給表空間的最大初始長度值加上newraw關鍵字做後綴,給表空間的最大擴充長度值加上
raw關鍵字做後綴(例如/dev/hdb1:20Gnewraw或/dev/hdb1:20Graw); MySQL 4.0及更高版本的默認設置是ibdata1:10M:autoextend。
innodb_autoextend_increment = n 帶有autoextend屬性的表空間文件每次加大多少兆字節(默認設置是8MB)。這個屬性不涉及具體的資料表文件,那些文件的
增大速度相對是比較小的。
innodb_lock_wait_timeout = n 如果某個事務在等待n秒(s)後還沒有獲得所需要的資源,就使用ROLLBACK命令放棄這個事務。這項設置對於發現和處理未能被
InnoDB資料表驅動程序識別出來的死鎖條件有著重要的意義。這個選項的默認設置是50s。
innodb_fast_shutdown 0/1 是否以最快的速度關閉InnoDB,默認設置是1,意思是不把緩存在INSERT緩存區的數據寫入資料表,那些數據將在MySQL服務器下次
啟動時再寫入(這麼做沒有什麼風險,因為INSERT緩存區是表空間的一個組成部分,數據不會丟失)。把這個選項設置為0反面危險,因為在計算機關閉時,
InnoDB驅動程序很可能沒有足夠的時間完成它的數據同步工作,操作系統也許會在它完成數據同步工作之前強行結束InnoDB,而這會導致數據不完整。

mysqld程序–InnoDB–日誌
innodb_log_group_home_dir = p 用來存放InnoDB日誌文件的目錄路徑(如ib_logfile0、ib_logfile1等)。在默認的情況下,InnoDB驅動程序將使用MySQL數據目
錄作為自己保存日誌文件的位置。
innodb_log_files_in_group = n 使用多少個日誌文件(默認設置是2)。InnoDB資料表驅動程序將以輪轉方式依次填寫這些文件; 當所有的日誌文件都寫滿以後,
之後的日誌信息將寫入第一個日誌文件的最大長度(默認設置是5MB)。這個長度必須以MB(兆字節)或GB(千兆字節)為單位進行設置。
innodb_flush_log_at_trx_commit = 0/1/2 這個選項決定著什麼時候把日誌信息寫入日誌文件以及什麼時候把這些文件物理地寫(術語稱為’同步’)到硬盤上。
設置值0的意思是每隔一秒寫一次日誌並進行同步,這可以減少硬盤寫操作次數,但可能造成數據丟失; 設置值1(設置設置)的意思是在每執行完一條COMMIT
命令就寫一次日誌並進行同步,這可以防止數據丟失,但硬盤寫操作可能會很頻繁; 設置值2是一般折衷的辦法,即每執行完一條COMMIT命令寫一次日誌,
每隔一秒進行一次同步。
innodb_flush_method = x InnoDB日誌文件的同步辦法(僅適用於UNIX/Linux系統)。這個選項的可取值有兩種: fdatasync,用fsync()函數進行同步; O_DSYNC,
用O_SYNC()函數進行同步。
innodb_log_archive = 1 啟用InnoDB驅動程序的archive(檔案)日誌功能,把日誌信息寫入ib_arch_log_n文件。啟用這種日誌功能在InnoDB與MySQL一起使用時沒有
多大意義(啟用MySQL服務器的二進制日誌功能就足夠用了)。

mysqld程序–InnoDB–緩存區的設置和優化
innodb_log_buffer_pool_size = n 為InnoDB資料表及其索引而保留的RAM記憶體量(默認設置是8MB)。這個參數對速度有著相當大的影響,如果計算機上只運行有
MySQL/InnoDB資料庫服務器,就應該把全部記憶體的80%用於這個用途。
innodb_log_buffer_size = n 事務日誌文件寫操作緩存區的最大長度(默認設置是1MB)。
innodb_additional_men_pool_size = n 為用於內部管理的各種數據結構分配的緩存區最大長度(默認設置是1MB)。
innodb_file_io_threads = n I/O操作(硬盤寫操作)的最大線程個數(默認設置是4)。
innodb_thread_concurrency = n InnoDB驅動程序能夠同時使用的最大線程個數(默認設置是8)。

mysqld程序–其它選項
bind-address = ipaddr MySQL服務器的IP地址。如果MySQL服務器所在的計算機有多個IP地址,這個選項將非常重要。
default-storage-engine = type 新資料表的默認資料表類型(默認設置是MyISAM)。這項設置還可以通過–default-table-type選項來設置。
default-timezone = name 為MySQL服務器設置一個地理時區(如果它與本地計算機的地理時區不一樣)。
ft_min_word_len = n 全文索引的最小單詞長度工。這個選項的默認設置是4,意思是在創建全文索引時不考慮那些由3個或更少的字符構建單詞。
Max-allowed-packet = n 客戶與服務器之間交換的數據包的最大長度,這個數字至少應該大於客戶程序將要處理的最大BLOB塊的長度。這個選項的默認設置是1MB。
Sql-mode = model1, mode2, … MySQL將運行在哪一種SQL模式下。這個選項的作用是讓MySQL與其他的資料庫系統保持最大程度的兼容。這個選項的可取值包括
ansi、db2、oracle、no_zero_date、pipes_as_concat。
注意:如果在配置文件裡給出的某個選項是mysqld無法識別的(如,因為犯了一個愚蠢的打字錯誤),MySQL服務器將不啟動。

No Comments

mysql proxy 安装

 

下面这个包是一个编译好的。。直接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 –prefix=/usr/local/mysql-proxy –with-lua LDFLAGS=”-lm -ldl” LUA_CFLAGS=”-I/opt/lua/lib/” LUA_LIBS=/opt/lua/lib/liblua.la
make
make install

Now, it’s time to put mysql-proxy on init:

cat >/etc/init.d/mysql-proxy
Paste here MySQL Proxy init contents CTRL+D to save

chmod 0755 /etc/init.d/mysql-proxy
chkconfig mysql-proxy on

cat >/etc/sysconfig/mysql-proxy
# Options to mysql-proxy
# do not remove –daemon
PROXY_OPTIONS=”–daemon”

/etc/init.d/mysql-proxy
Only change PROXY_PATH=/opt/mysql-proxy/sbin var to directory where mysql-proxy bin is located.

#!/bin/sh
#
# mysql-proxy This script starts and stops the mysql-proxy daemon
#
# chkconfig: – 78 30
# processname: mysql-proxy
# description: mysql-proxy is a proxy daemon to mysql

# Source function library.
. /etc/rc.d/init.d/functions

PROXY_PATH=/opt/mysql-proxy/sbin

prog=”mysql-proxy”

# Source networking configuration.
. /etc/sysconfig/network

# Check that networking is up.
[ ${NETWORKING} = "no" ] && exit 0

# Set default mysql-proxy configuration.
PROXY_OPTIONS=”–daemon”
PROXY_PID=/var/run/mysql-proxy.pid

# Source mysql-proxy configuration.
if [ -f /etc/sysconfig/mysql-proxy ] ; then
        . /etc/sysconfig/mysql-proxy
fi

PATH=$PATH:/usr/bin:/usr/local/bin:$PROXY_PATH

# By default it’s all good
RETVAL=0

# See how we were called.
case “$1″ in
  start)
        # Start daemon.
        echo -n $”Starting $prog: ”
        daemon $NICELEVEL $PROXY_PATH/mysql-proxy $PROXY_OPTIONS –pid-file $PROXY_PID
        RETVAL=$?
        echo
        if [ $RETVAL = 0 ]; then
                touch /var/lock/subsys/mysql-proxy
        fi
        ;;
  stop)
        # Stop daemons.
        echo -n $”Stopping $prog: ”
        killproc $prog
        RETVAL=$?
        echo
        if [ $RETVAL = 0 ]; then
                rm -f /var/lock/subsys/mysql-proxy
                rm -f $PROXY_PID
        fi
        ;;
  restart)
        $0 stop
        sleep 3
        $0 start
        ;;
  condrestart)
       [ -e /var/lock/subsys/mysql-proxy ] && $0 restart
       ;;
  status)
        status mysql-proxy
        RETVAL=$?
        ;;
  *)
        echo “Usage: $0 {start|stop|restart|status|condrestart}”
        RETVAL=1
        ;;
esac

exit $RETVAL
[edit] /etc/sysconfig/mysql-proxy
Here you set mysql-proxy parameters

# Options to mysql-proxy
# do not remove –daemon
PROXY_OPTIONS=”–daemon”

No Comments

编译lua报错luaconf.h:275:31: error: readline/readline.h: No such file or directory

wget ftp://ftp.cwru.edu/pub/bash/readline-6.1.tar.gz

tar -zxvf readline-6.1.tar.gz

cd ~~ ./configure && make && make install

ldconfig

回到lua里面make linux ;搞定!

No Comments

设置mysql slave Master_Log_File

mysql> show master status;
+—————+———-+————————————————————+——————+
| File          | Position | Binlog_Do_DB                                               | Binlog_Ignore_DB |
+—————+———-+————————————————————+——————+
| binlog.000003 |      107 | HGGJDATAS01,HGGJDATAS02,HGGJDATAS03,HGGJDATAS04,HGGJGLOBAL |                  |
+—————+———-+————————————————————+——————+
1 row in set (0.00 sec)

file在0003 pos是107

在slave机器上

CHANGE master TO master_host=’db01′, master_port=3306, master_user=’root’, master_password=’dhgatefactory’, master_log_file=’binlog.000003′, master_log_pos=107;

如果以前启动过slave可以先stop slave;然后执行完了start slave;

最后用show slave status;看一下如何

用phpmyadmin看一下

Slave_IO_State Waiting for master to send event

基本上就OK~~

No Comments

网络IP地址算法’/’ 的用法

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

依此类推!

No Comments

Tokyo Cabinet及Tokyo Tyrant tcb tch 类型差异

  TC(Tokyo Cabinet )是日本人 平林幹雄 开发的一款 Key-Value 键值数据库,该数据库读写非常快,哈希模式写入100万条数据只需0.402秒,读取100万条数据只需0.334秒。

  TT(Tokyo Tyrant )是由同一作者开发的 Tokyo Cabinet 数据库网络接口。它拥有自己的协议,并支持Memcached兼容协议,也可以通过HTTP协议进行数据交换。哈希数据库读写速度大约在50000次/秒。

  TC和TT目前运行在日本最大的SNS网站MIXI,在国内也有大量的生产环境应用。 Read the rest of this entry »

No Comments

xhprof 安装

编译安装

获取源代码包
root@sourcjoy>wget http://pecl.php.net/get/xhprof-0.9.2.tgz
解压
root@sourcjoy>tar zxf xhprof-0.9.2.tgz
root@sourcjoy>cd xhprof-0.9.2
复制web访问目录到web应用目录
root@sourcjoy>cp -r xhprof_html xhprof_lib /var/www/html/ #复制xhprof的展示页面目录和库目录到web目录下,可以为xhprof_html建个虚拟目录来访问,也可以把这两个目录拷贝到应用的根目录下。
root@sourcjoy>cd extension/
编译插件
root@sourcjoy>/usr/local/webserver/php/bin/phpize
root@sourcjoy>./configure –with-php-config=/usr/local/webserver/php/bin/php-config
root@sourcjoy>make
root@sourcjoy>make install

注意:这里安装的时候可能会出现访问php.ini没权限的问题,请把php.ini的权限改成666:
chmod 666 /usr/local/webserver/php/etc/php.ini

配置 php.ini 文件
root@sourcjoy>vi /usr/local/webserver/php/etc/php.ini在合适位置加入以下内容:

[xhprof]
extension=xhprof.so;
; directory used by default implementation of the iXHProfRuns
; interface (namely, the XHProfRuns_Default class) for storing
; XHProf runs.
;
;xhprof.output_dir=xhprof.output_dir=/var/logs/xhprof

重启web服务器

为了更加清晰显示程序执行、调用结构,安装Graphviz,如果安装了Graphviz,XHProf会用比较牛的图形方式展现统计数据。
获取源码包
root@sourcjoy>wget http://www.graphviz.org/pub/graphviz/stable/SOURCES/graphviz-2.24.0.tar.gz
root@sourcjoy>tar zxf graphviz-2.24.0.tar.gz
root@sourcjoy>cd graphviz-2.24.0
编译安装
root@sourcjoy>./configure
root@sourcjoy>make
root@sourcjoy>make install

接下来在要统计的php应用中加入以下语句:
xhprof_enable(); //统计的代码部分之前加,如果要显示CPU占用 可以加入XHPROF_FLAGS_CPU参数,内存是XHPROF_FLAGS_MEMORY,如果两个一起:XHPROF_FLAGS_CPU + XHPROF_FLAGS_MEMORY,如:xhprof_enable(XHPROF_FLAGS_CPU + XHPROF_FLAGS_MEMORY);

xhprof_disable();//统计的代码部分之后加

这样xhprof就可以统计当前页面的函数性能情况了。xhprof会把每次访问加入统计代码的页面的性能统计结果在指定目录下生成一个文件,文件名命名方式为:本次访问的系统ID.命名空间,每次刷新页面都会重新生成一个文件,每个的系统ID都不同。

然后通过xhprof_html目录的http访问url来查看结果。如:http://app/xhprof_html/?run=运行id&source=命名空间(其中运行ID和命名空间可以根据xhprof生成的文件名来确定)

下面是个例子:

function a(){
echo 'a';
}
xhprof_enable(XHPROF_FLAGS_CPU + XHPROF_FLAGS_MEMORY); //XHPROF_FLAGS_CPU + XHPROF_FLAGS_MEMORY
// run program
a();
// stop profiler
$xhprof_data = xhprof_disable(); //返回运行数据

// 下面是保存运行数据
include_once "xhprof_lib/utils/xhprof_lib.php";
include_once "xhprof_lib/utils/xhprof_runs.php";

$xhprof_runs = new XHProfRuns_Default();

$run_id = $xhprof_runs->save_run($xhprof_data, “sourcejoy”); //第一个参数是 xhprof_disable()函数返回的运行信息,第二个参数是自定义的命名空间字符串(任意字符串),返回运行ID。
?>

名词:
1. Inclusive Time :包括子函数所有执行时间。
2. Exclusive Time/Self Time:函数执行本身花费的时间,不包括子树执行时间。
3. Wall Time:花去了的时间或挂钟时间。
4. CPU Time:用户耗的时间+内核耗的时间
5.Inclusive CPU:包括子函数一起所占用的CPU
6.Exclusive CPU:函数自身所占用的CPU

最后要说点,这个xhprof程序有点小bug,还不支持php5.2一下的版本,不过这都是小问题,关键是能直观告诉我们程序的性能问题,这个很重要,我们自己开发程序的时候用这个进行性能检查是很不错的。

-END-

No Comments

ttserver 启动指令

/usr/local/bin/ttserver -host 192.168.1.170 -port 11811 -thnum 8 -dmn -pid /data/ttserver/ttserver.pid -log /data/ttserver/ttserver.log -le -ulog /data/ttserver/ -ulim 128m -sid 1 -rts /data/ttserver/ttserver.rts /data/ttserver/database.tch#bnum=10000000#xmsiz=434217728#rcnum=20000

启动了文本hash模式 400M的缓冲内存

No Comments

ssh配置信任关系脚本

#!/bin/bash
#for 249 login others with no passwd
#by shao

for i in $@

do 

if [ ! -f /root/.ssh/id_dsa.pub ];then
    ssh-keygen -t dsa
fi

scp /root/.ssh/id_dsa.pub root@10.10.$i:/tmp/
echo "copied"
ssh -l root root@10.10.$i " [ -e /root/.ssh ] || mkdir /root/.ssh"
ssh -l root root@10.10.$i "cat /tmp/id_dsa.pub >> /root/.ssh/authorized_keys"
echo "attaphed"
echo "10.10.$i is done!"
ssh -l root root@10.10.$i "rm -f  /tmp/id_dsa.pub"
done

No Comments