一直以来,多数人在使用MyISAM时都是按照增大Key_read_requests / Key_reads的原则来设置key_buffer_size的,没想到这竟然是错误的!这次给大家醍醐灌顶的仍然是MySQL Performance Blog,详细描述参考:Why you should ignore MySQL’s key cache hit ratio。
Key_read_requests和Key_reads就是两个计数器,它们的含义如下:
Key_read_requests和Key_reads就是两个计数器,它们的含义如下:
MySQL打开表的相关机制:在MySQL中每个线程都是独立打开自己需要的表的文件描述符,而不是通过共享已经打开的表的文件描述符。针对不同的存储引擎可能有不同的处理方式。如MyISAM表,每一个客户端线程打开任何一个MyISAM表的数据文件都哟啊打开一个文件描述符,但如果是索引文件,则可以多个线程共享同一个索引文件的描述符。对于InnoDB的存储引擎,如果使用的是共享表空间来存储数据,则打开的文件描述符就比较少,但如果使用的是独享表空间方式则打开的文件描述符则较多。
在mysql数据库中,mysql key_buffer_size是对MyISAM表性能影响最大的一个参数,下面就将对mysql Key_buffer_size参数的设置进行详细介绍,供您参考。
下面一台以MyISAM为主要存储引擎服务器的配置:
下面一台以MyISAM为主要存储引擎服务器的配置:
查看mysql编译参数:
cat /usr/local/mysql/bin/mysqlbug | grep CONFIGURE_LINE
查看apache编译参数:
cat $apachehome$/build/config.nice
查看php编译参数:
$PHP$/bin/php -i | grep configure
cat /usr/local/mysql/bin/mysqlbug | grep CONFIGURE_LINE
查看apache编译参数:
cat $apachehome$/build/config.nice
查看php编译参数:
$PHP$/bin/php -i | grep configure
今天尝试使用了Windows下的可视化mysql数据库管理工具Navicat,界面清爽,易操作上手,感觉还不错。
不过当连接上mysql后,无论打开任何一个数据库,都会提示:1577-CannotproceedbecausesystemtablesusedbyEventSchedulerwherefounddamagedatserverstart,按照提示的说法是系统表损坏,但没有理由全部都损坏吧。
于是上网查些相关信息,但比较失望,没有实际的解决方案。经过一番折腾,在mysql中文手册里发现一些信息,原来是从mysql5.1版本开始,系统表的结构进行了很大的调整,必须要进行升级系统表结构才能正常使用。
然后在Navicat的官方网站上找到了一段信息:Pleasetrytoupdateyoursystemtableandtoseeifitsolvesyourproblem.mysql_upgradeisstoredinthe"bin"folderundertheMySQLserverinstallationpath.
意思是在mysql下的bin目录里运行mysql_upgrade程序升级更新系统表以解决问题。我使用的是APMserv5.2.6集成PHP环境搭建的平台,选择使用的是mysql5.1版本。但在mysql5.1中的bin目录里却并没有发现mysql_upgrade这个文件,看来是APMserv作者作了相应的精简。
最后只好去mysql官方站下载了对应的zip包,从中提取相应文件后运行,问题得到了解决。
为了大家的方便。我在这里把这两个文件放在网上供大家下载。方便大家使用bin下载
注意:就是在你升级的时候。最后会报ERROR。这个你不用管。到时一样关了就行。你去你的navicat里面打开数据库。你会发现1577的问题不存在了。
最后总结一下问题解决方法:
1、将mysql_upgrade.exe和mysqlcheck.exe两个文件复制到APMServ5.2.6\MySQL5.1\bin目录下。2、开始->运行->输入cmd回车,在操作提示符下输入E:\APMServ5.2.6\MySQL5.1\bin\mysql_upgrade-uroot然后回车,待运行完之后关闭DOS窗口。(将其中的E:\APMserv5.2.6改成你自己实际安装的目录即可)
3、停止APMserv后再重新启动APMserv一次,问题即可解决
下载文件 (已下载 1127 次)
不过当连接上mysql后,无论打开任何一个数据库,都会提示:1577-CannotproceedbecausesystemtablesusedbyEventSchedulerwherefounddamagedatserverstart,按照提示的说法是系统表损坏,但没有理由全部都损坏吧。
于是上网查些相关信息,但比较失望,没有实际的解决方案。经过一番折腾,在mysql中文手册里发现一些信息,原来是从mysql5.1版本开始,系统表的结构进行了很大的调整,必须要进行升级系统表结构才能正常使用。
然后在Navicat的官方网站上找到了一段信息:Pleasetrytoupdateyoursystemtableandtoseeifitsolvesyourproblem.mysql_upgradeisstoredinthe"bin"folderundertheMySQLserverinstallationpath.
意思是在mysql下的bin目录里运行mysql_upgrade程序升级更新系统表以解决问题。我使用的是APMserv5.2.6集成PHP环境搭建的平台,选择使用的是mysql5.1版本。但在mysql5.1中的bin目录里却并没有发现mysql_upgrade这个文件,看来是APMserv作者作了相应的精简。
最后只好去mysql官方站下载了对应的zip包,从中提取相应文件后运行,问题得到了解决。
为了大家的方便。我在这里把这两个文件放在网上供大家下载。方便大家使用bin下载
注意:就是在你升级的时候。最后会报ERROR。这个你不用管。到时一样关了就行。你去你的navicat里面打开数据库。你会发现1577的问题不存在了。
最后总结一下问题解决方法:
1、将mysql_upgrade.exe和mysqlcheck.exe两个文件复制到APMServ5.2.6\MySQL5.1\bin目录下。2、开始->运行->输入cmd回车,在操作提示符下输入E:\APMServ5.2.6\MySQL5.1\bin\mysql_upgrade-uroot然后回车,待运行完之后关闭DOS窗口。(将其中的E:\APMserv5.2.6改成你自己实际安装的目录即可)
3、停止APMserv后再重新启动APMserv一次,问题即可解决

