为什么thinkpad T61会发现吱吧电流声[zt]

一台THINKPAD T61笔记本电脑单击用电池使用电脑时,在主板和电池接口的附近会发出吱吱电流声请问这是怎么回事呀?

THINKPAD T61笔记本电脑的CPU在默认状态下是可以变频的,所以当笔记本电脑使用电池时,为了发挥省电效能,CPU会降频运行,而在CPU与WINDOWS操作系统产生大量数据交换的时候,CPU会自动升高主频来完成加速任务,在完成后CPU会自动升高主频来加速完成任务,在完成后CPU会自动降回省电的频率运行,而这一高一低的来回切换频,造成笔记本电脑发出吧吧电流声,是正常的现象,所以要解决该问题,只要在主板BIOS设置中将CPU频率调节到始终使用最高,问题就可以解决,具体方法如下:启动计算机,进入主板BIOS设置,选择CONFIG-POWER-CPU POWER MANAGEMENT –AUTOMATIC将其值改为DISABLE,保存退出主板BIOS设置,问题就可以解决了。

PS:还没尝试过,还有人建议禁用USB接口的节电功能。目前有效果的是,移除底部的散热加,放平笔记本电流声就减少明显。

Add comment 三月 7th, 2010 东木

awk中使用单引号

看了一个帖子,是说明,如何在awk中使用单引号的,并举了一个例子,原文如下:

awk 中插入单引号需要转义,但是并不是想象中的那么简单。有点周折,发出来和大家共享。

awk ‘{print “INSERT INTO TABLE_NAME (COL1,COL2) VALUES (““’\’’“ $1 “’\’’“ “,“ “’\’’“ $2 “’\’’“ “)“ }’ DATA_FILE >abc.sql

其实,这是比较糟糕的方式,awk的单引号可以用\47 表示,原文中的例子可为:

awk ‘{print “INSERT INTO TABLE_NAME (COL1,COL2) VALUES (\47“$1“\47,\47“$2“\47);“ }‘ DATA_FILE >abc.sql

顺便说一句,原文中所使用的sql语句在“)”后面没有加“;”号,这会有问题的。

Add comment 三月 4th, 2010 东木

MySQL分区(Partition)功能试验

[概述]
[分区表和未分区表试验过程]
[分区命令详解]

[概述]

自5.1开始对分区(Partition)有支持,6.0应比较稳定

= 水平分区(根据列属性按行分)=
举个简单例子:一个包含十年发票记录的表可以被分区为十个不同的分区,每个分区包含的是其中一年的记录。

=== 水平分区的几种模式:===
* Range(范围) – 这种模式允许DBA将数据划分不同范围。例如DBA可以将一个表通过年份划分成三个分区,80年代(1980’s)的数据,90年代(1990’s)的数据以及任何在2000年(包括2000年)后的数据。

* Hash(哈希) – 这中模式允许DBA通过对表的一个或多个列的Hash Key进行计算,最后通过这个Hash码不同数值对应的数据区域进行分区,。例如DBA可以建立一个对表主键进行分区的表。

* Key(键值) – 上面Hash模式的一种延伸,这里的Hash Key是MySQL系统产生的。

* List(预定义列表) – 这种模式允许系统通过DBA定义的列表的值所对应的行数据进行分割。例如:DBA建立了一个横跨三个分区的表,分别根据2004年2005年和2006年值所对应的数据。

* Composite(复合模式) – 很神秘吧,哈哈,其实是以上模式的组合使用而已,就不解释了。举例:在初始化已经进行了Range范围分区的表上,我们可以对其中一个分区再进行hash哈希分区。

= 垂直分区(按列分)=
举个简单例子:一个包含了大text和BLOB列的表,这些text和BLOB列又不经常被访问,这时候就要把这些不经常使用的text和BLOB了划分到另一个分区,在保证它们数据相关性的同时还能提高访问速度。

[分区表和未分区表试验过程]

*创建分区表,按日期的年份拆分
mysql> CREATE TABLE part_tab ( c1 int default NULL, c2 varchar(30) default NULL, c3 date default NULL) engine=myisam
PARTITION BY RANGE (year(c3)) (PARTITION p0 VALUES LESS THAN (1995),
PARTITION p1 VALUES LESS THAN (1996) , PARTITION p2 VALUES LESS THAN (1997) ,
PARTITION p3 VALUES LESS THAN (1998) , PARTITION p4 VALUES LESS THAN (1999) ,
PARTITION p5 VALUES LESS THAN (2000) , PARTITION p6 VALUES LESS THAN (2001) ,
PARTITION p7 VALUES LESS THAN (2002) , PARTITION p8 VALUES LESS THAN (2003) ,
PARTITION p9 VALUES LESS THAN (2004) , PARTITION p10 VALUES LESS THAN (2010),
PARTITION p11 VALUES LESS THAN MAXVALUE );
注意最后一行,考虑到可能的最大值

*创建未分区表
mysql> create table no_part_tab (c1 int(11) default NULL,c2 varchar(30) default NULL,c3 date default NULL) engine=myisam;

*通过存储过程灌入800万条测试数据

mysql> set sql_mode=”; /* 如果创建存储过程失败,则先需设置此变量, bug? */

mysql> delimiter // /* 设定语句终结符为 //,因存储过程语句用;结束 */
mysql> CREATE PROCEDURE load_part_tab()
begin
declare v int default 0;
while v < 8000000
do
insert into part_tab
values (v,'testing partitions',adddate('1995-01-01',(rand(v)*36520) mod 3652));
set v = v + 1;
end while;
end
//
mysql> delimiter ;
mysql> call load_part_tab();
Query OK, 1 row affected (8 min 17.75 sec)
mysql> insert into no_part_tab select * from part_tab;
Query OK, 8000000 rows affected (51.59 sec)
Records: 8000000 Duplicates: 0 Warnings: 0

* 测试SQL性能
mysql> select count(*) from part_tab where c3 > date ‘1995-01-01′ and c3 < date '1995-12-31';
+----------+
| count(*) |
+----------+
| 795181 |
+----------+
1 row in set (0.55 sec)
mysql> select count(*) from no_part_tab where c3 > date ‘1995-01-01′ and c3 < date '1995-12-31';
+----------+
| count(*) |
+----------+
| 795181 |
+----------+
1 row in set (4.69 sec)
结果表明分区表比未分区表的执行时间少90%。

