2009年1月28日 星期三

坐騎巨集

http://wowbox.tw/bbs/viewtopic.php?f=57&t=13375
/跑 local m=GetZoneText() if (m=="達拉然" or m=="冬握湖"or m=="奧核之眼") and (GetSubZoneText()~="卡薩斯平臺") then CallCompanion("mount",45);end
/使用 [swimming]水棲形態;[flyable,nomounted]迅捷飛行形態; [nomounted]大型白色科多獸
/dismount [mounted]

這是目前我在使用的坐騎巨集。

一、在達拉然、冬握湖等不能用飛行坐騎的地方,會自動使用 CallCompanion("mount",45) 的坐騎。※紅色的45是坐騎頁面中第45隻坐騎,玩家可以自行改成自己喜歡的陸地坐騎編號。
二、在可以飛的地方,會自動用迅捷飛行形態。(可以改成自己愛用的飛行座騎)
三、在不能飛的艾澤拉斯,則用大型白色科多獸。(可以改成自己愛用陸地座騎)
四、非小德玩家,請把「[swimming]水棲形態;」刪除,程式改為:

/跑 local m=GetZoneText() if (m=="達拉然" or m=="冬握湖"or m=="奧核之眼") and (GetSubZoneText()~="卡薩斯平臺") then CallCompanion("mount",45);end
/使用 [flyable,nomounted]迅捷飛行形態; [nomounted]大型白色科多獸
/dismount [mounted]

2009年1月22日 星期四

cron job for zip last 7 days files

1. set schedule for run cronjob every hr
crontab -e

0 */1 * * * (. archive.sh > archiveJob.log 2>&1)


2. prepare a job for backup and zip the file last 7 days ( not include today ! )

archive.sh

#!/bin/sh

logpath=/usr/local/jboss/server/default/log
fname=`echo a b c d e f g h`
bday=7

cd $logpath

echo -e "\n$logpath\n"

for (( i=$bday;i>=1;i=i-1 ))
do
ddate=`/bin/date +%Y-%m-%d -d -"$i"day`

if [ -e "$logpath"/server.log."$ddate" ]; then
gzip server.log."$ddate"
mv server.log."$ddate".gz archive/
echo server.log."$ddate" moved.
fi

for f in $fname
do
if [ -e "$logpath"/server.log."$ddate$f" ]; then
gzip server.log."$ddate$f"
mv server.log."$ddate$f".gz archive/
echo server.log."$ddate$f" moved.
fi
done

done

#cd /usr/local/jboss/bin
#sh run.sh &

echo -e "
----------------------------------------
Server Log Backup and Archive Finished.
----------------------------------------
"

2009年1月13日 星期二

Changing the default message/header encoding

http://atmail.com/kb/2006/changing-the-default-messageheader-encoding/

@Mail uses a strict header parsing for displaying messages via Webmail. Encoding issues can occur if messages are received by @Mail without specifying the encoding of the message or headers.For example, a user sending Thai or characters with accents in the Subject header without specifying the character-set can cause rendering problems ( e.g TIS-620 for Thai, iso-8859-1 for normal latin characters )


The Iconv library used by @Mail converts all messages & headers to UTF-8 to be displayed via Webmail. This allows @Mail to display messages from any charset within the browser.

A sample subject header that contains “Message with åäöÅÄÖ”

The correct encoding for the header is:

Subject: =?ISO-8859-1?Q?Message with =E5=E4=F6=C5=C4=D6?=

An incorrect header is:

Subject: Message with åäöÅÄÖ

Where the characters are raw, but should be encoded into 7-bit as per the MIME RFC.

Some old legacy systems or misconfigured clients can send the message with the incorrect encoding.

Now comes the question: “How can @Mail be modified to correctly parse headers that are not correctly encoded?”


By modifying GetMail.pm & ReadMsg.pm, the two modules used to parse messages. The default encoding can be set to ISO-8859-1 if the header does not contain the correct encoding:


