2008年10月20日星期一

innodb学习-innodb_thread_concurrency

innodb_thread_councurrency
innodb试图保证并发线程小于或者等于这个设置的值,一旦线程数达到这个限制值,则另外生成的线程将被放入一个FIFO的队列中等待执行,而这些被等待中的线程将不会被计算入并发线程。
而怎么样设置这个值是依赖系统环境和系统负载,我们需要尝试在一个范围内的不同的值来决定我们的系统应该设置成什么值。
这个范围是从0-1000,在某些版本如果这个值等于大于20,被认为是无限大,而某些版本,我们可以通过设置为0来禁用并发检查。
这个默认值在5.1.11之前是20,从5.1.11开始是8.
所以innodb_thread_concurrency,我们需要实际的测试才能决定使用什么样的值:)
下附上一个关于innodb_thread_concurrency的bug37411
Threads staying in the "Sending Data" for long periods of time

2008年10月17日星期五

mysql 4g问题

mysql的有4g最大表限制,这个限制是来源于操作系统

mysql> show table status like 'example_table'\G
*************************** 1. row ***************************
Name: example_table
Engine: MyISAM
Version: 10
Row_format: Dynamic
Rows: 2750508
Avg_row_length: 472
Data_length: 1300304684
Max_data_length: 281474976710655
Index_length: 516225024
Data_free: 0
Auto_increment: 2800006
Create_time: 2008-02-27 10:45:44
Update_time: 2008-07-11 15:41:30
Check_time: 2008-02-27 11:05:27
Collation: utf8_general_ci
Checksum: NULL
Create_options:
Comment:

mysql> alter table example_table max_rows=210000000 avg_row_length = 1024;
Query OK, 2750508 rows affected (15 min 28.11 sec)
Records: 2750508 Duplicates: 0 Warnings: 0


mysql> show table status like 'example_table'\G
*************************** 1. row ***************************
Name: example_table
Engine: MyISAM
Version: 10
Row_format: Dynamic
Rows: 2750508
Avg_row_length: 472
Data_length: 1300304536
Max_data_length: 1099511627775
Index_length: 461033472
Data_free: 0
Auto_increment: 2800006
Create_time: 2008-10-17 13:27:33
Update_time: 2008-10-17 13:29:47
Check_time: 2008-10-17 13:42:58
Collation: utf8_general_ci
Checksum: NULL
Create_options: max_rows=210000000 avg_row_length=1024


这个修改可真是消耗时间,有时间还是应该早做处理,早做打算。
当然,在迁移数据的时候,我们应该有可以变通的方法。

2008年10月13日星期一

转贴:上传漏洞(php.rar格式文件)

原文地址:http://zhixinku.com/home/space.php?uid=4&do=blog&id=20

一般的网站都会开放rar附件上传,并可能会保留原来文件名称,这从而可能导致一个很严重的问题,xxx.php.rar文件会被Apache当作php文件来执行, 造成极大的安全隐患 .

如何测试? 将你的某个php程序文件后缀名修改成 xxx.php.rar , 这时测试一下, 还是按照PHP文件解析执行,Apache并不会认为这是一个rar文件, 这是为什么呢?

原来,每遇到一种后双重后缀名(如xxx.php.rar)的文件,Apache都会去conf/mime.types 文件中检查最后一个后缀,如果最后一个后缀并没有在mime.types文件中定义, 则使用前一个后缀来解释 ,因为在默认情况下,rar并未在mime.types中定义, 故Apache会使用php后缀来解释文件, 这就是漏洞的原因所在.

由此类推,如果使用xxx.jsp.ppp.rar 则会认为是jsp文件, 如果修改成xxx.shtml.rar ,则会识别成shtml文件.

a.php.c.d.e.rar 也是会被当成PHP文件解释的!
想想,不知道有多少网站存在这个问题?

那么针对网络管理员,如何杜绝这个隐患 ?
1.修改mime.types文件,在最后面加一条:
application/rar rar
然后重新启动Apache,即可.