* 通过explain语句来分析执行情况
mysql > explain select count(*) from no_part_tab where c3 > date ‘1995-01-01′ and c3 < date '1995-12-31'\G
/* 结尾的\G使得mysql的输出改为列模式 */
*************************** 1. row ***************************
id: 1
select_type: SIMPLE
table: no_part_tab
type: ALL
possible_keys: NULL
key: NULL
key_len: NULL
ref: NULL
rows: 8000000
Extra: Using where
1 row in set (0.00 sec)

mysql> explain select count(*) from part_tab where c3 > date ‘1995-01-01′ and c3 < date '1995-12-31'\G
*************************** 1. row ***************************
id: 1
select_type: SIMPLE
table: part_tab
type: ALL
possible_keys: NULL
key: NULL
key_len: NULL
ref: NULL
rows: 798458
Extra: Using where
1 row in set (0.00 sec)
explain语句显示了SQL查询要处理的记录数目

* 试验创建索引后情况
mysql> create index idx_of_c3 on no_part_tab (c3);
Query OK, 8000000 rows affected (1 min 18.08 sec)
Records: 8000000 Duplicates: 0 Warnings: 0

mysql> create index idx_of_c3 on part_tab (c3);
Query OK, 8000000 rows affected (1 min 19.19 sec)
Records: 8000000 Duplicates: 0 Warnings: 0
创建索引后的数据库文件大小列表:
2008-05-24 09:23 8,608 no_part_tab.frm
2008-05-24 09:24 255,999,996 no_part_tab.MYD
2008-05-24 09:24 81,611,776 no_part_tab.MYI
2008-05-24 09:25 0 part_tab#P#p0.MYD
2008-05-24 09:26 1,024 part_tab#P#p0.MYI
2008-05-24 09:26 25,550,656 part_tab#P#p1.MYD
2008-05-24 09:26 8,148,992 part_tab#P#p1.MYI
2008-05-24 09:26 25,620,192 part_tab#P#p10.MYD
2008-05-24 09:26 8,170,496 part_tab#P#p10.MYI
2008-05-24 09:25 0 part_tab#P#p11.MYD
2008-05-24 09:26 1,024 part_tab#P#p11.MYI
2008-05-24 09:26 25,656,512 part_tab#P#p2.MYD
2008-05-24 09:26 8,181,760 part_tab#P#p2.MYI
2008-05-24 09:26 25,586,880 part_tab#P#p3.MYD
2008-05-24 09:26 8,160,256 part_tab#P#p3.MYI
2008-05-24 09:26 25,585,696 part_tab#P#p4.MYD
2008-05-24 09:26 8,159,232 part_tab#P#p4.MYI
2008-05-24 09:26 25,585,216 part_tab#P#p5.MYD
2008-05-24 09:26 8,159,232 part_tab#P#p5.MYI
2008-05-24 09:26 25,655,740 part_tab#P#p6.MYD
2008-05-24 09:26 8,181,760 part_tab#P#p6.MYI
2008-05-24 09:26 25,586,528 part_tab#P#p7.MYD
2008-05-24 09:26 8,160,256 part_tab#P#p7.MYI
2008-05-24 09:26 25,586,752 part_tab#P#p8.MYD
2008-05-24 09:26 8,160,256 part_tab#P#p8.MYI
2008-05-24 09:26 25,585,824 part_tab#P#p9.MYD
2008-05-24 09:26 8,159,232 part_tab#P#p9.MYI
2008-05-24 09:25 8,608 part_tab.frm
2008-05-24 09:25 68 part_tab.par

* 再次测试SQL性能
mysql> select count(*) from no_part_tab where c3 > date ‘1995-01-01′ and c3 < date '1995-12-31'; +----------+
| count(*) |
+----------+
| 795181 |
+----------+
1 row in set (2.42 sec) /* 为原来4.69 sec 的51%*/
重启mysql ( net stop mysql, net start mysql)后,查询时间降为0.89 sec,几乎与分区表相同。

mysql> select count(*) from part_tab where c3 > date ‘1995-01-01′ and c3 < date '1995-12-31';
+----------+
| count(*) |
+----------+
| 795181 |
+----------+
1 row in set (0.86 sec)

* 更进一步的试验
** 增加日期范围
mysql> select count(*) from no_part_tab where c3 > date ‘1995-01-01′ and c3 < date '1997-12-31';
+----------+
| count(*) |
+----------+
| 2396524 |
+----------+
1 row in set (5.42 sec)

mysql> select count(*) from part_tab where c3 > date ‘1995-01-01′ and c3 < date '1997-12-31';
+----------+
| count(*) |
+----------+
| 2396524 |
+----------+
1 row in set (2.63 sec)
** 增加未索引字段查询
mysql> select count(*) from part_tab where c3 > date ‘1995-01-01′ and c3 < date
'1996-12-31' and c2='hello';
+----------+
| count(*) |
+----------+
| 0 |
+----------+
1 row in set (0.75 sec)

mysql> select count(*) from no_part_tab where c3 > date ‘1995-01-01′ and c3 < da
te '1996-12-31' and c2='hello';
+----------+
| count(*) |
+----------+
| 0 |
+----------+
1 row in set (11.52 sec)

= 初步结论 =
* 分区和未分区占用文件空间大致相同 (数据和索引文件)
* 如果查询语句中有未建立索引字段,分区时间远远优于未分区时间
* 如果查询语句中字段建立了索引,分区和未分区的差别缩小,分区略优于未分区。

= 最终结论 =
* 对于大数据量,建议使用分区功能。
* 去除不必要的字段
* 根据手册, 增加myisam_max_sort_file_size 会增加分区性能

[分区命令详解]

= 分区例子 =
* RANGE 类型

CREATE TABLE users (
uid INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(30) NOT NULL DEFAULT '',
email VARCHAR(30) NOT NULL DEFAULT ''
)
PARTITION BY RANGE (uid) (
PARTITION p0 VALUES LESS THAN (3000000)
DATA DIRECTORY = '/data0/data'
INDEX DIRECTORY = '/data1/idx',

PARTITION p1 VALUES LESS THAN (6000000)
DATA DIRECTORY = '/data2/data'
INDEX DIRECTORY = '/data3/idx',

PARTITION p2 VALUES LESS THAN (9000000)
DATA DIRECTORY = '/data4/data'
INDEX DIRECTORY = '/data5/idx',

PARTITION p3 VALUES LESS THAN MAXVALUE DATA DIRECTORY = '/data6/data'
INDEX DIRECTORY = '/data7/idx'
);

在这里,将用户表分成4个分区,以每300万条记录为界限,每个分区都有自己独立的数据、索引文件的存放目录,与此同时,这些目录所在的物理磁盘分区可能也都是完全独立的,可以提高磁盘IO吞吐量。

* LIST 类型

