作者归档:SK

关于SK

服务器维护 服务器配置 服务器 维护 运维 网管 系统调优 网络调优 数据库优化

简单统计SQLSERVER用户数据表大小(包括记录总数和空间占用情况)

在SQLSERVER,简单的组合sp_spaceused和sp_MSforeachtable这两个存储过程,可以方便的统计出用户数据表的大小,包括记录总数和空间占用情况,非常实用,在SqlServer2K和SqlServer2005中都测试通过。

1. exec sp_spaceused ‘表名’            (SQL统计数据,大量事务操作后可能不准)
2. exec sp_spaceused ‘表名’, true       (更新表的空间大小,准确的表空大小,但可能会花些统计时间)
3. exec sp_spaceused                    (数据库大小查询)
4. exec sp_MSforeachtable “exec sp_spaceused ‘?’”     (所有用户表空间表小,SQL统计数据,,大量事务操作后可能不准)
5. exec sp_MSforeachtable “exec sp_spaceused ‘?’,true”    (所有用户表空间表小,大数据库慎用)

create table #t(name varchar(255), rows bigint, reserved varchar(20), data varchar(20), index_size varchar(20), unused varchar(20))
exec sp_MSforeachtable “insert into #t exec sp_spaceused ‘?’”
select * from #t
drop table #t

另外还有sp_MSforeachdb可以遍历所有数据库,使用方法详见SQL帮助。

apache使用ssl的记录

apache使用ssl的记录
我们某个电商客户需要使用ssl通过国外的某个安全认证,所以需要购买了赛门铁克许可的ssl证书。以下是一些记录:
1.apache2.0.64的版本编译ssl模块的时候有点需要注意,centos 6.4 64bit是我们目前的操作系统版本。但是openssl包都是1.x版本的了。
apache 2.0.64的ssl模块是需要openssl 0.9.8系列的文件,所以一直编译不过,最后发现才是一个bug。解决方法就是单独使用openssl 0.9.8来
编译mod_ssl模块。
2.加载好ssl后配置ssl.conf文件
3.赛门铁克的证书分为两种格式x509和pkcs。我们使用x509就是了。
再得到许可的证书前,需要给他们提供许可证和私密,他们再给你提供通用浏览器的公用许可证了。
4.生成私密key和授权文件csr
openssl genrsa -out www.:.key 2048
openssl req -new -key www.:.com.key -out www.:.com.csr
5.向他们提供文件后得到x509的颁发证书。
6.ssl配置文件内容为:

SSLSessionCache dbm:/opt/apache2/logs/ssl_scache
SSLSessionCacheTimeout 300
NameVirtualHost *:443
<VirtualHost *:443>
ServerName www.sklinux.com
DocumentRoot /webroot/sklinux.com/public_html
ServerAdmin sk@sklinux.com
UseCanonicalName Off
Options FollowSymLinks
AllowOverride None
Order deny,allow
allow from all
</Directory>
DirectoryIndex index.php
SSLEngine on
AddType application/x-x509-ca-cert .crt
AddType application/x-pkcs7-crl .crl
SSLCertificateFile /opt/apache2/conf/ssl/sklinux.com.crt
SSLCertificateKeyFile /opt/apache2/conf/ssl/sklinux.com.key
SSLSessionCacheTimeout 300
SSLCACertificatePath /opt/apache2/conf/ssl
#SSLCACertificateFile /opt/apache2/conf/ssl/sklinux.com.crt
SSLVerifyClient require
SSLVerifyDepth 1
SSLOptions +StdEnvVars
</VirtualHost>

Rsync原理以及使用

Rsync使用的Rsync演算法来使本地和远程两个主机之间的文件达到同步,这个算法只传送两个文件的不同部分,而不是每次都整份传送,因此速度相当快。 核心算法 假定在名为和的两台计算机之间同步相似的文件A与B,其中对文件A拥有访问权,对文件B拥有访问权

Rsync使用所谓的“Rsync演算法”来使本地和远程两个主机之间的文件达到同步,这个算法只传送两个文件的不同部分,而不是每次都整份传送,因此速度相当快。

算法核心部分:

假定在名为α和β的两台计算机之间同步相似的文件A与B,其中α对文件A拥有访问权,β对文件B拥有访问权。并且假定主机α与β之间的网络带宽很小。那么rsync算法将通过下面的五个步骤来完成:

1.β将文件B分割成一组不重叠的固定大小为S字节的数据块。最后一块可能会比S 小。

2.β对每一个分割好的数据块执行两种校验:一种是32位的滚动弱校验,另一种是128位的MD4强校验。

3.β将这些校验结果发给α。

