存档

‘只谈技术’ 分类的存档

关于mysql的字符集架构

2009年2月24日 没有评论

看了http://item.feedsky.com/~feedsky/phpv/~1232318/176981487/1235221/1/item.html
的这篇文章,整理了下觉得这些对我很有帮助,记录一下

MySQL的字符集处理是这样的:

1)发送请求
客户端(character_set_client)=》数据库连接(character_set_connection)=》存储(table,column)
2)返回请求
存储(table,column)=》数据库连接(character_set_connection )=》客户端(character_set_results)

在每一个非初始节点,都会做一次从上一个结点到当前节点的字符集转换操作。举个例子,有如下环境:
* character_set_connection utf-8
* character_set_results gbk
* character_set_client gb2312
* 有表A,字段字符集全部为BIG5

发送请求的时候,首先数据从gbk转换为utf-8,再转换为BIG5,然后再存储。
返回请求的时候,首先数据从BIG5转换为utf-8,再转换为gb2312,然后再发送给客户端。

如果完全不需要对数据进行排序,like或者全文检索,那么请停止使用char,varchar,text之类的吧。 binary,varbinary,BLOB才是正确的选择。binary之类的在存储,取出的时候都不会进行字符集转换,而在排序时候,只根据二进制内 容排序,所以在效率上高出char,varchar,text很多

另外提一下PHP里的设置字符集。大家请不要再使用mysql_query(”set names utf8″)这样的语句了。mysql_set_charset()才 是最完整的字符集设置方式。后者比前者多一个设置,就是把struct MySQL的charset成员也设置了。这个成员变量在escape的时候起着很重要的作用,特别是对于GBK这种运行把“\”作为字符一部分的编码格式。如果你只使用mysql_query(”set names XXX”),那么在某些字符集,会有重大的安全漏洞,导致mysql_real_escape_string变得和addslashes一样不安全。

分类: mysql相关 标签: ,

php动态方式加载gd编译方法

2009年2月18日 没有评论

首先安装好gd
假设gd是安装在/usr/local/gd2,php是安装在/usr/local/php-cgi的话

cd /usr/local/src/php-5.2.8/ext/gd/
/usr/local/php-cgi/bin/phpize
./configure –with-gd=/usr/local/gd2 –with-php-config=/usr/local/php-cgi/bin/php-config
make && make install

然后再修改php.ini文件
  手工修改:查找/usr/local/php-cgi/etc/php.ini中的extension_dir = “./”
  修改为extension_dir = “/usr/local/php-cgi/lib/php/extensions/no-debug-non-zts-20060613/”
  并在此行后增加以下几行,然后保存:
  extension = “gd2.so”

分类: linux相关, php相关 标签: , ,

x64位系统下php iconv函数输出空白问题

2009年2月18日 没有评论

接着昨天那个iconv问题继续研究,发现iconv函数数据输出为空。经过分析基本判断为gd库和iconv的冲突问题只要php编译中加入gd库支持就会导致这一情况,但是在x86系统里面缺完全没有这个问题,看来只是x64的问题。解决方法是把gd或者iconv作为作为动态模块加载,总之避免gd和iconv同时使用静态方式编译就行。ps:后来我发现我有一台x64的机器都是静态编译的但是就偏偏没有这个问题真是奇怪了。看来这问题还是有一定前提的

分类: linux相关, php相关 标签: ,

discuz论坛wap浏览无中文解决方法

2009年2月17日 没有评论

一个兄弟网站的discuz论坛换了台新的服务器,从apache换到了nginx结果发现换了之后wap访问论坛出来的页面没有任何中文字(英文还是存在的)。我在看了之后一开始以为是wap程序php取数据库编码的问题。后来做了几次修改尝试后发现并非数据库输出内容无中文,而且经过和我们的对比发现连普通的静态内容的中文也都是没有的,一下子就想到问题出在了php上面,于是安装wap下面原来的index.php输出方式手写了一个临时php调试,发现php输出都没问题,有乱码出现,看来问题出在编码转换上面。于是自己看了下discuz的编码转码的库文件chinese.class.php,发现这台新服务器是启用iconv函数的,里面检测到了iconv然后使用iconv函数进行编码转换,忽然想到可能是系统iconv函数库的问题。于是找的了判断iconv的代码:

1
2
3
4
5
6
7
if(function_exists('iconv') && $this->config['TargetLang'] != 'BIG5' && !$ForceTable) {
   $this->iconv_enabled = true;
} else {
   $this->iconv_enabled = false;
   $this->OpenTable();
}
......

修改了这段代码绕过了iconv检测,强制设为不存在iconv的方式处理编码转换。

1
2
   $this->iconv_enabled = false;
   $this->OpenTable();

然后测试果然中文又回来了。

分类: php相关, 软件相关 标签: ,

PsTools系统命令行增强工具命令参数详解

2009年2月5日 没有评论

PsTools是微软收购的Sysinternals小组的一个命令行的win系统命令行管理工具目前最新版本是2.44 下载pstools,由于某些原因无法进行图形远程管理服务器的时候,PsTools就能大显身手了。