CREATE TABLE category (
cid INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(30) NOT NULL DEFAULT ''
)
PARTITION BY LIST (cid) (
PARTITION p0 VALUES IN (0,4,8,12)
DATA DIRECTORY = '/data0/data'
INDEX DIRECTORY = '/data1/idx',

PARTITION p1 VALUES IN (1,5,9,13)
DATA DIRECTORY = '/data2/data'
INDEX DIRECTORY = '/data3/idx',

PARTITION p2 VALUES IN (2,6,10,14)
DATA DIRECTORY = '/data4/data'
INDEX DIRECTORY = '/data5/idx',

PARTITION p3 VALUES IN (3,7,11,15)
DATA DIRECTORY = '/data6/data'
INDEX DIRECTORY = '/data7/idx'
);

分成4个区,数据文件和索引文件单独存放。

* HASH 类型
CREATE TABLE users (
uid INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(30) NOT NULL DEFAULT '',
email VARCHAR(30) NOT NULL DEFAULT ''
)
PARTITION BY HASH (uid) PARTITIONS 4 (
PARTITION p0
DATA DIRECTORY = '/data0/data'
INDEX DIRECTORY = '/data1/idx',

PARTITION p1
DATA DIRECTORY = '/data2/data'
INDEX DIRECTORY = '/data3/idx',

PARTITION p2
DATA DIRECTORY = '/data4/data'
INDEX DIRECTORY = '/data5/idx',

PARTITION p3
DATA DIRECTORY = '/data6/data'
INDEX DIRECTORY = '/data7/idx'
);
分成4个区,数据文件和索引文件单独存放。

例子:
CREATE TABLE ti2 (id INT, amount DECIMAL(7,2), tr_date DATE)
ENGINE=myisam
PARTITION BY HASH( MONTH(tr_date) )
PARTITIONS 6;

CREATE PROCEDURE load_ti2()
begin
declare v int default 0;
while v < 80000
do
insert into ti2
values (v,'3.14',adddate('1995-01-01',(rand(v)*3652) mod 365));
set v = v + 1;
end while;
end
//

* KEY 类型
CREATE TABLE users (
uid INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(30) NOT NULL DEFAULT '',
email VARCHAR(30) NOT NULL DEFAULT ''
)
PARTITION BY KEY (uid) PARTITIONS 4 (
PARTITION p0
DATA DIRECTORY = '/data0/data'
INDEX DIRECTORY = '/data1/idx',

PARTITION p1
DATA DIRECTORY = '/data2/data'
INDEX DIRECTORY = '/data3/idx',

PARTITION p2
DATA DIRECTORY = '/data4/data'
INDEX DIRECTORY = '/data5/idx',

PARTITION p3
DATA DIRECTORY = '/data6/data'
INDEX DIRECTORY = '/data7/idx'
);
分成4个区,数据文件和索引文件单独存放。

* 子分区
子分区是针对 RANGE/LIST 类型的分区表中每个分区的再次分割。再次分割可以是 HASH/KEY 等类型。例如:
CREATE TABLE users (
uid INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(30) NOT NULL DEFAULT '',
email VARCHAR(30) NOT NULL DEFAULT ''
)
PARTITION BY RANGE (uid) SUBPARTITION BY HASH (uid % 4) SUBPARTITIONS 2(
PARTITION p0 VALUES LESS THAN (3000000)
DATA DIRECTORY = '/data0/data'
INDEX DIRECTORY = '/data1/idx',

PARTITION p1 VALUES LESS THAN (6000000)
DATA DIRECTORY = '/data2/data'
INDEX DIRECTORY = '/data3/idx'
);

对 RANGE 分区再次进行子分区划分,子分区采用 HASH 类型。

或者

CREATE TABLE users (
uid INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(30) NOT NULL DEFAULT '',
email VARCHAR(30) NOT NULL DEFAULT ''
)
PARTITION BY RANGE (uid) SUBPARTITION BY KEY(uid) SUBPARTITIONS 2(
PARTITION p0 VALUES LESS THAN (3000000)
DATA DIRECTORY = '/data0/data'
INDEX DIRECTORY = '/data1/idx',

PARTITION p1 VALUES LESS THAN (6000000)
DATA DIRECTORY = '/data2/data'
INDEX DIRECTORY = '/data3/idx'
);

对 RANGE 分区再次进行子分区划分,子分区采用 KEY 类型。

= 分区管理 =

* 删除分区

ALERT TABLE users DROP PARTITION p0;

删除分区 p0。
* 重建分区
o RANGE 分区重建

ALTER TABLE users REORGANIZE PARTITION p0,p1 INTO (PARTITION p0 VALUES LESS THAN (6000000));

将原来的 p0,p1 分区合并起来,放到新的 p0 分区中。
o LIST 分区重建

ALTER TABLE users REORGANIZE PARTITION p0,p1 INTO (PARTITION p0 VALUES IN(0,1,4,5,8,9,12,13));

将原来的 p0,p1 分区合并起来,放到新的 p0 分区中。
o HASH/KEY 分区重建

ALTER TABLE users REORGANIZE PARTITION COALESCE PARTITION 2;

用 REORGANIZE 方式重建分区的数量变成2,在这里数量只能减少不能增加。想要增加可以用 ADD PARTITION 方法。
* 新增分区
o 新增 RANGE 分区

ALTER TABLE category ADD PARTITION (PARTITION p4 VALUES IN (16,17,18,19)
DATA DIRECTORY = '/data8/data'
INDEX DIRECTORY = '/data9/idx');

新增一个RANGE分区。
o 新增 HASH/KEY 分区

ALTER TABLE users ADD PARTITION PARTITIONS 8;

将分区总数扩展到8个。

[ 给已有的表加上分区 ]

alter table results partition by RANGE (month(ttime))
(PARTITION p0 VALUES LESS THAN (1),
PARTITION p1 VALUES LESS THAN (2) , PARTITION p2 VALUES LESS THAN (3) ,
PARTITION p3 VALUES LESS THAN (4) , PARTITION p4 VALUES LESS THAN (5) ,
PARTITION p5 VALUES LESS THAN (6) , PARTITION p6 VALUES LESS THAN (7) ,
PARTITION p7 VALUES LESS THAN (8) , PARTITION p8 VALUES LESS THAN (9) ,
PARTITION p9 VALUES LESS THAN (10) , PARTITION p10 VALUES LESS THAN (11),
PARTITION p11 VALUES LESS THAN (12),
PARTITION P12 VALUES LESS THAN (13) );