针对WEB管理员及WEB程序开发者,如何更安全?
1.只允许上传指定后缀名的文件,当然,要禁止掉rar格式文件上传.(但这条往往行不通,一般的网站都需要上传rar文件)
2.对上传后的文件进行强制重命名, 强制使用最后一个扩展名,如原始文件名为xxx.php.rar ,上传后强制重命名为 20080912.rar即可避免这个隐患.

早期版本的phpcms 2007, discuz, ecshop都存在这个漏洞, 或许你的网站被挂马,就是因此引起.

希望本文对你有用.


不要指出的是只要不能解释的后缀都会重新解释前一个后缀
这样a.php.rar2 或者 a.b.php.gzip111都有可能直接解释成php
除了文中给出的方法外,最好能把上传的文件单独用没有添加php扩展的webserver来提供服务!

apache模块之mod_mime_magic

mod_mime_magic 在mod_mime不能确定文件类型的时候,读取文件的头几个字节来判断文件类型,觉得用处不是很大,还影响性能!
详见手册mod_mime_magic

2008年10月12日星期日

nfs的server端没有响应

突然接到alert:apache进程数过多!
查看server apache进程数过多,查看mysql的状态,正常。查看apache日志,正常,但是又有alter,该台server连不上内网中的一台nfs!
本能的df了一下,卡在某个nfs那里!
查看了nfs server,正常!
于是决定重新挂载nfs
这里需要注意的是,需要详细的写清楚nfs的路径ip:path ,而不能直接卸载映射到本地的目录!
卸载后再挂载,这时一切正常!
继续查看原因
在nfs server 的message中有网卡重启的信息

Oct 12 11:46:39 **** kernel: NETDEV WATCHDOG: eth1: transmit timed out
Oct 12 11:46:40 **** kernel: bnx2: eth1 NIC Link is Down
Oct 12 11:46:41 **** kernel: bnx2: eth1 NIC Link is Up, 100 Mbps full duplex
主机名用****代替

nfs client 的message中同样有相关信息

Oct 12 11:11:23 **** kernel: nfs: server *.*.*.* not responding, st
ill trying
Oct 12 11:11:56 **** last message repeated 13 times
Oct 12 11:12:01 **** last message repeated 2 times

问题:
1.相互出问题的时间并不一致
2.交换机并不存在问题,连接在同一交换机上的其他设备没有这样的日志.
结论:迷惑中:暂时只能先解决问题,初步认为网卡有些问题,需要再观察!

2008年10月10日星期五

查看mysql中当前用户

今天突然想看看连接mysqld的是哪个用户,于是随手 show user();发现不能用!
切记:
mysql下查看当前session的用户是

select user();
select current_user;
select current_user();
都是一样的效果。

而orcale 可以用
SHOW USER

有时候用得少,真混乱了,记录下:)
mysql中查看所有用户

SELECT * from mysql.user;

2008年10月9日星期四

libtoolize 与libtool

今天在找libtoolize属于哪个rpm包的时候,发现邮件列表里面有一段不错的话,特此记录下。

libtool and libtoolize are two very different things. But since libtoolize
is an add-on of libtool, it's included in the libtool package. Renaming
the package to libtoolize would be stupid because the package is way more
than that.
Renaming the libtoolize command to libtool would be stupid because it's
named libtoolize everywhere else, and because libtool is something else.

顺便说下libtoolize是属于libtool这个包的,我的系统libtool-1.5.6-4.EL4.2

2008年10月7日星期二

php的pdo_mysql的扩展

最近有朋友重新安装了服务器,发现连接mysql出问题,不能使用pdo_mysql.查看了下phpinfo,发现仁兄编译的时候没给zlib,后期动态扩展pdo_mysql的时候貌似是加入了php_mysql,但是连接的时候还是报异常!
简要讲下pdo_mysql的安装

./configure --with-zlib --with-pdo-mysql[=DIR]

或者参考手册动态加载,但是一定要注意,pdo-mysql需要zlib
参考手册