# Fix a header and take away unnessasary characters
sub quote_header {
my ( $self, $header ) = @_; $header =~ s{s*=?([^?]+)?[Qq]?([^?]+)??=}{$self->decode_language($1, $self->decode_mime_head ($1, $2)); }eg;

$header =~ s{s*=?([^?]+)?[Bb]?([^?]+)??=}{$self->decode_language($1, $self->generic_base64_decode ($2));}eg;


Replace with:

# Fix a header and take away unnessasary characters
sub quote_header {
my ( $self, $header ) = @_;


if($header =~ /s*=?([^?]+)?[Qq]?([^?]+)??=/) {
$header =~ s{s*=?([^?]+)?[Qq]?([^?]+)??=}{$self->decode_language($1, $self->decode_mime_head ($1, $2)); }eg;
} elsif($header =~ /s*=?([^?]+)?[Bb]?([^?]+)??=/) {
$header =~ s{s*=?([^?]+)?[Bb]?([^?]+)??=}{$self->decode_language($1, $self->generic_base64_decode ($2));}eg;
} else {
$header = $self->decode_language(”iso-8859-1“, $header );
}


——————————


Then modify /usr/local/atmail/webmail/libs/Atmail/ReadMsg.pm and locate:


$self->{$_} =~ s{s*=?([^?]+)?[Qq]?([^?]+)??=}{$self->decode_language($self->{Encoding}, $self->decode_mime_head ($1, $2)); }eg;
$self->{$_} =~ s{s*=?([^?]+)?[Bb]?([^?]+)??=}{$self->decode_language($self->{Encoding}, $self->generic_base64_decode($2));}eg;


Change to:


# Check all encoding, use iso-8859-1 for default otherwise
if($self->{$_} =~ /s*=?([^?]+)?[Qq]?([^?]+)??=/ ) {
$self->{$_} =~ s{s*=?([^?]+)?[Qq]?([^?]+)??=}{$self->decode_language($self->{Encoding}, $self->decode_mime_head ($1, $2)); }eg;
} elsif($self->{$_} =~ /s*=?([^?]+)?[Bb]?([^?]+)??=/ ) {
$self->{$_} =~ s{s*=?([^?]+)?[Bb]?([^?]+)??=}{$self->decode_language($self->{Encoding}, $self->generic_base64_decode($2));}eg;
} else {
$self->{$_} = $self->decode_language(”iso-8859-1“, $self->{$_} );
}


——————————


After making the changes restart Apache to reload the mod-perl cache.


service httpd restart


2009年1月12日 星期一

MySQL數據庫如何實現雙機熱備的配置

來源:54master.com 作者:佚名



1。mysql數據庫沒有增量備份的機制,當數據量太大的時候備份是一個很大的問題。還好mysql數據庫提供了一種主從備份的機制,其實就是把主數據庫的所有的數據同時寫到備份數據庫中。實現mysql數據庫的熱備份。

2。要想實現雙機的熱備首先要了解主從數據庫服務器的版本的需求。要實現熱備mysql的版本都要高於3.2,還有一個基本的原則就是作為從數據庫的數據庫版本可以高於主服務器數據庫的版本,但是不可以低於主服務器的數據庫版本。

3。設置主數據庫服務器:

a.首先查看主服務器的版本是否是支持熱備的版本。然後查看my.cnf(類unix)或者my.ini(windows)中mysqld配置塊的配置有沒有log-bin(記錄數據庫更改日志),因為mysql的復制機制是基於日志的復制機制,所以主服務器一定要支持更改日志才行。然後設置要寫入日志的數據庫或者不要寫入日志的數據庫。這樣只有您感興趣的數據庫的更改才寫入到數據庫的日志中。


QUOTE:
server-id=1 //數據庫的id這個應該默認是1就不用改動
log-bin=log_name //日志文件的名稱,這裏可以制定日志到別的目錄 如果沒有設置則默認主機名的一個日志名稱
binlog-do-db=db_name //記錄日志的數據庫
binlog-ignore-db=db_name //不記錄日志的數據庫

以上的如果有多個數據庫用","分割開

然後設置同步數據庫的用戶帳號
QUOTE:
mysql> GRANT REPLICATION SLAVE ON *.*
-> TO 'repl'@'%.mydomain.com' IDENTIFIED BY 'slavepass';

4.0.2以前的版本, 因為不支持REPLICATION 要使用下面的語句來實現這個功能
QUOTE:
mysql> GRANT FILE ON *.*
-> TO 'repl'@'%.mydomain.com' IDENTIFIED BY 'slavepass';

設置好主服務器的配置文件後重新啟動數據庫

b.鎖定現有的數據庫並備份現在的數據

鎖定數據庫
QUOTE:
mysql> FLUSH TABLES WITH READ LOCK;

備份數據庫有兩種辦法一種是直接進入到mysql的data目錄然後打包你需要備份數據庫的文件夾,第二種是使用mysqldump的方式來備份數據庫但是要加上"--master-data " 這個參數,建議使用第一種方法來備份數據庫

c.查看主服務器的狀態
QUOTE:
mysql> show master status\G;
+---------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+---------------+----------+--------------+------------------+
| mysql-bin.003 | 73 | test | manual,mysql |
+---------------+----------+--------------+------------------+

記錄File 和 Position 項目的值,以後要用的。

d.然後把數據庫的鎖定打開
QUOTE:
mysql> UNLOCK TABLES;

4。設置從服務器

a.首先設置數據庫的配置文件
QUOTE:
server-id=n //設置數據庫id默認主服務器是1可以隨便設置但是如果有多臺從服務器則不能重復。
master-host=db-master.mycompany.com //主服務器的IP地址或者域名
master-port=3306 //主數據庫的端口號
master-user=pertinax //同步數據庫的用戶
master-password=freitag //同步數據庫的密碼
master-connect-retry=60 //如果從服務器發現主服務器斷掉,重新連接的時間差
report-host=db-slave.mycompany.com //報告錯誤的服務器

b.把從主數據庫服務器備份出來的數據庫導入到從服務器中

c.然後啟動從數據庫服務器,如果啟動的時候沒有加上"--skip-slave-start"這個參數則進入到mysql中
QUOTE:
mysql> slave stop; //停止slave的服務

d.設置主服務器的各種參數
QUOTE:
mysql> CHANGE MASTER TO
-> MASTER_HOST='master_host_name', //主服務器的IP地址
-> MASTER_USER='replication_user_name', //同步數據庫的用戶
-> MASTER_PASSWORD='replication_password', //同步數據庫的密碼
-> MASTER_LOG_FILE='recorded_log_file_name', //主服務器二進制日志的文件名(前面要求記住的參數)
-> MASTER_LOG_POS=recorded_log_position; //日志文件的開始位置(前面要求記住的參數)

e.啟動同步數據庫的線程
QUOTE:
mysql> slave start;

查看數據庫的同步情況吧。如果能夠成功同步那就恭喜了!

查看主從服務器的狀態
QUOTE:
mysql> SHOW PROCESSLIST\G //可以查看mysql的進程看看是否有監聽的進程

如果日志太大清除日志的步驟如下

1.鎖定主數據庫
QUOTE:
mysql> FLUSH TABLES WITH READ LOCK;

2.停掉從數據庫的slave
QUOTE:
mysql> slave stop;

3.查看主數據庫的日志文件名和日志文件的position
QUOTE:
show master status;
+---------------+----------+--------------+------------------+
| File | Position | Binlog_do_db | Binlog_ignore_db |
+---------------+----------+--------------+------------------+
| louis-bin.001 | 79 | | mysql |
+---------------+----------+--------------+------------------+

4.解開主數據庫的鎖
QUOTE:
mysql> unlock tables;

5.更新從數據庫中主數據庫的信息
QUOTE:
mysql> CHANGE MASTER TO
-> MASTER_HOST='master_host_name', //主服務器的IP地址
-> MASTER_USER='replication_user_name', //同步數據庫的用戶
-> MASTER_PASSWORD='replication_password', //同步數據庫的密碼
-> MASTER_LOG_FILE='recorded_log_file_name', //主服務器二進制日志的文件名(前面要求記住的參數)
-> MASTER_LOG_POS=recorded_log_position; //日志文件的開始位置(前面要求記住的參數)

6.啟動從數據庫的slave
QUOTE:
mysql> slave start;