默认分区限制分区字段必须是主键(PRIMARY KEY)的一部分,为了去除此
限制:
[方法1] 使用ID
mysql> ALTER TABLE np_pk
-> PARTITION BY HASH( TO_DAYS(added) )
-> PARTITIONS 4;
ERROR 1503 (HY000): A PRIMARY KEY must include all columns in the table’s partitioning function

However, this statement using the id column for the partitioning column is valid, as shown here:

mysql> ALTER TABLE np_pk
-> PARTITION BY HASH(id)
-> PARTITIONS 4;
Query OK, 0 rows affected (0.11 sec)
Records: 0 Duplicates: 0 Warnings: 0

[方法2] 将原有PK去掉生成新PK
mysql> alter table results drop PRIMARY KEY;
Query OK, 5374850 rows affected (7 min 4.05 sec)
Records: 5374850 Duplicates: 0 Warnings: 0

mysql> alter table results add PRIMARY KEY(id, ttime);
Query OK, 5374850 rows affected (6 min 14.86 sec)
Records: 5374850 Duplicates: 0 Warnings: 0

Add comment 三月 2nd, 2010 东木

EXCEL导入网页表格时把
换成单元格内部的换行

每次遇到网页表格单元格内部的换行,EXCEL自动把它变成另外一行,这使人非常郁闷,解决方法如下:

先按文本的方式放入一个单元格里,即
显示出来:123
456这样的字符串录入进去。
之后用ALT+10替换掉
即可完成换行。

当然,你可以使用更加个性化的标识来替代
做前期的录入。

Add comment 二月 24th, 2010 东木

解决mysql–Can’t get stat of ” (Errcode: 13)

mysql错误提示:
mysql> ERROR 13 (HY000): Can’t get stat of ‘/root/aaa’ (Errcode: 13)

目录权限问题,将/root/aaa的父子两层目录均设为777就可以了。

Add comment 二月 24th, 2010 东木

mysql存储过程错误代码1307,”Failed to create procedure …”

将mysql数据库中的表proc删除,或者改名