4.α通过搜索文件A的所有大小为S的数据块(偏移量可以任选,不一定非要是S的倍数),来寻找与文件B的某一块有着相同的弱校验码和强校验码的数据块。这项工作可以借助滚动校验的特性很快完成。

5.α发给β一串指令来生成文件A在β上的备份。这里的每一条指令要么是对文件B经拥有某一个数据块而不须重传的证明,要么是一个数据块,这个数据块肯定是没有与文件B的任何一个数据块匹配上的。
继续阅读

如何做到linux系统安全

现在发行的各种linux中,red hat的企业版相对来说比较安全。对于一般的linux版本来说,我们如何保证系统的安全。或者系统安全需要关注哪些方面?这就是本次要讨论的要点。
linux系统的安全主要通过以下几个部分进行重点保护:文件系统保护、用户管理安全、进程的保护、以及日志的管理。
文件系统保护
首先linux系统中有这么一个概念:“一切皆文件”。那么对文件的管理就是通过文件系统进行实现的。如何对文件系统进行管理?linux中已经存在了基本的对文件权限的设置。现在主要介绍一款检测文件系统的工具。tripwire。
Tripwire是目前最为著名的unix下文件系统完整性检查的软件工具,这一软件采用的技术核心就是对每个要监控的文件产生一个数字签名,保留下来。当文件现在的数字签名与保留的数字签名不一致时,那么现在这个文件必定被改动过了。
那么知道了tripwire是干什么的了,现在介绍如何安转。不是一般软件安装都是三部曲吗?./configure    、 make、 make install
对,该软件的安装页需要上述几步,但是该软件还需要生成一个基准数据库。使用命令 #tripwire –init
该软件的工作原理是:首先使用特定的特征码函数,为需要监视的系统文件和目录建立一个特征数据库,这里的特征码就是使用了hash函数,使得任意长度的文件产生固定大小的值。通过保存该值与现有的文件或目录的hash值进行比较,如果结果相同,则说明该文件没有被改动,否则视文件被改动。
具体的安装步骤可以在网上查看。安装好之后就可以使用该工具对系统进行检查,默认是对整个系统进行检测,这里我们可以在某个目录下对文件进行检测,使用命令#tripwire –check.运行该命令之后会产生哪些文件是新增的、哪些改动过。
用户管理安全
用户管理这里主要涉及用户登录密码和用户管理。这里主要介绍一款工具来查看自己的密码是否相对安全。john the ripper

John the Ripper免费的开源软件,是一个快速的密码破解工具,用于在已知密文的情况下尝试破解出明文的破解密码软件,支持目前大多数的加密算法, 如DES、MD4、MD5等。它支持多种不同类型的系统架构,包括Unix、Linux、Windows、DOS模式、BeOS和OpenVMS,主要目 的是破解不够牢固的Unix/Linux系统密码。目前的最新版本是John the Ripper 1.7.3版,针对Windows平台的最新免费版为John the Ripper 1.7.0.1版。
John the Ripper的官方网站: http://www.openwall.com/john/

如何安装,首先解压源码包之后进入解压包中的src目录,然后执行make、make clean linux-x86-any.
安装好之后可以进入到run目录下进行测试,执行./john -test.该结果给出了解密需要的一些时间

上面的salts指用户数,针对传统的DES解密速度为413414次/秒。

测试完之后就可以进行解密,该命令含有很多参数,这里只讲述简单的方式。使用命令#./john -single “/etc/shadow”就可以显示存在/etc/shadow中的用户及对应密码。

该结果显示了我的密码之前已经被破解了(这运行之前我已经运行了该命令一次)。如果john已经破解了用户的密码,她就回将解密的密码放到当前目录的john.pot文件中。
比如查看这个文件显示
$6$V04bcTXNnRgUepZa$SFlIYTUDAkC9rlajU1oO4AozREGzGZrZvKocUkBtOOnlS9qJ/tt8VpV5jk9YIdEhPfIjs7LJ0IDUkI6sGxCZq0:wuyaalan
:前面的部分是用户的密文,后面是对应用户的密码。

当然如果简单的方式不能破解,可以使用字典解密。字典解密的成功与否是由字典是否完整为依据的。如果再有比较强的密码可以结合-rules、-incremental、-rexternal等等。基本命令的使用查看john手册。

进程安全
很多的入侵都是通过进程实现的,所以我们要时刻监视某些比较重要的进程。看其是否有不寻常的变化。这里主要通过linux里面的命令查看:主要有:who 、w 、ps、top
日志管理
如果系统被入侵了,并且入侵者在没修改日志的情况下,我们可以通过查看日志来回放入侵行为。
在linux中主要有3个主要的日志子系统:链接时间日志、进程统计日志、错误日志。
链接时间日志记录在/var/log/wtmp和/var/log/utmp中,用于跟踪谁何时登录了系统。其中utmp记录当前登录用户的信息;wtmp记录了用户登录系统和退出的时间记录。以上两个文件都是二进制文件。
进程统计日志给系统中的基本服务提供命令使用统计。
错误日志有syslogd后台进程记录,系统中各种守护进程、用户程序需要通过调用syslog向文件/var/log/messages记录相关事件。