PsTools 套件中包含以下工具:
PsExec – 远程执行进程
PsFile – 显示远程打开的文件
PsGetSid – 显示计算机或用户的 SID
PsInfo – 列出有关系统的信息
PsKill – 按名称或进程 ID 终止进程
PsList – 列出有关进程的详细信息
PsLoggedOn – 查看在本地通过资源共享(包含所有资源)登录的用户
PsLogList – 转储事件日志记录
PsPasswd - 更改帐户密码
PsService – 查看和控制服务
PsShutdown – 关闭并重新启动(可选)计算机
PsSuspend – 暂停进程
PsUptime – 向您显示系统自上次重新启动以来的运行时间(PsUptime 的功能已集成到 PsInfo 中)

使用方法:
将所有工具复制到windows目录下CMD命令界面键入工具名称,然后输入命令行参数即可。不想复制到windows目录的朋友,就要
键入工具所在的完整的路径,然后输入命令行参数。要显示完整的用法信息,请指定“-”命令行选项。

工具命令参数详解:

1、psexec
psexec是一个远程执行工具,你可以像使用telnet一样使用它。

它的使用格式为:

psexec \远程机器ip [-u username [-p password]] [-c [-f]] [-i][-d] program [arguments]
它的参数有:
-u后面跟用户名 -p后面是跟密码的,如果建立ipc连接后这两个参数则不需要。(如果没有-p参数,则输入命令后会要求你输入密码)
-c < [路径]文件名>:拷贝文件到远程机器并运行(注意:运行结束后文件会自动删除)
-d 不等待程序执行完就返回,(比如要让远程机器运行tftp服务端的时候使用,不然psexec命令会一直等待tftp程序结束才会返回)
-i 在远程机器上运行一个名为psexesvc进程,(到底什么用弄不明白)
假设我在远程机器ip有一个账号,账号名是:abc 密码是:123
比如想要用telnet一样在远程系统上执行命令可以打:
psexec \远程机器ip -u abc -p 123 cmd
如果想要远程机器执行本地c:srm.exe文件可以打:
psexec \远程机器ip -u abc -p 123 -c c:srm.exe
如果想要让远程机器执行本地上tftp服务端,(假设tftp服务端在本地c:tftp32.exe),可以打:
psexec \远程机器ip -u abc -p 123 -c c:tftp32.exe -d
(后面例子不再重复-u和-p的用法)

2、psservice
psservice是一个服务管理程序。

它的使用格式为:

psservice [\远程机器ip [-u username] [-p password]]
它的参数只有:
-u 后面跟用户名 -p后面是跟密码的,如果建立ipc连接后这两个参数则不需要。(如果没有-p参数,则输入命令后会要求你输入密码)
它的command有:
query [服务名]:显示某一服务的状态,如不填服务名则显示所有服务的状态。
config < 服务名>:显示某一服务的配置。
start < 服务名>:启动某一服务。
stop < 服务名>:停止某一服务。
testart < 服务名>:停止某一服务并重新启动它。
pause < 服务名>:暂停某一服务。
cont < 服务名>:恢复暂停的服务。
depend < 服务名>:显示某一服务依存关系。
find < 服务名>:在网络种搜寻指定的服务。
比如你想查看在远程机器上的telnet服务的状态可以打:
psservice \远程机器ip query tlntsvr (tlntsvr为telnet服务的服务名)
比如你查看远程机器上的telnet服务的配置可以打:
psservice \远程机器ip config tlntsvr
比如你想启动远程机器上的telnet服务可以打:
psservice \远程机器ip start tlntsvr
其他用法以此类推。

3、pssuspend
pssuspend是一个暂时停止进程的软件

它的使用格式为:

pssuspend [-r] [\远程机器ip [-u username] [-p password]]
它有三个参数:
-u:后面跟用户名 -p:后面是跟密码的,如果建立ipc连接后这两个参数则不需要。(如果没有-p参数,则输入命令后会要求你输入密码)
-r:恢复进程。
比如要暂时停止一个pid号为999,名称为srm.exe的进程可以打:
pssuspend \远程机器ip 999 或 pssuspend \远程机器ip srm
如果想要恢复它就可以打pssuspend -r \远程机器ip 999 或 pssuspend -r \远程机器ip srm

4、psinfo
psinfo是一个搜集机器软硬件信息的工具,它可以获得操作系统信息,硬件信息和软件信息。

它的使用格式为:

psinfo [-h] [-s] [-d] [-c] [\远程机器ip [-u username [-p password]]]
它的参数有:
-u:后面跟用户名 -p:后面是跟密码的,如果建立ipc连接后这两个参数则不需要。(如果没有-p参数,则输入命令后会要求你输入密码)
-h:是显示它安装了哪些补丁包
-s:是显示它装了哪些软件
-d:是显示磁盘信息。
比如我只想看远程机器的软硬件信息和只用打:
psinfo \远程机器ip
假如我还想看看它装了哪些补丁包可以打
psinfo -h \远程机器ip
假如我还想看看它磁盘信息可以打:
psinfo -d \远程机器ip
如果我想看它装了哪些软件可以打:
psinfo -s \远程机器ip
简单吧.

5、pslist
pslist是一个查看进程的程序。

它的使用格式为:

pslist [-d] [-m] [-x][-t][-s [n] [-r n] [\远程机器ip [-u username] [-p password]] [name | pid]
它的参数有:
-u:后面跟用户名 -p:后面是跟密码的,如果建立ipc连接后这两个参数则不需要。(如果没有-p参数,则输入命令后会要求你输入密码)
-s:是使用任务管理器模式实时查看进程,可以按ESC键退出。
-r < 秒数>:是和-s连用的一个参数,它用来指定任务管理器模式是的刷新间隔。(默认的刷新间隔为1秒)
-d:示各个进程的cpu使用信息。
-m:显示各个进程的存储器使用信息。
-x:非常详细显示进程的所有信息。
-t:以树型方式显示进程。
比如要查看远程机器ip上的进程的cpu使用信息可以打:
pslist -d \远程机器ip
比如要查看一个pid号为999,名称为srm.exe进程的存储器使用信息可以打:
pslist -m \远程机器ip 999 或 pslist -m \远程机器ip srm
比如要以任务管理器模式实时查看61.12.23.4上进程情况,并且刷新间隔为3秒可以打:
pslist -s -n 3 \远程机器ip

6、psuptime
psuptime是一个了解远程机器运行了多久的命令。

使用它只需要打:psuptime \远程机器ip

7、psshutdown
psshutdown是一个远程关机命令。

它的使用格式为:

psshutdown [[-s | -r | -k [-t nn][-m "消息"][-f]] -a | -l | -o] [\远程机器ip]
它的参数有:
-a:取消以前执行的关机指令。
-t:离关机还有多少秒。(默认是20秒)
-s:关闭机器。
-m:是要显示的信息。
-f:是关机是不保存运行的程序。
-r:表示重启。
-l:表示锁定电脑。
-o:表示注销用户。
比如我想让远程机器30秒后关闭并显示(要关机了,请保存文件)则打:
psshutdown -t 30 -s -m “要关机了,请保存文件” \远程机器ip
如果是要重起的话打:
psshutdown -t 30 -m “要关机了,请保存文件” -r \远程机器ip
如果要取消刚才的指令可以打:
psshutdown -a \远程机器ip
其他参数以此类推。

8、psfile
psfile是一个显示机器上的会话和有什么文件被网络中的用户的打开的命令。

它的使用格式为:

psfile [\远程机器ip [-u Username [-p Password]]] [[Id | path] [-c]]
它的参数有:
-u 后面跟用户名 -p后面是跟密码的,如果建立ipc连接后这两个参数则不需要。(如果没有-p参数,则输入命令后会要求你输入密码)
-c:关闭会话或文件
比如我想看看远程机器上的会话和被远程用户打开的文件可以打:
psfile \远程机器ip
接着就会显示
[33] C:WINNT
User: ADMINISTRATOR
Locks: 0
Access: Read
[63] PIPEsrvsvc
User: ADMINISTRATOR
Locks: 0
Access: Read Write
接着我想关闭id为33,路径为c:winnt的这个会话可以打
psfile \远程机器ip 33 -c 或 psfile \远程机器ip c:winnt -c

9、psloggedon

psloggedon是一个显示目前谁登陆的机器的命令。

它的参数只有:

-l只显示本地登陆用户而不显示其它的网络登陆用户
-x不显示登陆时间
比如说要显示远程机器现在登陆的用户可以打:
psloggedon \远程机器ip

10、psgetsid
psgetsid是一个远程获取账号sid信息的工具。

它的使用格式为:

psgetsid [\远程机器ip [-u username [-p password]]] [account]
它的参数有
-u 后面跟用户名 -p后面是跟密码的,如果建立ipc连接后这两个参数则不需要。(如果没有-p参数,则输入命令后会要求你输入密码)
比如要看远程机器上账号名为abc的sid信息可以打:
psgetsid \远程机器ip abc

11、pskill

pskill是一个杀除进程的程序。
它的使用格式为:

pskill [\远程机器ip [-u username] [-p password]] 比如要杀除一个pid号为999,名称为srm.exe的进程可以打:
pskill \远程机器ip 999 或 pskill \远程机器ip srm

12、psloglist
psloglist

psloglist是一个查看系统事件记录的程序。

它的使用格式为:
psloglist [\远程机器ip [-u username [-p password]]] [-s [-t delimiter]] [-n # | -d #] [-c][-x][-r][-a mm/dd/yy][-b mm/dd/yy][-f filter] [-l event log file]
它的参数有:
-u 后面跟用户名 -p后面是跟密码的,如果建立ipc连接后这两个参数则不需要。
-c:显示事件之后清理事件记录
-l < 事件记录文件名>:用于查看事件记录文件
-n :只显示最近的n条系统事件记录。
-d :只显示n天以前的系统事件记录
-a mm/dd/yy:显示mm/dd/yy以后的系统事件记录
-b mm/dd/yy:显示mm/dd/yy以前的系统事件记录
-f < 事件类型>:只显示指定的事件类型的系统事件记录。
-x:显示事件数据代码
-r:从旧到新排列(如不加则默认是从新到旧排列)
-s:以一个事件为一行的格式显示,中间默认以逗号格开各个信息。
-t < 字符>:这个参数和-s连用,以来改变-s中默认的逗号。
如果我想看远程机器的系统事件记录只用打:
psloglist \远程机器ip 123
比如我想看最近的10条error类型的记录可以打:
psloglist \远程机器ip -n 10 -f error

显示格式:

每个服务的属性按照以下格式显示。

>服务名
服务显示名
[类型] [启动方式] [时间戳]
服务程序全路径
服务Dll全路径(共享进程的服务才有此项)

注:时间戳表示服务属性最后一次被改变的时间。用本程序改的除外。

nokia e50刷机升级中途弹出找到新硬件问题解决

2009年1月19日 没有评论

最近我的e50感觉速度越来越慢,所以想重装下顺便升级。网上下载了最新的PC Suite 7.1 和nsu准备升级,试了n边每次都是升级到开始更新一会就弹出找到新硬件然后就提示刷新失败。后来折腾来折腾去,数据线驱动给我搞坏了,目录也给我删了,于是又去单独下载了个数据线驱动也没细看搞完竟然刷机成功了。在仔细对比一看原来我新下载的单独的数据线驱动是6.83的。晕感情新的7.1的驱动反而到有问题了

分类: 软件相关 标签:

Cisco IOS HTTP Server多个跨站脚本漏洞

2009年1月16日 没有评论

用cisco的当心了赶紧检查下吧

发布日期:2009-01-14
更新日期:2009-01-15

受影响系统:
Cisco IOS 12.4
Cisco IOS 12.3
Cisco IOS 12.2
Cisco IOS 12.1
Cisco IOS 12.0
描述:
——————————————————————————–
BUGTRAQ ID: 33260
CVE(CAN) ID: CVE-2008-3821

Cisco IOS是思科网络设备所使用的互联网操作系统。

如果Cisco IOS中启用了HTTP Server的话,攻击者就可以通过向服务器端二进制程序/脚本提交无效参数执行跨站脚本攻击。这类攻击可能导致替换目标管理界面,或将保密信息重新定向到非授权的第三方,例如,可以通过XMLHttpRequest对象修改/level/15/exec/-/show/run/CR URL所返回的数据。此外攻击者还可以通过跨站请求伪造攻击执行管理操作,例如注入指向/level/15/configure/-/enable/secret/newpass的img标签会将enable口令更改为newpass。

< *来源:Adrian Pastor (m123303@richmond.ac.uk)
Richard J. Brain

链接:http://marc.info/?l=bugtraq&m=123195734420830&w=2

http://marc.info/?l=bugtraq&m=123195579017761&w=2

http://secunia.com/advisories/33461/

*>

测试方法:
——————————————————————————–

警 告

以下程序(方法)可能带有攻击性,仅供安全研究与教学之用。使用者风险自负!

http://192.168.100.1/ping?

建议:
——————————————————————————–
临时解决方法:

如果您不能立刻安装补丁或者升级,NSFOCUS建议您采取以下措施以降低威胁:

* 如果设备上无需HTTP server,以配置模式使用以下命令禁用:

no ip http server
no ip http secure-server

* 如果需要HTTP server,控制可访问HTTP server的主机,对HTTP server应用访问控制列表:

ip http access-class {access-list-number | access-list-name}

以下示例仅允许可信任的主机访问Cisco IOS HTTP server:

ip access-list standard 20
permit 192.168.1.0 0.0.0.255
remark “Above is a trusted subnet”
remark “Add further trusted subnets or hosts below”

! (Note: all other access implicitly denied)
! (Apply the access-list to the http server)

ip http access-class 20

厂商补丁:

Cisco
—–
目前厂商还没有提供补丁或者升级程序,我们建议使用此软件的用户随时关注厂商的主页以获取最新版本:

http://www.cisco.com/warp/public/707/advisory.html

分类: 硬件相关 标签: ,

MySQL配置文件my.cnf中文版

2009年1月16日 没有评论

从 hi!admin 抄来的一份配置.注释得非常好.

#BEGIN CONFIG INFO
#DESCR: 4GB RAM, 只使用InnoDB, ACID, 少量的连接, 队列负载大
#TYPE: SYSTEM
#END CONFIG INFO

#
# 此mysql配置文件例子针对4G内存
# 主要使用INNODB
#处理复杂队列并且连接数量较少的mysql服务器
#
# 将此文件复制到/etc/my.cnf 作为全局设置,
# mysql-data-dir/my.cnf 作为服务器指定设置
# (@localstatedir@ for this installation) 或者放入
# ~/.my.cnf 作为用户设置.
#
# 在此配置文件中, 你可以使用所有程序支持的长选项.
# 如果想获悉程序支持的所有选项
# 请在程序后加上”–help”参数运行程序.
#
# 关于独立选项更多的细节信息可以在手册内找到
#

#
# 以下选项会被MySQL客户端应用读取.
# 注意只有MySQL附带的客户端应用程序保证可以读取这段内容.
# 如果你想你自己的MySQL应用程序获取这些值
# 需要在MySQL客户端库初始化的时候指定这些选项

#
[client]
#password = [your_password]
port = @MYSQL_TCP_PORT@
socket = @MYSQL_UNIX_ADDR@

# *** 应用定制选项 ***

#
# MySQL 服务端
#
[mysqld]

# 一般配置选项
port = @MYSQL_TCP_PORT@
socket = @MYSQL_UNIX_ADDR@

# back_log 是操作系统在监听队列中所能保持的连接数,
# 队列保存了在MySQL连接管理器线程处理之前的连接.
# 如果你有非常高的连接率并且出现”connection refused” 报错,
# 你就应该增加此处的值.
# 检查你的操作系统文档来获取这个变量的最大值.
# 如果将back_log设定到比你操作系统限制更高的值,将会没有效果
back_log = 50

# 不在TCP/IP端口上进行监听.
# 如果所有的进程都是在同一台服务器连接到本地的mysqld,
# 这样设置将是增强安全的方法
# 所有mysqld的连接都是通过Unix sockets 或者命名管道进行的.
# 注意在windows下如果没有打开命名管道选项而只是用此项
# (通过 “enable-named-pipe” 选项) 将会导致mysql服务没有任何作用!
#skip-networking

# MySQL 服务所允许的同时会话数的上限
# 其中一个连接将被SUPER权限保留作为管理员登录.
# 即便已经达到了连接数的上限.
max_connections = 100

# 每个客户端连接最大的错误允许数量,如果达到了此限制.
# 这个客户端将会被MySQL服务阻止直到执行了”FLUSH HOSTS” 或者服务重启
# 非法的密码以及其他在链接时的错误会增加此值.
# 查看 “Aborted_connects” 状态来获取全局计数器.
max_connect_errors = 10

# 所有线程所打开表的数量.
# 增加此值就增加了mysqld所需要的文件描述符的数量
# 这样你需要确认在[mysqld_safe]中 “open-files-limit” 变量设置打开文件数量允许至少4096
table_cache = 2048

# 允许外部文件级别的锁. 打开文件锁会对性能造成负面影响
# 所以只有在你在同样的文件上运行多个数据库实例时才使用此选项(注意仍会有其他约束!)
# 或者你在文件层面上使用了其他一些软件依赖来锁定MyISAM表
#external-locking

# 服务所能处理的请求包的最大大小以及服务所能处理的最大的请求大小(当与大的BLOB字段一起工作时相当必要)
# 每个连接独立的大小.大小动态增加
max_allowed_packet = 16M

# 在一个事务中binlog为了记录SQL状态所持有的cache大小
# 如果你经常使用大的,多声明的事务,你可以增加此值来获取更大的性能.
# 所有从事务来的状态都将被缓冲在binlog缓冲中然后在提交后一次性写入到binlog中
# 如果事务比此值大, 会使用磁盘上的临时文件来替代.
# 此缓冲在每个连接的事务第一次更新状态时被创建
binlog_cache_size = 1M

# 独立的内存表所允许的最大容量.
# 此选项为了防止意外创建一个超大的内存表导致永尽所有的内存资源.
max_heap_table_size = 64M

# 排序缓冲被用来处理类似ORDER BY以及GROUP BY队列所引起的排序
# 如果排序后的数据无法放入排序缓冲,
# 一个用来替代的基于磁盘的合并分类会被使用
# 查看 “Sort_merge_passes” 状态变量.
# 在排序发生时由每个线程分配
sort_buffer_size = 8M

# 此缓冲被使用来优化全联合(full JOINs 不带索引的联合).
# 类似的联合在极大多数情况下有非常糟糕的性能表现,
# 但是将此值设大能够减轻性能影响.
# 通过 “Select_full_join” 状态变量查看全联合的数量
# 当全联合发生时,在每个线程中分配
join_buffer_size = 8M

# 我们在cache中保留多少线程用于重用
# 当一个客户端断开连接后,如果cache中的线程还少于thread_cache_size,
# 则客户端线程被放入cache中.
# 这可以在你需要大量新连接的时候极大的减少线程创建的开销
# (一般来说如果你有好的线程模型的话,这不会有明显的性能提升.)
thread_cache_size = 8

# 此允许应用程序给予线程系统一个提示在同一时间给予渴望被运行的线程的数量.
# 此值只对于支持 thread_concurrency() 函数的系统有意义( 例如Sun Solaris).
# 你可可以尝试使用 [CPU数量]*(2..4) 来作为thread_concurrency的值
thread_concurrency = 8

# 查询缓冲常被用来缓冲 SELECT 的结果并且在下一次同样查询的时候不再执行直接返回结果.
# 打开查询缓冲可以极大的提高服务器速度, 如果你有大量的相同的查询并且很少修改表.
# 查看 “Qcache_lowmem_prunes” 状态变量来检查是否当前值对于你的负载来说是否足够高.
# 注意: 在你表经常变化的情况下或者如果你的查询原文每次都不同,
# 查询缓冲也许引起性能下降而不是性能提升.
query_cache_size = 64M

# 只有小于此设定值的结果才会被缓冲
# 此设置用来保护查询缓冲,防止一个极大的结果集将其他所有的查询结果都覆盖.
query_cache_limit = 2M

# 被全文检索索引的最小的字长.
# 你也许希望减少它,如果你需要搜索更短字的时候.
# 注意在你修改此值之后,
# 你需要重建你的 FULLTEXT 索引
ft_min_word_len = 4

# 如果你的系统支持 memlock() 函数,你也许希望打开此选项用以让运行中的mysql在在内存高度紧张的时候,数据在内存中保持锁定并且防止可能被swapping out
# 此选项对于性能有益
#memlock

# 当创建新表时作为默认使用的表类型,
# 如果在创建表示没有特别执行表类型,将会使用此值
default_table_type = MYISAM

# 线程使用的堆大小. 此容量的内存在每次连接时被预留.
# MySQL 本身常不会需要超过64K的内存
# 如果你使用你自己的需要大量堆的UDF函数
# 或者你的操作系统对于某些操作需要更多的堆,
# 你也许需要将其设置的更高一点.
thread_stack = 192K

# 设定默认的事务隔离级别.可用的级别如下:
# READ-UNCOMMITTED, READ-COMMITTED, REPEATABLE-READ, SERIALIZABLE
transaction_isolation = REPEATABLE-READ

# 内部(内存中)临时表的最大大小
# 如果一个表增长到比此值更大,将会自动转换为基于磁盘的表.
# 此限制是针对单个表的,而不是总和.
tmp_table_size = 64M

# 打开二进制日志功能.
# 在复制(replication)配置中,作为MASTER主服务器必须打开此项
# 如果你需要从你最后的备份中做基于时间点的恢复,你也同样需要二进制日志.
log-bin=mysql-bin

# 如果你在使用链式从服务器结构的复制模式 (A->B->C),
# 你需要在服务器B上打开此项.
# 此选项打开在从线程上重做过的更新的日志,
# 并将其写入从服务器的二进制日志.
#log_slave_updates

# 打开全查询日志. 所有的由服务器接收到的查询 (甚至对于一个错误语法的查询)
# 都会被记录下来. 这对于调试非常有用, 在生产环境中常常关闭此项.
#log

# 将警告打印输出到错误log文件. 如果你对于MySQL有任何问题
# 你应该打开警告log并且仔细审查错误日志,查出可能的原因.
#log_warnings

# 记录慢速查询. 慢速查询是指消耗了比 “long_query_time” 定义的更多时间的查询.
# 如果 log_long_format 被打开,那些没有使用索引的查询也会被记录.
# 如果你经常增加新查询到已有的系统内的话. 一般来说这是一个好主意,
log_slow_queries

# 所有的使用了比这个时间(以秒为单位)更多的查询会被认为是慢速查询.
# 不要在这里使用”1″, 否则会导致所有的查询,甚至非常快的查询页被记录下来(由于MySQL 目前时间的精确度只能达到秒的级别).
long_query_time = 2

# 在慢速日志中记录更多的信息.
# 一般此项最好打开.
# 打开此项会记录使得那些没有使用索引的查询也被作为到慢速查询附加到慢速日志里
log_long_format

# 此目录被MySQL用来保存临时文件.例如,
# 它被用来处理基于磁盘的大型排序,和内部排序一样.
# 以及简单的临时表.
# 如果你不创建非常大的临时文件,将其放置到 swapfs/tmpfs 文件系统上也许比较好
# 另一种选择是你也可以将其放置在独立的磁盘上.
# 你可以使用”;”来放置多个路径
# 他们会按照roud-robin方法被轮询使用.
#tmpdir = /tmp

# *** 复制有关的设置

# 唯一的服务辨识号,数值位于 1 到 2^32-1之间.
# 此值在master和slave上都需要设置.
# 如果 “master-host” 没有被设置,则默认为1, 但是如果忽略此选项,MySQL不会作为master生效.
server-id = 1

# 复制的Slave (去掉master段的注释来使其生效)
#
# 为了配置此主机作为复制的slave服务器,你可以选择两种方法:
#
# 1) 使用 CHANGE MASTER TO 命令 (在我们的手册中有完整描述) -
# 语法如下:
#
# CHANGE MASTER TO MASTER_HOST=, MASTER_PORT= ,
# MASTER_USER=, MASTER_PASSWORD= ;
#
# 你需要替换掉 , , 等被尖括号包围的字段以及使用master的端口号替换 (默认3306).
#
# 例子:
#
# CHANGE MASTER TO MASTER_HOST=’125.564.12.1′, MASTER_PORT=3306,
# MASTER_USER=’joe’, MASTER_PASSWORD=’secret’;
#
# 或者
#
# 2) 设置以下的变量. 不论如何, 在你选择这种方法的情况下, 然后第一次启动复制(甚至不成功的情况下,
# 例如如果你输入错密码在master-password字段并且slave无法连接),
# slave会创建一个 master.info 文件,并且之后任何对于包含在此文件内的参数的变化都会被忽略
# 并且由 master.info 文件内的内容覆盖, 除非你关闭slave服务, 删除 master.info 并且重启slave 服务.
# 由于这个原因,你也许不想碰一下的配置(注释掉的) 并且使用 CHANGE MASTER TO (查看上面) 来代替
#
# 所需要的唯一id号位于 2 和 2^32 – 1之间
# (并且和master不同)
# 如果master-host被设置了.则默认值是2
# 但是如果省略,则不会生效
#server-id = 2
#
# 复制结构中的master – 必须
#master-host =
#
# 当连接到master上时slave所用来认证的用户名 – 必须
#master-user =
#
# 当连接到master上时slave所用来认证的密码 – 必须
#master-password = #
# master监听的端口.
# 可选 – 默认是3306
#master-port =

# 使得slave只读.只有用户拥有SUPER权限和在上面的slave线程能够修改数据.
# 你可以使用此项去保证没有应用程序会意外的修改slave而不是master上的数据
#read_only

#*** MyISAM 相关选项

# 关键词缓冲的大小, 一般用来缓冲MyISAM表的索引块.
# 不要将其设置大于你可用内存的30%,
# 因为一部分内存同样被OS用来缓冲行数据
# 甚至在你并不使用MyISAM 表的情况下, 你也需要仍旧设置起 8-64M 内存由于它同样会被内部临时磁盘表使用.
key_buffer_size = 32M

# 用来做MyISAM表全表扫描的缓冲大小.
# 当全表扫描需要时,在对应线程中分配.
read_buffer_size = 2M

# 当在排序之后,从一个已经排序好的序列中读取行时,行数据将从这个缓冲中读取来防止磁盘寻道.
# 如果你增高此值,可以提高很多ORDER BY的性能.
# 当需要时由每个线程分配
read_rnd_buffer_size = 16M

# MyISAM 使用特殊的类似树的cache来使得突发插入
# (这些插入是,INSERT … SELECT, INSERT … VALUES (…), (…), …, 以及 LOAD DATA
# INFILE) 更快. 此变量限制每个进程中缓冲树的字节数.
# 设置为 0 会关闭此优化.
# 为了最优化不要将此值设置大于 “key_buffer_size”.
# 当突发插入被检测到时此缓冲将被分配.
bulk_insert_buffer_size = 64M

# 此缓冲当MySQL需要在 REPAIR, OPTIMIZE, ALTER 以及 LOAD DATA INFILE 到一个空表中引起重建索引时被分配.
# 这在每个线程中被分配.所以在设置大值时需要小心.
myisam_sort_buffer_size = 128M

# MySQL重建索引时所允许的最大临时文件的大小 (当 REPAIR, ALTER TABLE 或者 LOAD DATA INFILE).
# 如果文件大小比此值更大,索引会通过键值缓冲创建(更慢)
myisam_max_sort_file_size = 10G

# 如果被用来更快的索引创建索引所使用临时文件大于制定的值,那就使用键值缓冲方法.
# 这主要用来强制在大表中长字串键去使用慢速的键值缓冲方法来创建索引.
myisam_max_extra_sort_file_size = 10G

# 如果一个表拥有超过一个索引, MyISAM 可以通过并行排序使用超过一个线程去修复他们.
# 这对于拥有多个CPU以及大量内存情况的用户,是一个很好的选择.
myisam_repair_threads = 1

# 自动检查和修复没有适当关闭的 MyISAM 表.
myisam_recover

# 默认关闭 Federated
skip-federated

# *** BDB 相关选项 ***

# 如果你运行的MySQL服务有BDB支持但是你不准备使用的时候使用此选项. 这会节省内存并且可能加速一些事.
skip-bdb

# *** INNODB 相关选项 ***

# 如果你的MySQL服务包含InnoDB支持但是并不打算使用的话,
# 使用此选项会节省内存以及磁盘空间,并且加速某些部分
#skip-innodb

# 附加的内存池被InnoDB用来保存 metadata 信息
# 如果InnoDB为此目的需要更多的内存,它会开始从OS这里申请内存.
# 由于这个操作在大多数现代操作系统上已经足够快, 你一般不需要修改此值.
# SHOW INNODB STATUS 命令会显示当先使用的数量.
innodb_additional_mem_pool_size = 16M

# InnoDB使用一个缓冲池来保存索引和原始数据, 不像 MyISAM.
# 这里你设置越大,你在存取表里面数据时所需要的磁盘I/O越少.
# 在一个独立使用的数据库服务器上,你可以设置这个变量到服务器物理内存大小的80%
# 不要设置过大,否则,由于物理内存的竞争可能导致操作系统的换页颠簸.
# 注意在32位系统上你每个进程可能被限制在 2-3.5G 用户层面内存限制,
# 所以不要设置的太高.
innodb_buffer_pool_size = 2G

# InnoDB 将数据保存在一个或者多个数据文件中成为表空间.
# 如果你只有单个逻辑驱动保存你的数据,一个单个的自增文件就足够好了.
# 其他情况下.每个设备一个文件一般都是个好的选择.
# 你也可以配置InnoDB来使用裸盘分区 – 请参考手册来获取更多相关内容
innodb_data_file_path = ibdata1:10M:autoextend

# 设置此选项如果你希望InnoDB表空间文件被保存在其他分区.
# 默认保存在MySQL的datadir中.
#innodb_data_home_dir =

# 用来同步IO操作的IO线程的数量. This value is
# 此值在Unix下被硬编码为4,但是在Windows磁盘I/O可能在一个大数值下表现的更好.
innodb_file_io_threads = 4

# 如果你发现InnoDB表空间损坏, 设置此值为一个非零值可能帮助你导出你的表.
# 从1开始并且增加此值知道你能够成功的导出表.
#innodb_force_recovery=1

# 在InnoDb核心内的允许线程数量.
# 最优值依赖于应用程序,硬件以及操作系统的调度方式.
# 过高的值可能导致线程的互斥颠簸.
innodb_thread_concurrency = 16

# 如果设置为1 ,InnoDB会在每次提交后刷新(fsync)事务日志到磁盘上,
# 这提供了完整的ACID行为.
# 如果你愿意对事务安全折衷, 并且你正在运行一个小的食物, 你可以设置此值到0或者2来减少由事务日志引起的磁盘I/O
# 0代表日志只大约每秒写入日志文件并且日志文件刷新到磁盘.
# 2代表日志写入日志文件在每次提交后,但是日志文件只有大约每秒才会刷新到磁盘上.
innodb_flush_log_at_trx_commit = 1

# 加速InnoDB的关闭. 这会阻止InnoDB在关闭时做全清除以及插入缓冲合并.
# 这可能极大增加关机时间, 但是取而代之的是InnoDB可能在下次启动时做这些操作.
#innodb_fast_shutdown

# 用来缓冲日志数据的缓冲区的大小.
# 当此值快满时, InnoDB将必须刷新数据到磁盘上.
# 由于基本上每秒都会刷新一次,所以没有必要将此值设置的太大(甚至对于长事务而言)

innodb_log_buffer_size = 8M

# 在日志组中每个日志文件的大小.
# 你应该设置日志文件总合大小到你缓冲池大小的25%~100%
# 来避免在日志文件覆写上不必要的缓冲池刷新行为.
# 不论如何, 请注意一个大的日志文件大小会增加恢复进程所需要的时间.
innodb_log_file_size = 256M

# 在日志组中的文件总数.
# 通常来说2~3是比较好的.
innodb_log_files_in_group = 3

# InnoDB的日志文件所在位置. 默认是MySQL的datadir.
# 你可以将其指定到一个独立的硬盘上或者一个RAID1卷上来提高其性能
#innodb_log_group_home_dir

# 在InnoDB缓冲池中最大允许的脏页面的比例.
# 如果达到限额, InnoDB会开始刷新他们防止他们妨碍到干净数据页面.
# 这是一个软限制,不被保证绝对执行.
innodb_max_dirty_pages_pct = 90

# InnoDB用来刷新日志的方法.
# 表空间总是使用双重写入刷新方法
# 默认值是 “fdatasync”, 另一个是 “O_DSYNC”.
#innodb_flush_method=O_DSYNC

# 在被回滚前,一个InnoDB的事务应该等待一个锁被批准多久.
# InnoDB在其拥有的锁表中自动检测事务死锁并且回滚事务.
# 如果你使用 LOCK TABLES 指令, 或者在同样事务中使用除了InnoDB以外的其他事务安全的存储引擎
# 那么一个死锁可能发生而InnoDB无法注意到.
# 这种情况下这个timeout值对于解决这种问题就非常有帮助.
innodb_lock_wait_timeout = 120

[mysqldump]
# 不要在将内存中的整个结果写入磁盘之前缓存. 在导出非常巨大的表时需要此项
quick

max_allowed_packet = 16M

[mysql]
no-auto-rehash

# 仅仅允许使用键值的 UPDATEs 和 DELETEs .
#safe-updates

[isamchk]
key_buffer = 512M
sort_buffer_size = 512M
read_buffer = 8M
write_buffer = 8M

[myisamchk]
key_buffer = 512M
sort_buffer_size = 512M
read_buffer = 8M
write_buffer = 8M

[mysqlhotcopy]
interactive-timeout

[mysqld_safe]
# 增加每个进程的可打开文件数量.
# 警告: 确认你已经将全系统限制设定的足够高!
# 打开大量表需要将此值设高
open-files-limit = 8192

分类: mysql相关 标签:

nginx多域名站点rewrite跳转不改变域名的方法:server_name_in_redirec用法

2009年1月15日 没有评论

nginx中如果一个server节点有多个域名,并且在不是访问主域名的情况下如果进行rewrite跳转,会自动把域名转换成主域名。比如:

1
2
3
4
5
server {
   server_name www.my.com www.site.com;
   rewrite ^/$ /src/login.php redirect;
   ......
}

这里如果访问www.site.com的话会自动跳转到www.my.com/src/login.php,而不是www.site.com/src/login.php。

解决方法:
如果nginx版本在0.6.x及以上版本的话使用

1
2
3
4
5
6
server {
   server_name www.my.com www.site.com;
   server_name_in_redirect  off;
   rewrite ^/$ /src/login.php redirect;
   ......
}

老版本的话可以使用

1
2
3
4
5
6
7
server {
   server_name www.my.com www.site.com;
   location = / {
      rewrite ^ /src/login.php redirect;
   }
   ......
}

关键点:
如果server_name_in_redirec为on,那么nginx将使用server_name中的第一个 server name来进行rewrite跳转。如果设置成off的话nginx将使用请求中Request Headers中的host来进行rewrite跳转。
server_name_in_redirec 可以在配置文件中 http , server 和 location 区域级别中使用。

分类: nginx相关 标签: ,

nginx支持泛域名支持的方法

2009年1月15日 没有评论

要使用Nginx下的泛域名支持,必须在编译 Nginx的时候加上
–with-http_sub_module

然后使用

1
2
3
4
5
server {
listen       80;
server_name  _;
.....
}
分类: nginx相关 标签: ,