执行以下代码重建该表
————————————————————————
CREATE TABLE `proc` (
`db` char(64) character set utf8 collate utf8_bin NOT NULL default ”,
`name` char(64) NOT NULL default ”,
`type` enum(‘FUNCTION’,'PROCEDURE’) NOT NULL,
`specific_name` char(64) NOT NULL default ”,
`language` enum(‘SQL’) NOT NULL default ‘SQL’,
`sql_data_access` enum(‘CONTAINS_SQL’,'NO_SQL’,'READS_SQL_DATA’,'MODIFIES_SQL_DATA’) NOT NULL default ‘CONTAINS_SQL’,
`is_deterministic` enum(‘YES’,'NO’) NOT NULL default ‘NO’,
`security_type` enum(‘INVOKER’,'DEFINER’) NOT NULL default ‘DEFINER’,
`param_list` blob NOT NULL,
`returns` char(64) NOT NULL default ”,
`body` longblob NOT NULL,
`definer` char(77) character set utf8 collate utf8_bin NOT NULL default ”,
`created` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
`modified` timestamp NOT NULL default ‘0000-00-00 00:00:00′,
`sql_mode` set(‘REAL_AS_FLOAT’,'PIPES_AS_CONCAT’,'ANSI_QUOTES’,'IGNORE_SPACE’,'NOT_USED’,'ONLY_FULL_GROUP_BY’,'NO_UNSIGNED_SUBTRACTION’,'NO_DIR_IN_CREATE’,'POSTGRESQL’,'ORACLE’,'MSSQL’,'DB2′,’MAXDB’,'NO_KEY_OPTIONS’,'NO_TABLE_OPTIONS’,'NO_FIELD_OPTIONS’,'GBASE80′,’GBASE81′,’ANSI’,'NO_AUTO_VALUE_ON_ZERO’,'NO_BACKSLASH_ESCAPES’,'STRICT_TRANS_TABLES’,'STRICT_ALL_TABLES’,'NO_ZERO_IN_DATE’,'NO_ZERO_DATE’,'INVALID_DATES’,'ERROR_FOR_DIVISION_BY_ZERO’,'TRADITIONAL’,'NO_AUTO_CREATE_USER’,'HIGH_NOT_PRECEDENCE’) NOT NULL default ”,
`comment` char(64) character set utf8 collate utf8_bin NOT NULL default ”,
`character_set_client` char(32) character set utf8 collate utf8_bin default NULL,
`collation_connection` char(32) character set utf8 collate utf8_bin default NULL,
`db_collation` char(32) character set utf8 collate utf8_bin default NULL,
`body_utf8` longblob,
PRIMARY KEY (`db`,`name`,`type`)
) DEFAULT CHARSET=utf8 COMMENT=’Stored Procedures’
========================================================================================
早期的该表结构如下:
—————————————————————————————
CREATE TABLE `proc` (
`db` char(64) character set utf8 collate utf8_bin NOT NULL default ”,
`name` char(64) NOT NULL default ”,
`type` enum(‘FUNCTION’,'PROCEDURE’) NOT NULL,
`specific_name` char(64) NOT NULL default ”,
`language` enum(‘SQL’) NOT NULL default ‘SQL’,
`sql_data_access` enum(‘CONTAINS_SQL’,'NO_SQL’,'READS_SQL_DATA’,'MODIFIES_SQL_DATA’) NOT NULL default ‘CONTAINS_SQL’,
`is_deterministic` enum(‘YES’,'NO’) NOT NULL default ‘NO’,
`security_type` enum(‘INVOKER’,'DEFINER’) NOT NULL default ‘DEFINER’,
`param_list` blob NOT NULL,
`returns` char(64) NOT NULL default ”,
`body` longblob NOT NULL,
`definer` char(77) character set utf8 collate utf8_bin NOT NULL default ”,
`created` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
`modified` timestamp NOT NULL default ‘0000-00-00 00:00:00′,
`sql_mode` set(‘REAL_AS_FLOAT’,'PIPES_AS_CONCAT’,'ANSI_QUOTES’,'IGNORE_SPACE’,'NOT_USED’,'ONLY_FULL_GROUP_BY’,'NO_UNSIGNED_SUBTRACTION’,'NO_DIR_IN_CREATE’,'POSTGRESQL’,'ORACLE’,'MSSQL’,'DB2′,’MAXDB’,'NO_KEY_OPTIONS’,'NO_TABLE_OPTIONS’,'NO_FIELD_OPTIONS’,'GBASE323′,’GBASE40′,’ANSI’,'NO_AUTO_VALUE_ON_ZERO’,'NO_BACKSLASH_ESCAPES’,'STRICT_TRANS_TABLES’,'STRICT_ALL_TABLES’,'NO_ZERO_IN_DATE’,'NO_ZERO_DATE’,'INVALID_DATES’,'ERROR_FOR_DIVISION_BY_ZERO’,'TRADITIONAL’,'NO_AUTO_CREATE_USER’,'HIGH_NOT_PRECEDENCE’) NOT NULL default ”,
`comment` char(64) character set utf8 collate utf8_bin NOT NULL default ”,
PRIMARY KEY (`db`,`name`,`type`)
) DEFAULT CHARSET=utf8 COMMENT=’Stored Procedures’

Add comment 二月 22nd, 2010 东木

CentOS 5.3上安装Apache+php+Mysql+phpMyAdmin

1、系统下载
CentOS 开发社区已发布了新的 5.3 版本。CentOS 5.3 基于 Red Hat Enterpris Linux 5.3.0,其中包括 Kernel 2.6.18、Apache 2.2、PHP 5.1.6、MySQL 5.0、PostgreSQL 8、GNOME 2.16、KDE 3.5、OpenOffice.org 2.3、Firefox 3.0、Evolution 2.12 等等。此外,CentOS 5.3 更新了美工设计,并根据用户的请求恢复了 Contrib 仓库。
CentOS 5.3 支持 i386 及 x86_64 架构,其 ISO 映像可从以下地址获取。
isoredirect.centos.org/centos/5
/isos/
2、系统安装
安装CentOS 5.3是做服务器,所以没有用的,一概不装;具体哪些不装,自己看着办吧:)
3、安装Apache+php+Mysql
a、 用yum安装前.先是替换为中国CentOS镜像服务器!中国官方镜像网站:

http://centos.ustc.edu.cn/

安装后请按照以下步骤修改CenOS-Base.repo,以后就可以方便的用yum安装软件了().
cd /etc/yum.repos.d
mv CentOS-Base.repo CentOS-Base.repo.save
wget

http://centos.ustc.edu.cn/CentOS-Base.repo.5

mv CentOS-Base.repo.5 CentOS-Base.repo
b、更新系统内核到最新. yum -y update
c、安装Apahce, PHP, Mysql, 以及php连接mysql库组件 yum -y install httpd php mysql mysql-server php-mysql
d、安装mysql扩展 yum -y install mysql-connector-odbc mysql-devel libdbi-dbd-mysql
或一次性粘贴安装:
yum -y install httpd php mysql mysql-server php-mysql httpd-manual mod_ssl mod_perl mod_auth_mysql php-mcrypt php-gd php-xml php-mbstring php-ldap php-pear php-xmlrpc mysql-connector-odbc mysql-devel libdbi-dbd-mysql
e、设置mysql数据库root帐号密码。
mysqladmin -u root password ‘newpassword’ [引号内填密码]
f、 让mysql数据库更安全
mysql -u root -p [此时会要求你输入刚刚设置的密码,输入后回车即可
mysql> DROP DATABASE test; [删除test数据库]
mysql> DELETE FROM mysql.user WHERE user = ”; [删除匿名帐户]
mysql> FLUSH PRIVILEGES; [重载权限]
g、 按照以上的安装方式, 配置出来的默认站点目录为/var/www/html/新建一个php脚本:
4、 配置防火墙
添加允许访问HTTP、FTP端口
iptables -I RH-Firewall-1-INPUT -m state –state NEW -m tcp -p tcp –dport 21 -j ACCEPT
iptables -I RH-Firewall-1-INPUT -m state –state NEW -m tcp -p tcp –dport 80 -j ACCEPT重启iptables: service iptables restart
5、安装phpMyAdmin
进入
phpMyAdmin
官方下载(不要最新版本,下phpMyAdmin 2.11.9.5就行了,3.1以上需php 5.2以上),上传到你的网站目录下,然后进行配置。只需几步即可搞定。
I. config.sample.inc.php更名为config.inc.php;
II. 打开config.inc.php文件,进行以下修改;
// $cfg['Servers'][$i]['controluser'] = ‘pma’;
// $cfg['Servers'][$i]['controlpass'] = ‘pmapass’;
// $cfg['Servers'][$i]['pmadb'] = ‘phpmyadmin’;
// $cfg['Servers'][$i]['bookmarktable'] = ‘pma_bookmark’;
// $cfg['Servers'][$i]['relation'] = ‘pma_relation’;
// $cfg['Servers'][$i]['table_info'] = ‘pma_table_info’;
// $cfg['Servers'][$i]['table_coords'] = ‘pma_table_coords’;
// $cfg['Servers'][$i]['pdf_pages'] = ‘pma_pdf_pages’;
// $cfg['Servers'][$i]['column_info'] = ‘pma_column_info’;
// $cfg['Servers'][$i]['history'] = ‘pma_history’;
// $cfg['Servers'][$i]['designer_coords'] = ‘pma_designer_coords’;
去掉每行前面的//;
II.$cfg['blowfish_secret'] = ”; |修改为| $cfg['blowfish_secret'] = ‘http’;
IV.$cfg['Servers'][$i]['controluser'] = ‘pma’; |把’pma’修改为你的帐号|$cfg['Servers'][$i]['controlpass'] = ‘pmapass’; |把’pmapass设置为你的mysql登录密码|
V. $cfg['blowfish_secret'] = ”; | 添加短语密码例如:$cfg['blowfish_secret'] = ‘onohot’;
6、//安装php的扩展
yum -y install php-gd php-xml php-mbstring php-ldap php-pear php-xmlrpc
7、//安装apache扩展
yum -y install httpd-manual mod_ssl mod_perl mod_auth_mysql
注:以上步骤是结合fengyihot’Blog,再根据本人实际改进的:)
8、所需工具下载
I.
FlashFXP
通过FlashFxp里的Sftp连接,直接连接到服务器上管理所有文件夹。
II.
putty
PuTTY 是一套免费的 SSH / Telnet 程序,它可以连接上支持 SSH Telnet 联机的站台,并且可自动取得对方的系统指纹码 (Fingerprint)。建立联机以后,所有的通讯内容都是以加密的方式传输,因此你再也不用害怕使用 Telnet 在 Internet 或公司的内部网络传输资料时被他人获知内容了!
II.
SecureCRT
SecureCRT是一款支持SSH(SSH1和SSH2)的终端仿真程序,同时支持Telnet和rlogin协议。SecureCRT是一款用于连接运行包括Windows、UNIX和VMS的远程系统的理想工具。通过使用内含的VCP命令行程序可以进行加密文件的传输。

Add comment 二月 21st, 2010 东木

error – expat.h: No such file or directory

While trying to get a perl utility working, I had to install a bunch of prerequisite perl modules on my CentOS 5 VPS. One requirement was XML::Parser. However when I tried to install it like so:

[root@localhost]perl -MCPAN -e shell
cpan> install XML::Parser

I received errors with the below being the most relevent bit…

cp Expat.pm ../blib/lib/XML/Parser/Expat.pm
/usr/bin/perl /usr/lib/perl5/5.8.8/ExtUtils/xsubpp -noprototypes -typemap /usr/lib/perl5/5.8.8/ExtUtils/typemap -typemap typemap Expat.xs > Expat.xsc && mv Expat.xsc Expat.c
gcc -c -D_REENTRANT -D_GNU_SOURCE -fno-strict-aliasing -pipe -Wdeclaration-after-statement -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -I/usr/include/gdbm -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector –param=ssp-buffer-size=4 -m32 -march=i386 -mtune=generic -fasynchronous-unwind-tables -DVERSION=\”2.36\” -DXS_VERSION=\”2.36\” -fPIC “-I/usr/lib/perl5/5.8.8/i386-linux-thread-multi/CORE” Expat.c
Expat.xs:12:19: error: expat.h: No such file or directory
Expat.xs:60: error: expected specifier-qualifier-list before ‘XML_Parser’

To make a long story short, the following was the quick fix…

yum install expat-devel

1 comment 二月 12th, 2010 东木

windows 下安装 VirtualBox 网络配置[zt]

最近想研究下linux

基本思路是在现有的windows系统下,装个虚拟机,虚拟机上装 linux。

虚拟机选择了 Sun xVM VirtualBox ,理由是界面友好,操作方便。下载地址 www.sun.com

虚拟机安装很向导化,不多阐述。

比较有意思的是关于 VirtualBox 的网络配置,网上搜索了一下,基本没有简单易懂的相关教程。

于是我花时间自己研究了下,其实实现很简单。

VirtualBox 有4种网络配置方式:
NAT
Bridged Adapter
Internal
Host-only Adapter
如图:

默认是 NAT 方法,NAT(网络地址转换),你可以认为你的虚拟机是在你的主机后方,所有的联网请求都先通过主机(其实是通过主机的NAT服务器,这是VirtualBox内置的)。

优点:配置简单,可以说只要你的主机可以上网那么配置就没有什么难的。

缺点:虚拟OS的网络地址外网不可见,无法与你的主机进行通信,所以如果你要利用主机和你的虚拟OS调试网络应用程序,恐怕不能使用这种联网方式。

这显然不能满足我们的基本要求。

经过我的反复尝试,得到一种简单有效的方法,看图说话如下:

确认本地连接和vbox建立的虚拟连接都处于正常连接状态

察看本地连接属性

确认vbox 的 bridge 驱动正常

然后配置 internet 协议 (tcp/ip) 为固定 ip

再察看下vbox 的虚拟网络连接的属性

这里注意不要修改vbox 生成的默认参数

最后在vbox  的网络配置里选择 Bridged Adapter,并选择相应的网卡连接。

完工。这样虚拟机通过网桥,实现模拟局域网内终端,经测试可以在网内ping通。

Add comment 二月 9th, 2010 东木

一段脚本代码找出Skydrive的真实外链地址

javascript:var%20n=document.title.replace('%20-%20Windows%20Live','');var%20id=((location.hash=='')?window.selfPageData.currentItemHash:location.hash).replace('#resId/','');var%20u='http://storage.live.com/items/'+id+'?filename='+encodeURI(n);var%20p='http://'+document.location.host+'/redir.aspx?page=self&resId='+id;var%20e='<input%20onmouseover=%22this.select();%22%20onclick=%22this.select();%22%20value=%22';var%20f='%22%20style=%22width:580px%22%20type=%22text%22%20/><br>';var%20d='by%20(<a%20href=%22http://rpsh.net/%22>Rpsh</a>)';var%20c='\u5916\u94FE\u5730\u5740:'+d+e+u+f+'\u5206\u4EAB\u5730\u5740:'+e+p+f;var%20a=document.getElementById('content');var%20g=(a.getElementsByTagName('p')[0]);var%20b=g?g:document.createElement('P');b.innerHTML=c;a.insertBefore(b,a.firstChild);void(0)

Add comment 二月 8th, 2010 东木

解决K宝U盾等网上银行不能在windows 7 下登录问题

在远景里找到的一位网友贴的解决办法,可以解决目前部份银行使用K宝U盾无法登陆网银的问题。方法很实用,不用修改程序文件或浏览器的安全级别,只需手动在注册表里指定网银CSP的一个文件路径。我只试了农行的华大K宝,其它的如(建行、工行、交行、广发、光大、兴业等)按跟贴的朋友尝试也是可行的。方法差不多相同。下面是原贴内容。

目前许多windows 7 IE8用户无法使用USBkey登入网银。该方法支持农行,建行,工行,光大,交行,广发,各股份制商业银行,各城市商业银行,各农村商业银行等多家银行网银,权当抛砖引玉,欢迎各位网友积极测试,以便供后人参考!

[快速导读]:修改注册表

32位WIN 7下找到:
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Cryptography\Defaults\Provider\###]
修改 “Image Path”=”%SystemRoot%\System32\***.dll”

64位WIN 7下找到:
[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Cryptography\Defaults\Provider\###]
修改 “Image Path”=”%SystemRoot%\SysWOW64\***.dll”

注:不同的网银,###,***会不同,请根据自己需要修改。

敬请网友能测试下其他网银,成功的请贴出修改方法!

==以“华大K宝”登入“农行网银”为例==

一、症状:

在登陆农行网银,出现“确认证书”后,点击“确定”,却出现“无法显示该网页”!

二、解决方法:

打开注册表编辑器

(1)开始→运行→输入regedit

(2)32位win7下找到:
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Cryptography\Defaults\Provider\ZGHD Cryptographic Service Provider v1.0]
将Image Path值由”GP_MINCSP.dll”修改为”%SystemRoot%\System32\GP_MINCSP.dll”
(即增加”%SystemRoot%\System32\”字段),结束。

64位win7下找到(感谢腿毛飘飘,左楠风提供):
[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Cryptography\Defaults\Provider\ZGHD Cryptographic Service Provider v1.0]
将Image Path值修改为”%SystemRoot%\SysWOW64\GP_MINCSP.dll”

(3)无需重启,随便打开农行网银网址,出现“正在查找凭据平铺”,出现“确认证书”,点击确定即可出现“用户口令,请输入您的K宝密码”对话框,即可正常登陆网银。

三、本方法优点:

(1)不需要在开始菜单程序里找到CSP工具,将K宝里的证书注册
(2)不需要在桌面上找到“95599在线银行”的图标,这个图标进入农行的网站
(3)不需要修改IE8诸多配置:例如启用“内存保护帮助减少联机攻击”,“使用直接插入自动完成功能(在Internet Explorer之外)”,降低“安全级别”,取消“启用保护模式”,修改“兼容性视图设置”里添加农行网银地址
(4)不需要编辑C:\Windows\System32\drivers\etc\hosts文件,在hosts文件中加入农行网银地址

==其他可用网银(方法与上雷同,请根据不同网银做个性化调整)==

建行华宝E路通(感谢charlesou测试)
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Cryptography\Defaults\Provider\CIDC Cryptographic
Service Provider v2.0.0]
“Image Path”=”%SystemRoot%\System32\CIDC_CSP.dll”

建行捷德(感谢cq-bbcyb测试)
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Cryptography\Defaults\Provider\StarSec CSP CCB]
“Image Path”=”%SystemRoot%\System32\sscsp_ccb.dll”

建行华大智宝(感谢le57907579,chino测试)
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Cryptography\Defaults\Provider\CIDC Cryptographic Service Provider v2.0.0
“Image Path”=”%SystemRoot%\System32\CIDC_CSP.dll”

农行飞天诚信K宝(感谢dongyang, successc测试)
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Cryptography\Defaults\Provider\EnterSafe ePassAuto CSP For ABChina v1.0]
“Image Path”=”%SystemRoot%\System32\ePassAutocsp11_ABChina_s.dll”

农行动态口令卡(感谢hmiloy测试)
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Cryptography\Defaults\Provider\Microsoft Base Smart Card Crypto Provider]“Image Path”=”%SystemRoot%\System32\basecsp.dll

工行金邦达(感谢hnxceagle测试)
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Cryptography\Defaults\Provider\Netting Smart Card Cryptographic Provider v1.2]
“Image Path”=”%SystemRoot%\System32\cspnet.dll”

交通银行(感谢k108cn, edwiny测试)
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Cryptography\Defaults\Provider\Beijing GD CSP BANKCOMM v1.0 ]
“Image Path”=”%SystemRoot%\System32\ep2csp32_bc.dll”

交行华大(感谢sevenyu测试)
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Cryptography\Defaults\Provider\EnterSafe CSP v1.0 for BANKCOMM]
“Image Path”=”%SystemRoot%\System32\ngcsp_bc_2.dll”

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Cryptography\Defaults\Provider\ZGHD CSP for Bank of Communications v1.0]
“Image Path”=”%SystemRoot%\System32\HD_CSP_JH.dll”