用户程序以及内核如何通过syslog记录消息。
用户程序首先通过syslog库函数将用户消息通过syslogd后台进程输出到log文件。
内核里面产生日志通过printk将消息写入到一个环形缓冲区,如果环形缓冲区填满,printk在缓冲区的开始位置填写数据。然后通过系统调用syslog将消息发送到klogd后台进程,klogd监听    并得到内核消息之后,发送到syslogd后台进程,最后写入到log中。
这里使用的基本命令有:who、users、last、ac、lastlog等等。

我们的logo

服务器专业维护

 

我们将一如既往地为大家提供优秀的、专业的linux维护服务,力求为大家的站点带来舒适的用户体验。 告别烦琐维护,享受互联网生活!

xenserver的不足

1.xenserver6.1虚拟的2.4内核linux运行异常,不稳定,vm经常死机,启动过程中就死掉了。

2.io设备多个不能识别正常。

3.网卡型号不能指定切换。

haproxy做代理后端nginx获取客户端真实ip注意事项

当使用haproxy与nginx做负载均衡时,由于每次都是代理服务器与后端web服务器直接通信,
因此后端的web服务器为了获取用户的真实IP都要让代理服务器添加一个X-Forwarded-For header。
在haproxy里可以设置
option forwardfor header Client-IP
不过仅仅设置这个是不够的,这与haproxy的代理模式有关。haproxy使用的是”tunnel mode”,在文档里是这样说的
By default HAProxy operates in a tunnel-like mode with regards to persistent
connections: for each connection it processes the first request and forwards
everything else (including additional requests) to selected server. Once
established, the connection is persisted both on the client and server
sides. Use “option http-server-close” to preserve client persistent connections
while handling every incoming request individually, dispatching them one after
another to servers, in HTTP close mode. Use “option httpclose” to switch both
sides to HTTP close mode. “option forceclose” and “option
http-pretend-keepalive” help working around servers misbehaving in HTTP close
mode.

………………………..

It is important to note that by default, HAProxy works in tunnel mode and
only inspects the first request of a connection, meaning that only the first
request will have the header appended, which is certainly not what you want.
In order to fix this, ensure that any of the “httpclose”, “forceclose” or
“http-server-close” options is set when using this option.
这段说的非常清楚了,也就是在默认的情况下haproxy与客户端和服务端都是会话保持的了。如果有用户A、B同时
访问代理服务器,那么很可能只有第一个用户的header会被发给服务器。可以参考如下模型
[CON] [REQ1] [REQ2] … [RESP1] [RESP2] [CLO] …
所以如果我们想要让后端web服务器每次都能获取到用户的IP,在haproxy里只能添加
A.
option forwardfor header Client-IP
option httpclose # client–短连接–haproxy–短连接—webserver
或者
B
option forwardfor header Client-IP
option http-server-close #client–长连接–haproxy–短连接–webserver

但是此时haproxy与后端每次都只能使用短链接,实际上不是太理想。因为我们往往不希望代理服务器对每次处理用户的一个新请求都往服务器再新发一个请求。不过目前为止haproxy还不支持与后端服务器的keepalive,不知道在1.5里到底会不会实现。
People often ask for SSL and Keep-Alive support. Both features will complicate the code and render it fragile for several releases. By the way, both features have a negative impact on performance :

Having SSL in the load balancer itself means that it becomes the bottleneck. When the load balancer’s CPU is saturated, the overall response times will increase and the only solution will be to multiply the load balancer with another load balancer in front of them. the only scalable solution is to have an SSL/Cache layer between the clients and the load balancer. Anyway for small sites it still makes sense to embed SSL, and it’s currently being studied. There has been some work on the CyaSSL library to ease integration with HAProxy, as it appears to be the only one out there to let you manage your memory yourself.
Keep-alive was invented to reduce CPU usage on servers when CPUs were 100 times slower. But what is not said is that persistent connections consume a lot of memory while not being usable by anybody except the client who openned them. Today in 2009, CPUs are very cheap and memory is still limited to a few gigabytes by the architecture or the price. If a site needs keep-alive, there is a real problem. Highly loaded sites often disable keep-alive to support the maximum number of simultaneous clients. The real downside of not having keep-alive is a slightly increased latency to fetch objects. Browsers double the number of concurrent connections on non-keepalive sites to compensate for this. With version 1.4, keep-alive with the client was introduced. It resulted in lower access times to load pages composed of many objects, without the cost of maintaining an idle connection to the server. It is a good trade-off. 1.5 will bring keep-alive to the server, but it will probably make sense only with static servers.