我们很多工作都是需要在某个特定的时间去执行它, 只要应用Linux的crontab就可以很好的解决这个问题.
这里我就简要的介绍下其中两种使用:
1. 当我们需要定时去调用某个本机的或者是远程的web程序时,可以这样设置crontab
0 5 * * * /usr/bin/curl http://www.xmsdn.com/it-net/linux/linux-curl-crontab
此处 ”0 5 * * * ” 表示每天早上的5点钟定时访问上面的url 链接,将其加入到你的 crontab 替代文件中.
2. 当我们需要定时执行某个系统内的php脚本程序时,可以这样设置crontab
这里我就简要的介绍下其中两种使用:
1. 当我们需要定时去调用某个本机的或者是远程的web程序时,可以这样设置crontab
0 5 * * * /usr/bin/curl http://www.xmsdn.com/it-net/linux/linux-curl-crontab
此处 ”0 5 * * * ” 表示每天早上的5点钟定时访问上面的url 链接,将其加入到你的 crontab 替代文件中.
2. 当我们需要定时执行某个系统内的php脚本程序时,可以这样设置crontab
如果web服务器前面有cache层,那么vary头信息就是一个命中率杀手。虽然可以在cache层来终结这个杀手,但是为什么我们不考虑在源头上终结它呢。配置nginx隐藏Vary头信息。
nginx.conf中,GZIP部分通常是这样的配置
gzip on;
gzip_min_length 1k;
gzip_buffers 4 16k;
gzip_http_version 1.0;
gzip_comp_level 2;
gzip_types text/plain application/x-javascript text/css application/xml;
gzip_vary on;
我们看看现在的头信息
nginx.conf中,GZIP部分通常是这样的配置
gzip on;
gzip_min_length 1k;
gzip_buffers 4 16k;
gzip_http_version 1.0;
gzip_comp_level 2;
gzip_types text/plain application/x-javascript text/css application/xml;
gzip_vary on;
我们看看现在的头信息
Lighttpd、Nginx 、Apache 隐藏响应头信息的Server信息,apache和php的版本信息
web服务器的版本信息
一、隐藏Apache信息
默认情况下,很多Apache安装时会显示版本号及操作系统版本,甚至会显示服务器上安装的是什么样的Apache模块。这些信息可以为黑客所用,并且黑客还可以从中得知你所配置的服务器上的很多设置都是默认状态。
这里有两条语句,需要添加到httpd.conf文件中:
ServerSignature Off
ServerTokens Prod
ServerSignature出现在Apache所产生的像404页面、目录列表等页面的底部。ServerTokens目录被用来判断Apache会在Server HTTP响应包的头部填充什么信息。如果把ServerTokens设为Prod,那么HTTP响应包头就会被设置成:
web服务器的版本信息
一、隐藏Apache信息
默认情况下,很多Apache安装时会显示版本号及操作系统版本,甚至会显示服务器上安装的是什么样的Apache模块。这些信息可以为黑客所用,并且黑客还可以从中得知你所配置的服务器上的很多设置都是默认状态。
这里有两条语句,需要添加到httpd.conf文件中:
ServerSignature Off
ServerTokens Prod
ServerSignature出现在Apache所产生的像404页面、目录列表等页面的底部。ServerTokens目录被用来判断Apache会在Server HTTP响应包的头部填充什么信息。如果把ServerTokens设为Prod,那么HTTP响应包头就会被设置成:
通常nginx服务器不隐藏服务器类型及版本信息
curl -I http://10.60.30.23
HTTP/1.1 200 OK
Server: nginx nginx/0.8.53
Date: Tue, 14 Dec 2010 08:10:06 GMT
Content-Type: text/html
Content-Length: 151
Last-Modified: Mon, 13 Dec 2010 09:39:55 GMT
Connection: keep-alive
Accept-Ranges: bytes
这对于服务器安全来说是个隐患,用以下方法可以改善这种情况
1. 编辑源代码../src/http/ngx_http_header_filter_module.c
48
static char ngx_http_server_string[] = “Server: nginx” CRLF;
static char ngx_http_server_full_string[] = “Server: ” NGINX_VER CRLF;
改为
static char ngx_http_server_string[] = “Server: pws 1.0 ” CRLF;
static char ngx_http_server_full_string[] = “Server: pws 1.0 ” NGINX_VER CRLF;
然后编译安装。
2. 编辑/usr/local/nginx/conf/nginx.conf,添加
server_tokens off;
重新启动nginx
/usr/local/nginx/sbin/nginx -s reload
最终结果如下
curl -I http://10.60.30.23
HTTP/1.1 200 OK
Server: pws 1.0
Date: Tue, 14 Dec 2010 08:24:32 GMT
Content-Type: text/html
Content-Length: 151
Last-Modified: Mon, 13 Dec 2010 09:39:55 GMT
Connection: keep-alive
Accept-Ranges: bytes
curl -I http://10.60.30.23
HTTP/1.1 200 OK
Server: nginx nginx/0.8.53
Date: Tue, 14 Dec 2010 08:10:06 GMT
Content-Type: text/html
Content-Length: 151
Last-Modified: Mon, 13 Dec 2010 09:39:55 GMT
Connection: keep-alive
Accept-Ranges: bytes
这对于服务器安全来说是个隐患,用以下方法可以改善这种情况
1. 编辑源代码../src/http/ngx_http_header_filter_module.c
48
static char ngx_http_server_string[] = “Server: nginx” CRLF;
static char ngx_http_server_full_string[] = “Server: ” NGINX_VER CRLF;
改为
static char ngx_http_server_string[] = “Server: pws 1.0 ” CRLF;
static char ngx_http_server_full_string[] = “Server: pws 1.0 ” NGINX_VER CRLF;
然后编译安装。
2. 编辑/usr/local/nginx/conf/nginx.conf,添加
server_tokens off;
重新启动nginx
/usr/local/nginx/sbin/nginx -s reload
最终结果如下
curl -I http://10.60.30.23
HTTP/1.1 200 OK
Server: pws 1.0
Date: Tue, 14 Dec 2010 08:24:32 GMT
Content-Type: text/html
Content-Length: 151
Last-Modified: Mon, 13 Dec 2010 09:39:55 GMT
Connection: keep-alive
Accept-Ranges: bytes
1.隐藏Apache版本信息
测试默认 apache 的状态信息
[root@1314it conf]# curl -Is localhost
HTTP/1.1 200 OK
Date: Tue, 16 Nov 2010 04:20:15 GMT
Server: Apache/2.2.3 (CentOS) DAV/2 PHP/5.1.6 mod_perl/2.0.4 Perl/v5.8.8
X-Powered-By: PHP/5.1.6
Connection: close
Content-Type: text/html; charset=GB2312
[root@1314it conf]#
修改主配置文件 httpd.conf
ServerSignature Off
ServerTokens Prod
重启 apache 测试
测试默认 apache 的状态信息
[root@1314it conf]# curl -Is localhost
HTTP/1.1 200 OK
Date: Tue, 16 Nov 2010 04:20:15 GMT
Server: Apache/2.2.3 (CentOS) DAV/2 PHP/5.1.6 mod_perl/2.0.4 Perl/v5.8.8
X-Powered-By: PHP/5.1.6
Connection: close
Content-Type: text/html; charset=GB2312
[root@1314it conf]#
修改主配置文件 httpd.conf
ServerSignature Off
ServerTokens Prod
重启 apache 测试