广发银行(感谢thinkbook, hbzhong测试)
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Cryptography\Defaults\Provider\Minghua CSP for GDBC v1.0]
“Image Path”=”%SystemRoot%\System32\GDCSPS_V3.dll”

光大银行(感谢popofish, hbzhong测试)
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Cryptography\Defaults\Provider\StarKey220 CSP version 1.0]
Image Path=“%SystemRoot%\System32\GDsk220csp_cebb.dll”

北京农村商业银行飞天诚信(感谢squid8测试)
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Cryptography\Defaults\Provider\FEITIAN ePassNG CSP For BJRCB V1.0]
%SystemRoot%\System32\ngcsp_bjrcb.dll

北京银行(感谢maow测试)
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Cryptography\Defaults\Provider\EnterSafe CSP (ePass2000-FT11) v1.0 for BJCA]
“Image Path”=”%SystemRoot%\System32\bjcacsp11_ft11_s.dll”

杭州银行(感谢zhanxinabc测试)
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Cryptography\Defaults\Provider\NJA USBKEY CSP for HCCB V1.0]
“Image Path”=”%SystemRoot%\System32\HisCSP_hccb.dll”

兴业银行(感谢天很蓝测试)
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Cryptography\Defaults\Provider\StarSec CSP For CIB]
“Image Path”=”%SystemRoot%\SYSTEM32\sscsp_cib.dll”