However, I’m planning on implementing both features in future versions, because it appears that there are users who mostly need availability above performance, and for them, it’s understandable that having both features will not impact their performance, and will reduce the number of components.
之前nginx的upstream模块里面只支持http 1.0,不支持与后端服务器的keepalive。令人高兴的是现在开发版nginx的upstream模块里支持对后端服务器的keepalive了,测试了一下还不错

worker_processes 1;
events {
use epoll;
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
log_format main ‘$remote_addr – $remote_user [$time_local] “$request” ‘
‘$status $body_bytes_sent “$http_referer” ‘
‘”$http_user_agent” “$http_x_forwarded_for”‘;
access_log logs/access.log main;
sendfile on;
keepalive_timeout 65;
gzip on;
server {
listen 80;
server_name localhost;
location / {
root html;
index index.html index.htm;
proxy_http_version 1.1;
proxy_set_header Connection “”;
proxy_pass http://http;
proxy_set_header Host $host;
proxy_set_header Client_IP $remote_addr;
proxy_set_header X-Forwarded-By $server_addr:$server_port;

}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
upstream http{
server 10.13.20.3:80;
keepalive 200 single;
}
}
测试的时候可以看到每次请求后nginx没有直接关闭后后端服务器的链接,新的请求进来后后端服务器也没有新增链接。

从haproxy去年的邮件列表里看到过有用户提出的这个问题,Willy最后去回复了,估计以后haproxy也会支持的。

http://www.serverphorums.com/read.php?10,301582

php代码中的一些优化技巧

1.尽量静态化:

如果一个方法能被静态,那就声明它为静态的,速度可提高1/4,甚至我测试的时候,这个提高了近三倍。
当然了,这个测试方法需要在十万级以上次执行,效果才明显。
其实静态方法和非静态方法的效率主要区别在内存:静态方法在程序开始时生成内存,实例方法在程序运行中生成内存,所以静态方法可以直接调用,实例方法要先成生实例,通过实例调用方法,静态速度很快,但是多了会占内存。
任何语言都是对内存和磁盘的操作,至于是否面向对象,只是软件层的问题,底层都是一样的,只是实现方法不同。静态内存是连续的,因为是在程序开始时就生成了,而实例申请的是离散的空间,所以当然没有静态方法快。
静态方法始终调用同一块内存,其缺点就是不能自动进行销毁,而是实例化可以销毁。 继续阅读

如何刷新你的DNS缓存

运行:ipconfig /displaydns这个命令,查看一下本机已经缓存了那些的dns信息的,然后输入下面的命令

ipconfig /flushdns

这时本机的dns缓存信息已经清空了,我们可以再次输入第一次输入的命令来看一下,

ipconfig /displaydns

ipconfig /displaydns显示dns缓存

ipconfig /flushdns 刷新DNS记录

ipconfig /renew重请从DHCP服务器获得IP

先可以输入ipconfig /displaydns显示dns缓存根据显示结果你可以很直观的看到现在你的DNS所指上的IP,然后运行ipconfig /flushdns 刷新DNS记录和ipconfig /renew重请从DHCP服务器获得IP就可以了,如果一次刷新没有用,可以多次用ipconfig /flushdns进行刷新

ffmpeg在win2003上的配置

windows下PHP通过ffmpeg给上传的视频截图详解,php_ffmpeg.dll安装下载,找了很久php_ffmpeg.dll的下载地址和应用,发现有用的资源很少,现在问题解决了,贴出来跟大家分享一下:

首先要安装PHP的ffmpeg扩展,我们需要php_ffmpeg.dll文件和一些其他的辅助文件,这里整理了一下提供给大家:

ffmpeg-php-win32-all.rar:点击下载附件

解压后你将得到5个文件,将avcodec-51.dll, avformat-51.dll, avutil-49.dll, pthreadGC2.dll这四个文件拷贝到windows\system32文件夹下面,将php_ffmpeg.dll文件拷贝到PHP扩展目录(扩展目录是你php.ini中extension_dir = “D:\xampp\php\ext\”的配置项)

修改apache\bin文件夹下的php.ini文件(注意:如果你修改的是php/下面的php.ini文件并不会载入php_ffmpeg.dll) 加入extension=php_ffmpeg.dll 并去掉extension=php_gd2.dll, extension=php_gettext.dll前的分号

重启你的Apache,使用phpinfo()函数查看一下配置信息,发现有如下项,说明配置成功!
12

实际是上面4个文件还需要拷贝到php相应的目录中,才能成功!