Add comment 二月 8th, 2010 东木

google analytics 的cookie值 utmz 的生命周期分析

google analytics 使用 utma utmb utmc utmz 来做分析,其中 utmz记录了访问的来源 对于市场分析来说非常重要,

有的时候 会出现这个问题 从a网站来的顾客 来到网站 没有买任何东西就走了  后来通过b网站来下单 最后从下单的情况来看 到底是a网站 来的流量还是b (其实对于referral网站 类型 都是以第一次的为准)

有的时候还会碰到这个问题 从百度搜索一个关键词 ,没有没任何东西,又从google搜索一个关键词,买了东西 最后算那个词的转换(其实对于搜索引擎来说是最后一次)

还会碰到更复杂的问题

来一个顾客 从百度搜索一个词 来了网站 没买东西, 然后去别的网站逛 看到别的网站上挂的广告,于是点击这个banner广告来购买了 最后问是在google analytics里 是算那个流量来源的转换  (其实是算搜索的转换)

以上都是经过我多次测试的结果

附上试验表格

结论就是

在金字塔上面的来源的cookie值 ,越能覆盖下来的

文字描述就是 直接来源和推荐来源是算老的, 搜索的是看新的

Add comment 一月 17th, 2010 东木

cpan 更新 中国镜像 加速安装模块[zt]

使用cpan,大概进去后,help一下就会用。

但是今天想安装Chart::OFC的时候还是碰到问题。

不知道为什么我的一台老的rhel3的系统里的urllist竟然是ftp://cpan.cse.msu.edu/,半天一个i Chart::OFC的命令也没有反应,速度太慢了,后来查了一下那个大学是密歇根州立大学,好偏远,于是必须更新一下urllist,但是我又忘了怎么更新了。

好在网上找到个帖子(http://mail.pm.org/pipermail/china-pm/2007-August/001002.html)告诉了我,转到如下:

你无需手工修改 /etc/perl/CPAN/Config.pm 来改变 CPAN 镜像地址的,以ROOT身
份运行:

# perl -MCPAN -e shell
cpan> o conf urllist unshift  http://www.perl.com/CPAN/
cpan> o conf commit

在search.cpan.org也看到有两个中国的镜像,考虑到稳定性,还是使用perl.com的

还有一点是在用cpan的时候,因为模块安装时默认的make  test不成功,make install就不会去做,但是因为某些情况并不需要这样,这时候,可以force install DBD::mysql

============================================================
配置http_proxy的方法:
o conf http_proxy http://proxy:8080
============================================================
有时候,可能几个不重要的make test中的测试项导致make test失败,这时候就用强制安装:
force install Test::WWW::Mechanize::Catalyst

Add comment 一月 7th, 2010 东木

Firefox忽略兼容性检查

在地址栏输入 about:config
新建一个布尔项,名称是 extensions.checkCompatibility,值为 false,就不会进行扩展兼容性检查了。

Add comment 一月 4th, 2010 东木

Nginx配置

Ⅰ、Nginx配置文件的修改

修改nginx的默认配置文件:

CODE:
vi /etc/nginx/nginx.conf

按下面的内容修改Nginx的配置文件。兰色表示需要手动修改的内容红色表示增加的内容

#user  nobody;

# 指定子进程数,酌情修改
worker_processes  4;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;

# 最多可打开文件数
worker_rlimit_nofile 8196;

events {
# 最大并发数
worker_connections  1024;
}

http {
include       mime.types;
default_type  application/octet-stream;

# 关掉错误日志
error_log       /dev/null  crit;
# 如果需要错误日志,就用下面这行替换上面这行
#error_log     /var/log/nginx/error.log  notice;

# 定义日志格式,对日志使用缓存,避免频繁的磁盘I/O操作
access_log   /var/log/nginx/access.log combined buffer=1m;

sendfile        on;
tcp_nopush      on;
tcp_nodelay     on;

keepalive_timeout  10;

# 对静态文件和可压缩文件启用压缩,以节约网络带宽,提高访问速度
gzip              on;
gzip_min_length   1k;
gzip_buffers      4 8k;
gzip_http_version 1.1;
gzip_comp_level   3;
gzip_types        text/html text/css text/xml text/plain application/x-javascript application/xml application/pdf application/x-perl application/x-tcl application/msword application/rtf application/vnd.ms-excel application/vnd.ms-powerpoint application/vnd.wap.xhtml+xml image/x-ms-bmp;
gzip_disable      ”MSIE [1-6] .”;
gzip_vary         on;

# 定义输出缓存大小
output_buffers   4 32k;

# 最大允许可上传文件大小
client_max_body_size 20m;

# 定义一个叫“myzone”的记录区,总容量为 10M
# 和下面的limit_conn一起限制单个IP的并发连接数为10
limit_zone myzone $binary_remote_addr  10m;

server {
listen       80;
server_name  localhost;

location / {
root   /var/nginx/html;
index  index.php index.html index.htm;
limit_conn  myzone 10;
}

error_page   500 502 503 504  /50x.html;

location = /50x.html {
root   /var/nginx/html;
}

location ~ .php$ {
root           html;
fastcgi_pass   127.0.0.1:9000;
fastcgi_index  index.php;
fastcgi_param  SCRIPT_FILENAME  /var/nginx/html$fastcgi_script_name;
include        fastcgi_params;
}

# 在浏览器本地暂存图片和静态文件,不记录日志,以节约机器资源
location ~* .(gif|png|jpg|jpeg|bmp|css|js|swf)$
{
root           /var/nginx/html;
access_log off;
expires max;
}

# 在浏览器中输入http://xxx.xxx.xxx/status可以看到Nginx的运行信息
# 需要密码验证,不记录日志,限制IP访问
location ~ /status
{
auth_basic  ”O.N.M.P.”;
auth_basic_user_file password;
stub_status on;
access_log   off;
allow 192.168.0.0/24;
deny all;
}

}

}

其他的部分请酌情修改。

运行下面的命令生成查看Nginx运行状态的密码文件:

CODE:

htpasswd -c /etc/nginx/password webadmin

按提示输入两遍密码即可。

在查看status的时候,输入用户名webadmin(见上面这行)和密码就能够看到Nginx的运行数据了。

Nginx能够流行和它的高负载能力是分不开的,在追求性能表现的场合,推荐使用Nginx+PHP-fastcgi的组合以获得强健的性能表现。而对于那些重视安全性的场合来说,可能OpenBSD内核集成的Apache更合适。OpenBSD下搭建Apache、MySQL、PHP环境的详细内容请参见偶的另篇博文,地址在下面:(博客速度可能较慢,四楼有转帖)
http://blog.chinaunix.net/u2/81136/showart_1860332.html

当然,你也可以利用Nginx内置的负载均衡功能,在前端分配访问流量,后端由Apache来运行PHP环境。Nginx负载均衡的配置可以去Nginx的主页参看相关内容,地址:http://wiki.nginx.org/Main

下面为一个Nginx负载均衡的示例:

http {
upstream myproject {
ip_hash;
server 192.168.1.1:80;
server 192.168.1.2:80;
server 192.168.1.3:80;
server 192.168.1.4:80;
}

server {
listen 80;
server_name www.domain.com;
location / {
proxy_pass http://myproject;
}
}
}

网络拓扑示意图如下:

Ⅱ、Nginx日志截断

OpenBSD默认每天00:00会执行/etc/daily.local脚本中的内容,我们只需要把Nginx日志截断的命令加入到这个文件中即可。

CODE:
vi /etc/daily.local

加入下面的内容:

#!/bin/sh
# 对Nginx日志进行截断和压缩,以节约log分区空间
# 在张宴的基础上修改,感谢!
mkdir -p /var/log/nginx/$(date -d “yesterday” +”%Y”)/$(date -d “yesterday” +”%m”)/
mv /var/log/nginx/access.log /var/log/nginx/$(date -d “yesterday” +”%Y”)/$(date -d “yesterday” +”%m”)/access.$(date -d “yesterday” +”%Y%m%d”).log
kill -USR1 `cat /var/run/nginx.pid`
sleep 1
gzip /var/log/nginx/$(date -d “yesterday” +”%Y”)/$(date -d “yesterday” +”%m”)/access.$(date -d “yesterday” +”%Y%m%d”).log

保存退出,为/etc/daily.local加上执行权限:

CODE:
chmod 0755 /etc/daily.local

其他需要每天运行的命令也都可以加在这个脚本里面,各位自行处理。

Add comment 一月 1st, 2010 东木

1 of 1312345...Last»

 

2010年三月
« 二    
1234567
891011121314
15161718192021
22232425262728
293031  

分类目录

标签

书签 优化 参数 命令 啪嗒砰 域名 备份 字体 安装 导入 导出 扩展 换行 文字 正则 爬虫 解决办法 路径 道具 错误 镜像 19楼 Apache awk AWstats CentOS CPAN EditPlus Firefox GD GeoIP Google IBM Linux mysql OUTLOOK Patapon perl photoshop PHP profile rsync sed Shell Thunderbird

最近文章

最近评论

文章索引模板

功能

SEO Powered by Platinum SEO from Techblissonline