十二月, 2007


31
十二 07

2007年就要过去了,我很怀念她!

  2006年年末的时候,我写过这个题目。转眼间又到了2007年年末。真是时光如水,生命如歌,转眼间就到了2008年。

  2007年,对我来说,是重要的一年。

  2007年,我完成了自己职业生涯里的第一次辞职,从一个第一份工作的地方依然决然的离开,再辗转反复地来到上海现在的公司,见到了传说中的车东,结实了新的同事和朋友:程序员jay梨子、客户经理聂源昊,还有站务小神龙夏天,办公室里人见人爱、花见花开的站务小忧,“楼下最漂亮的那个”助理wendy、精明能干的客户经理五月,超级无厘头的HR小吞,头发极有个性的美工老乡李飞……还有和六年前在哈尔滨认识的朋友Arlind在上海相聚;在临离开郑州之前,认识了王紫小倩;在十一的旅行途中,认识了小梅小妖……

  2007年,文明依然决然地离开郑州去到深圳寻求发展,并且成功地从出版、发行行业转型到IT技术行业;晓宾结束了郁闷的单身生活,准备于08年初结婚了;Augusting在年末依然决定回郑州帮助姐姐打理生意;赵琳琳在这一年把自己签到的了天津;李雅琳把自己签到了杭州;王洋为了自己的理想和目标依然在踽踽独行,不断追寻;王静波也有了男友,现在一心忙着签工作了;路锦一直静心求学,2008年有出国深造的可能性;贾慧把自己签到了北京,算是一个北京人了;周倩在把自己签到了华为;张艳在工作了几年之后,又重返校园修研计算机研士,07年对于她、对于我都有一段刻骨铭心的痛苦,在新郑大的咖啡厅里,在校园的体育场旁边,还有她的“数据挖搅”教室里,我们曾经一起渡过……小毛终于在网通等到了机会,转成了正式员工,只是被调到了新政网通。十四早我一步辞职,离开网通,然后因为种种原因,关闭了公司,后来又因为感情上的一时冲动,送掉了自己辛辛苦苦经营的服装店,然后继续做自己的IT soho一族。jerry在漯河移动稳步发展,大概2008年能调回郑州了。昌盛也签在了北京,地道的北京人了。老魏也终于在这一年放弃了自己的职业,依然决然投入到自己爱好的IT行业;阿光在年末把自己签到了华为;赵凡很神奇地携女友来到了上海,并且签下了自己的第一份工作;连良把自己献给了家乡;与宋透杰相约的见面2007年没有完成,2008年一定要兑现……

  2007年,我妈终于开始催我找女朋友了;2008年,我要真的忘记过去,重新开始了。

  2008年,我希望我的每一个朋友都越来越好,希望我可以在上海有新的突破。

  2008年,我们大家都会越来越好,一切都会越来越好。


29
十二 07

Debian GNU/Linux 4.0安装记录

注释/etc/apt/sources.list里的CD-ROM源

安装openssh-server
apt-get install

vi /etc/network/interface
修改ip设置

vi /etc/modprobe.d/blacklist

vi /etc/inittab

reboot

vi /etc/hosts.allow

apt-get update
apt-get upgrade

apt-get install nagios-nrpe-server
apt-get install nagios-plugins-basic
apt-get install nagios-plugins
apt-get install screen


27
十二 07

screendump

  前两天还在为实现这个目的而苦闷,今天居然让我无意中tab出来这个工具,我用的Debian GNU/Linux 4.0。

  screendump – dump the contents of a virtual console to stdout

  就是把显示器的内容dump到标准输出(一般是当前终端)。有时候的一些系统内核输出信息是打印到屏幕上的,而管理员又不能实时监控着显示器,这个工具就可以用来查看显示器上的内容了。

  另外,假如没有screendump可用,那么就用 cat /dev/vcs 吧。


26
十二 07

Dell PowerEdge 860 安装Debian GNU/Linux 4.0 (i386) 时使用LVM遇到Waiting for root filesystem

  Dell PowerEdge 860 安装Debian GNU/Linux 4.0 (i386) 时,我使用了LVM,结果在重启的过程中遇到了找不到卷组,Waiting for root filesystem的提示。不排除是我这台设备的问题。由于时间关系,我没有在其它同型号设备上做LVM安装。

我现在就在机房安装PE860,发现重启的时候偶尔会遇到LVM不工作,提示找不到vg0(卷组)。实际上是遇到了两次,第一次还以为是安装问题,第二次又出现,就有些担心了,于是不敢在这台设备上使用LVM。不得不再重装一次。

补充,貌似不是LVM的问题,在安装第二台的时候,没有使用LVM,但在重启之后,也出现了一次Waiting for root filesystem……

找到一篇全英的文章:

大致的解决办法是,假如真的完全进入不了系统(我还是比较幸运的,只是偶尔进不去系统),可以用急救盘启动,然后

chroot /mnt/debian /bin/bash

apt-get upgade

apt-get install udev


22
十二 07

Linux性能分析工具

vmstst, ps, top, free,sysstat(sar,mpstat,iostat)

Linux在具有高稳定性、可靠性的同时,具有很好的可伸缩性和扩展性,能够针对不同的应用和硬件环境调整,优化出满足当前应用需要的最佳性能。因此企业在维护Linux系统、进行系统调优时,了解系统性能分析工具是至关重要的。
在Linux下有很多系统性能分析工具,比较常见的有top、free、ps、time、timex、uptime等。下文将介绍几个较为重要的性能分析工具vmstat、iostat和sar及其使用。

用vmstat监视内存使用情况

vmstat是Virtual Meomory Statistics(虚拟内存统计)的缩写,可对操作系统的虚拟内存、进程、CPU活动进行监视。它是对系统的整体情况进行统计,不足之处是无法对某个进程进行深入分析。

vmstat的语法如下:

程序代码
vmstat [-V] [-n] [delay [count]]

其中,-V表示打印出版本信息;-n表示在周期性循环输出时,输出的头部信息仅显示一次;delay是两次输出之间的延迟时间;count是指按照这个时间间隔统计的次数。对于vmstat输出各字段的含义,可运行man vmstat查看。

用iostat监视I/O子系统情况

iostat是I/O statistics(输入/输出统计)的缩写,iostat工具将对系统的磁盘操作活动进行监视。它的特点是汇报磁盘活动统计情况,同时也会汇报出CPU使用情况。同vmstat一样,iostat也有一个弱点,就是它不能对某个进程进行深入分析,仅对系统的整体情况进行分析。

iostat的语法如下:

程序代码
iostat [ -c | -d ] [ -k ] [ -t ] [ -V ] [ -x [ device ] ] [ interval [ count ] ]

其中,-c为汇报CPU的使用情况;-d为汇报磁盘的使用情况;-k表示每秒按kilobytes字节显示数据;-t为打印汇报的时间;-v表示打印出版本信息和用法;-x device指定要统计的设备名称,默认为所有的设备;interval指每次统计间隔的时间;count指按照这个时间间隔统计的次数。

iostat一般的输出格式如下:
程序代码

Linux 2.4.18-18smp (builder.linux.com) 2003年03月07日

avg-cpu: %user %nice %sys %idle
4.81 0.01 1.03 94.15

Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn
dev3-0 30.31 1117.68 846.52 16104536 12197374
dev3-1 7.06 229.61 40.40 3308486 582080

对于输出中各字段的含义,iostat的帮助中有详细的说明。
使用sar进行综合分析

表1 sar参数说明

选项 功能

-A 汇总所有的报告

-a 报告文件读写使用情况

-B 报告附加的缓存的使用情况

-b 报告缓存的使用情况

-c 报告系统调用的使用情况

-d 报告磁盘的使用情况

-g 报告串口的使用情况

-h 报告关于buffer使用的统计数据

-m 报告IPC消息队列和信号量的使用情况

-n 报告命名cache的使用情况

-p 报告调页活动的使用情况

-q 报告运行队列和交换队列的平均长度

-R 报告进程的活动情况

-r 报告没有使用的内存页面和硬盘块

-u 报告CPU的利用率

-v 报告进程、i节点、文件和锁表状态

-w 报告系统交换活动状况

-y 报告TTY设备活动状况

sar是System Activity Reporter(系统活动情况报告)的缩写。顾名思义,sar工具将对系统当前的状态进行取样,然后通过计算数据和比例来表达系统的当前运行状态。它的特点是可以连续对系统取样,获得大量的取样数据;取样数据和分析的结果都可以存入文件,所需的负载很小。sar是目前Linux上最为全面的系统性能分析工具之一,可以从14个大方面对系统的活动进行报告,包括文件的读写情况、系统调用的使用情况、串口、CPU效率、内存使用状况、进程活动及IPC有关的活动等,使用也是较为复杂。

sar的语法如下:
程序代码

sar [-option] [-o file] t [n]

它的含义是每隔t秒取样一次,共取样n次。其中-o file表示取样结果将以二进制形式存入文件file中。

另一种语法如下: 程序代码
sar [-option] [-s time] [-e time] [-i sec] [-f file]

含义是表示从file文件中取出数据,如果没有指定-f file,则从标准数据文件/var/adm/sa/sadd取数据,其中dd表示当前天。另外,-s time表示起始时间;-e time表示停止时间;-i sec表示取样的时间间隔,如果不指定则表示取文件中所有的数据。对于具体的选项参见表1。

一般它与-q和-u联合使用,以便对每个CPU的使用情况进行分析,比如运行如下命令:

程序代码
sar -q -u 5 1

将输出如下:
程序代码
Linux 2.4.18-18smp (builder.linux.com) 2003年03月07日

09时46分16? CPU %user %nice %system %idle
09时46分21? all 0.20 0.00 0.00 99.80

09时46分16? runq-sz plist-sz ldavg-1 ldavg-5
09时46分21? 0 91 0.00 0.00

Average: CPU %user %nice %system %idle
Average: all 0.20 0.00 0.00 99.80

Average: runq-sz plist-sz ldavg-1 ldavg-5
Average: 0 91 0.00 0.00


21
十二 07

mod_rewrite中的正则

文本
  .           任意一个单字符
  [chars]     字符类: "chars"中的任意一个字符
  [^chars]    字符类: 不在"chars"中的字符
  text1|text2 选择: text1 或 text2

量词
  ?           前面的字符出现 0 或 1 次
  *           前面的字符出现 0 或 N 次(N > 0)
  +           前面的字符出现 1 或 N 次(N > 1)

分组
  (text)      text 组
              (常用于设置一个选择的边界,或用于生成后引用:
               在RewriteRule中可以用 $N 引用第N个分组)


  ^           锚定到行首
  $           锚定到行尾

转义
  \c          对给定的字符c进行转义
              (比如对".[]()"进行转义,等等)

19
十二 07

Apache条件认证

参考:http://www.lslnet.com/linux/dosc1/50/linux-339195.htm

RewriteEngine on
RewriteCond %{Request_URI} .*/45-40/.*-------如果url包含45-40的目录
RewriteCond %{REMOTE_HOST} ^210.78.111.222$--而且是来自210.78.111.222
RewriteRule .* - [E=allow_in:yes,L]----------设置环境变量allow_in=yes,并且停止RewriteRule

RewriteCond %{HTTP_USER_AGENT} .*OpenWave.*–如果HTTP头里包含OpenWave
RewriteCond %{REMOTE_HOST} ^210.78.13.4$—–而且是来自210.78.13.4
RewriteRule .* – [E=allow_in:yes,L]———-设置环境变量allow_in=yes,并且停止RewriteRule

<Location />;

Order Allow,Deny—————————–访问控制,顺序是允许,拒绝,默认是拒绝
Allow from env=allow_in———————-如果设置了allow_in环境变量,则允许通过
Allow from 127.0.0.1 200.200.200.200/26——允许localhost和200.200.200.200/26网段的主机访问

AuthType Basic——————————-访问认证
AuthName “认证”
AuthUserFile /usr/local/apache/conf/passwd—密码文件位置
Require valid-user—————————要求合法的用户

Satisfy any———————————-只要符合上边的allow或Auth之一,就允许通过

</Location>;

访问过程:如果在allow列表里则允许通过,否则要求Auth,Auth没有通过则拒绝


14
十二 07

Apache的几个重要模块

mod_expires

说 明: 允许通过配置文件控制HTTP的”Expires”和”Cache-Control”头内容
状 态:扩展(E)
模块名:expires_module
源文件:mod_expires.c

概述

这个模块控制服务器应答时的Expires头内容和Cache-Control头的max-age指令。有效期(expiration date)可以设置为相对于源文件的最后修改时刻或者客户端的访问时刻。

这些HTTP头向客户端表明了文档的有效性和持久性。如果有缓存,文档就可以从缓存(除已经过期)而不是从服务器读取。接着,客户端考察缓存中的副本,看看是否过期或者失效,以决定是否必须从服务器获得更新。

要修改Cache-Control头中max-age(参见RFC 2616 section 14.9)项之外的内容,你还可以使用Header指令。


13
十二 07

ipvs的八种调度方法

  1. 轮叫(Round Robin)
    调度器通过”轮叫”调度算法将外部请求按顺序轮流分配到集群中的真实服务器上,它均等地对待每一台服务器,而不管服务器上实际的连接数和系统负载。
  2. 加权轮叫(Weighted Round Robin)
    调度器通过”加权轮叫”调度算法根据真实服务器的不同处理能力来调度访问请求。这样可以保证处理能力强的服务器处理更多的访问流量。调度器可以自动问询真实服务器的负载情况,并动态地调整其权值。
  3. 最少链接(Least Connections)
    调度器通过”最少连接”调度算法动态地将网络请求调度到已建立的链接数最少的服务器上。如果集群系统的真实服务器具有相近的系统性能,采用”最小连接”调度算法可以较好地均衡负载。
  4. 加权最少链接(Weighted Least Connections)
    在集群系统中的服务器性能差异较大的情况下,调度器采用”加权最少链接”调度算法优化负载均衡性能,具有较高权值的服务器将承受较大比例的活动连接负载。调度器可以自动问询真实服务器的负载情况,并动态地调整其权值。
  5. 基于局部性的最少链接(Locality-Based Least Connections)
    ” 基于局部性的最少链接” 调度算法是针对目标IP地址的负载均衡,目前主要用于Cache集群系统。该算法根据请求的目标IP地址找出该目标IP地址最近使用的服务器,若该服务器 是可用的且没有超载,将请求发送到该服务器;若服务器不存在,或者该服务器超载且有服务器处于一半的工作负载,则用”最少链接”的原则选出一个可用的服务 器,将请求发送到该服务器。
  6. 带复制的基于局部性最少链接(Locality-Based Least Connections with Replication) “带复制的基于局部性最少链接”调度算法也是针对目标IP地址的负载均衡,目前主要用于Cache集群系统。它与LBLC算法的不同之处是它要维护从一个 目标IP地址到一组服务器的映射,而LBLC算法维护从一个目标IP地址到一台服务器的映射。该算法根据请求的目标IP地址找出该目标IP地址对应的服务 器组,按”最小连接”原则从服务器组中选出一台服务器,若服务器没有超载,将请求发送到该服务器,若服务器超载;则按”最小连接”原则从这个集群中选出一 台服务器,将该服务器加入到服务器组中,将请求发送到该服务器。同时,当该服务器组有一段时间没有被修改,将最忙的服务器从服务器组中删除,以降低复制的 程度。
  7. 目标地址散列(Destination Hashing)
    “目标地址散列”调度算法根据请求的目标IP地址,作为散列键(Hash Key)从静态分配的散列表找出对应的服务器,若该服务器是可用的且未超载,将请求发送到该服务器,否则返回空。
  8. 源地址散列(Source Hashing)
    “源地址散列”调度算法根据请求的源IP地址,作为散列键(Hash Key)从静态分配的散列表找出对应的服务器,若该服务器是可用的且未超载,将请求发送到该服务器,否则返回空。

11
十二 07

HTTP协议状态码的含义

.  HTTP协议状态码的含义

号码 含义
—————————————–
“100″ : Continue
“101″ : witching Protocols
“200″ : OK
“201″ : Created
“202″ : Accepted
“203″ : Non-Authoritative Information
“204″ : No Content
“205″ : Reset Content
“206″ : Partial Content
“300″ : Multiple Choices
“301″ : Moved Permanently
“302″ : Found
“303″ : See Other
“304″ : Not Modified
“305″ : Use Proxy
“307″ : Temporary Redirect
“400″ : Bad Request
“401″ : Unauthorized
“402″ : Payment Required
“403″ : Forbidden
“404″ : Not Found
“405″ : Method Not Allowed
“406″ : Not Acceptable
“407″ : Proxy Authentication Required
“408″ : Request Time-out
“409″ : Conflict
“410″ : Gone
“411″ : Length Required
“412″ : Precondition Failed
“413″ : Request Entity Too Large
“414″ : Request-URI Too Large
“415″ : Unsupported Media Type
“416″ : Requested range not satisfiable
“417″ : Expectation Failed
“500″ : Internal Server Error
“501″ : Not Implemented
“502″ : Bad Gateway
“503″ : Service Unavailable
“504″ : Gateway Time-out
“505″ : HTTP Version not supported


10
十二 07

特殊的目录\文件名"-"

建立:mkdir -

删除:rmdir -   / rm -rf -

进入目录:-

cd ./-


10
十二 07

特殊的目录\文件名”-”

建立:mkdir -

删除:rmdir -   / rm -rf -

进入目录:-

cd ./-


6
十二 07

MySql数据库的字段类型

MySQL数据库的表是一个二维表,由一个或多个数据列构成。
每个数据列都有它的特定类型,该类型决定了MySQL如何看待该列数据,我们可以把整型数值存放到字符类型的列中,MySQL则会把它看成字符串来处理。
MySQL中的列类型有三种:数值类、字符串类和日期/时间类。
从大类来看列类型和数值类型一样,都是只有三种。但每种列类型都还可细分。
下面对各种列类型进行详细介绍。

数值类的数据列类型
数值型的列类型包括整型和浮点型两大类。

TINYINT:1字节 非常小的正整数,带符号:-128~127,不带符号:0~255
SMALLINT:2字节 小整数,带符号:-32768~32767,不带符号:0~65535
MEDIUMINT:3字节 中等大小的整数,带符号:-8388608~8388607,不带符号:0~16777215
INT:4字节 标准整数,带符号:-2147483648~2147483647,不带符号:0~4294967295
BIGINT:8字节 大整数,带符号:-9223372036854775808~9233372036854775807,不带符号:0~18446744073709551615
FLOAT:4字节 单精度浮点数,最小非零值:+-1.175494351E-38,最大非零值:+-3.402823466E+38
DOUBLE:8字节 双精度浮点数,最小非零值:+-2.2250738585072014E-308,最大非零值:+-1.7976931348623157E+308
DECIMAL:M+2字节 以字符串形式表示的浮点数,它的取值范围可变,由M和D的值决定。

整型数据列类型

MySQL有五种整型数据列类型,即TINYINT,SMALLINT,MEDIUMINT,INT和BIGINT。它们之间的区别是取值范围不同,存储空间也各不相同。
在整型数据列后加上UNSIGNED属性可以禁止负数,取值从0开始。

声明整型数据列时,我们可以为它指定个显示宽度M(1~255),如INT(5),指定显示宽度为5个字符,如果没有给它指定显示宽度,MySQL会为它指定一个默认值。显示宽度只用于显示,并不能限制取值范围和占用空间,如:INT(3)会占用4个字节的存储空间,并且允许的最大值也不会是999,而是 INT整型所允许的最大值。

浮点型数据列类型

MySQL有三种浮点型数据列类型,分别是:FLOAT,DOUBLE和DECIMAL。
浮点类数据类型有一个最大可表示值和一个最小非零可表示值,最小非零可表示值决定了该类型的精确度。

MySQL 4.0.2版之后,FLOAT和DOUBLE都可以指定UNSIGNED属性。当指定该属性时,取值范围不平移到正数区间,而只是简单地把浮点类型的负数部份去掉。

浮点类型也有M(1~255)和D(1~30,且不能大于M-2)。分别表示显示宽度和小数位数。M和D在FLOAT和DOUBLE中是可选的,默认,当 MySQL版本大于3.23.6时,FLOAT和DOUBLE类型将被保存为硬件所支持的最大精度。DECIMAL的M和D值在MySQL3.23.6后可选,默认D值为0,M值为10。

如何选择数值类数据列类型?

为了节省存储空间和提高数据库处理效率,我们应根据应用数据的取值范围来选择一个最适合的数据列类型。如果把一个超出数据列取值范围的数存入该列,则 MySQL就会截短该值,如:我们把99999存入SMALLINT(3)数据列里,因为SMALLINT(3)的取值范围是-32768~32767,所以就会被截短成32767存储。显示宽度3不会影响数值的存储。只影响显示。

对于浮点数据列,存入的数值会被该列定义的小数位进行四舍五入。如把一个1.234存入FLOAT(6.1)数据列中,结果是1.2。

DECIMAL与FLOAT和DOUBLE的区别是:DECIMAL类型的值是以字符串的形式被储存起来的,它的小数位数是固定的。它的优点是,不会象 FLOAT和DOUBLE类型数据列那样进行四舍五入而产生误差,所以很适合用于财务计算;而它的缺点是:由于它的存储格式不同,CPU不能对它进行直接运算,从而影响运算效率。DECIMAL(M,D)总共要占用M+2个字节。

数值类数据列的属性

ZEROFILL属性适用于所有数值类数据列类型,作用是,如果数值的宽度小于定义的显示宽度,则在数值前填充0。
UNSIGNED属性不允许数据列出现负数。
AUTO_INCREMENT属性可生成独一无二的数字序列。只对整数类的数据列有效。
NULL和NOT NULL属性设置数据列是否可为空。
DEFAULT属性可为数据列指定默认值。

//////////////////////////////////////////////////////

字符串类数据列类型

字符串可以用来表示任何一种值,所以它是最基本的类型之一。
我们可以用字符串类型来存储图象或声音之类的二进制数据,也可存储用gzip压缩的数据。
下表介绍了各种字符串类型:

CHAR[(M)] M字节 M字节
VARCHAR[(M)] M字节 L+1字节
TINYBLOD,TINYTEXT 2^8-1字节 L+1字节
BLOB,TEXT 2^16-1字节 L+2
MEDIUMBLOB,MEDIUMTEXT 2^24-1字节 L+3
LONGBLOB,LONGTEXT 2^32-1字节 L+4
ENUM(‘value1′,’value2′,…) 65535个成员 1或2字节
SET(‘value1′,’value2′,…) 64个成员 1,2,3,4或8字节

L+1、L+2是表示数据列是可变长度的,它占用的空间会根据数据行的增减面则改变。数据行的总长度取决于存放在这些数据列里的数据值的长度。L+1或L +2里多出来的字节是用来保存数据值的长度的。在对长度可变的数据进行处理时,MySQL要把数据内容和数据长度都保存起来。

如果把超出字符串最大长度的数据放到字符类数据列中,MySQL会自动进行截短处理。

ENUM和SET类型的数据列定义里有一个列表,列表里的元素就是该数据列的合法取值。如果试图把一个没有在列表里的值放到数据列里,它会被转换为空字符串(“”)。

字符串类型的值被保存为一组连续的字节序列,并会根据它们容纳的是二进制字符串还是非二进制字符而被区别对待为字节或者字符:

二进制字符串被视为一个连续的字节序列,与字符集无关。MySQL把BLOB数据列和带BINARY属性的CHAR和VARCHAR数据列里的数据当作二进制值。

非二进制字符串被视为一个连续排列的字符序列。与字符集有关。MySQL把TEXT列与不带BINARY属性的CHAR和VARCHAR数据列里的数据当作二进制值对待。

在MySQL4.1以后的版本中,不同的数据列可以使用不同的字符集。在MySQL4.1版本以前,MySQL用服务器的字符集作为默认字符集。

非二进制字符串,即我们通常所说的字符串,是按字符在字符集中先后次序进行比较和排序的。而二进制字符串因为与字符集无关,所以不以字符顺序排序,而是以字节的二进制值作为比较和排序的依据。下面介绍两种字符串的比较方式:

二进制字符串的比较方式是一个字节一个字节进行的,比较的依据是两个字节的二进制值。也就是说它是区分大小写的,因为同一个字母的大小写的数值编码是不一样的。

非二进制字符串的比较方式是一个字符一个字符进行的,比较的依据是两个字符在字符集中的先后顺序。在大多数字符集中,同一个字母的大小写往往有着相同的先后顺序,所以它不区分大小写。

二进制字符串与字符集无关,所以无论按字符计算还是按字节计算,二进制字符串的长度都是一样的。所以VARCHAR(20)并不表示它最多能容纳20个字符,而是表示它最多只能容纳可以用20个字节表示出来的字符。对于单字节字符集,每个字符只占用一个字节,所以这两者的长度是一样的,但对于多字节字符集,它能容纳的字符个数肯定少于20个。

CHAR和VARCHAR

CHAR和VARCHAR是最常用的两种字符串类型,它们之间的区别是:

CHAR是固定长度的,每个值占用相同的字节,不够的位数MySQL会在它的右边用空格字符补足。

VARCHAR是一种可变长度的类型,每个值占用其刚好的字节数再加上一个用来记录其长度的字节即L+1字节。

CHAR(0)和VARCHAR(0)都是合法的。VARCHAR(0)是从MySQL4.0.2版开始的。它们的作用是作为占位符或用来表示各种on/off开关值。

如何选择CHAR和VARCHAR,这里给出两个原则:

如果数据都有相同的长度,选用VARCHAR会多占用空间,因为有一位用来存储其长度。如果数据长短不一,选用VARCHAR能节省存储空间。而CHAR不论字符长短都需占用相同的空间,即使是空值也不例外。

如果长度出入不大,而且是使用MyISAM或ISAM类型的表,则用CHAR会比VARCHAR好,因为MyISAM和ISAM类型的表对处理固定长度的行的效率高。

在一个数据表里,只要有一个数据列的长度是可变的,则所有数据列的长度将是可变的。MySQL会进行自动地转换。一个例外,CHAR长度小于4的不会进行自动转换,因为MySQL会认为这样做没必要,节省不了多少空间。反而MySQL会把大量长度小的VARCHAR转换成CHAR,以减少空间占用量。

BLOB和TEXT

BLOB是二进制字符串,TEXT是非二进制字符串。两者都可存放大容量的信息。

有关BLOB和TEXT索引的建立:

BDB表类型和MySQL3.23.2以上版本的MyISAM表类型允许在BLOB和TEXT数据列上建立索引。

ISAM、HEAP和InnoDB表不支持大对象列的索引。

使用BLOB和TEXT应注意的问题:

由于这两个列类型所存储的数据量大,所以删除和修改操作容易在数据表里产生大量的碎片,需定期运行OPTIMIZE TABLE以减少碎片和提高性能。

如果使用的值非常巨大,就需对服务器进行相应的优化调整,增加max_allowed_packet参数的值。对那些可会用到变些巨大数据的客户程序,也需加大它们的数据包大小。

ENUM和SET

ENUM和SET都是比较特殊的字符串数据列类型,它们的取值范围是一个预先定义好的列表。ENUM或SET数据列的取值只能从这个列表中进行选择。ENUM和SET的主要区别是:

ENUM只能取单值,它的数据列表是一个枚举集合。它的合法取值列表最多允许有65535个成员。例如:ENUM(“N”,”Y”)表示,该数据列的取值要么是”Y”,要么就是”N”。

SET可取多值。它的合法取值列表最多允许有64个成员。空字符串也是一个合法的SET值。

ENUM和SET的值是以字符串形式出现的,但在内部,MySQL以数值的形式存储它们。

ENUM的合法取值列表中的字符串被按声明定义的顺序被编号,从1开始。

SET的编号不是按顺序进行编号的,SET中每一个合法取值都对应着SET值里的一个位。第一个合法取值对应0位,第二个合法取值对应1位,以此类推,如果数值形式的SET值等于0,则说明它是一个空字符串,如果某个合法的取值出现在SET数据列里,与之对应的位就会被置位;如果某个合法的取值没有出现在 SET数据列里,与之对应的位就会被清零。正因为SET值与位有这样的对应关系,所以SET数据列的多个合法取值才能同时出现并构成SET值。

字符串类型数据列的字符集属性

在MySQL 4.1以前的版本,字符串数据列的字符集由服务器的字符决定,MySQL 4.1版以后的版本可对每个字符串数据列指定不同的字符串。如果按默认方式设置,可按数据列、数据表、数据库、服务器的顺序关联字符串的字符集,直到找一个明确定义的字符集。

/////////////////////////////////////////////////////////

日期,时间型数据列类型

DATE 1000-01-01~9999-12-31 3字节(MySQL3.23版以前是4字节 ) 0000-00-00
TIME -838:59:59~838:59:59 3字节 00:00:00
DATETIME 1000-01-01 00:00:00~9999-12-31 23:59:59 8字节 0000-00-00 00:00:00
TIMESTAMP 19700101000000~2037年的某个时刻 4字节 00000000000000
YEAR YEAR(4):1901~2155 YEAR(2):1970~2069 1字节 0000

MySQL总是把日期和日期里的年份放在最前面,按年月日的顺序显示。

DATE、TIME、DATATIME数据列类型

DATE、TIME和DATATIME类型分别存放日期值、时间值、日期和时间值的组合。它们的格式分别是“CCYY-MM-DD”、“hh:mm:ss”、“CCYY-MM-DD hh:mm:ss”。

DATATIME里的时间值和TIME值是有区别的,DATATIME里的时间值代表的是几点几分,TIME值代表的是所花费的时间。当向TIME数据列插值时,需用时间的完整写法,如12分30秒要写成“00:12:30”。

TIMESTAMP数据列类型

TIMESTAMP数据列的格式是CCYYMMDDhhmmss,取值范围从19700101000000开始,即1970年1月1号,最大到2037年。它的特点是能把数据行的创建或修改时间记录下来:

如果把一个NULL值插入TIMESTAMP列,这个数据列就将自动取值为当前的日期和时间。

在创建和修改数据行时,如果没有明确对TIMESTAMP数据列进行赋值,则它就会自动取值为当前的日期和时间。如果行中有多个TIMESTAMP列,只有第一个会自动取值。

如果对TIMESTAMP设置一个确定的日期和时间值,则会使TIMESTAMP的自动取值功能失效。

TIMESTAMP默认的列宽是14,可指定列宽,以改变显示效果。但不论你指定的列宽如何,MySQL都是以4字节来存储TIMESTAMP值,也总是以14位精度来计算。

如果需要把创建时间和最近一次修改时间同时记录下来,可以用两个时间戳来记录,一个记录创建时间,一个记录修改时间。不过需记住两件事,一是要把记录修改时间的TIMESTAMP数据列放在最前面,这样才会自动取值;二是创建一条新记录时,要用now()函数来初始化创建时间TIMESTAMP数据列,这样,该TIMESTAMP数据列就不会再变化。

YEAR

YEAR是一种单字节的数据列类型,YEAR(4)的取值范围是1901~2155,YEAR(2)的取值范围是1970~2069,但只显示最后两位数。MySQL能自动把两位数字年份转换成四位数字的年份,如97和14分被转换成1997和2014。转换规则是这样的:

年份值00~69将被转换成2000~2069;

年份值70~99将被转换成1970~1999。

00被转换成0000,而不是2000。因为数值00也就是0,而0值是YEAR的一个合法取值。


6
十二 07

产生唯一的文件名

mktemp

该工具是一个软件包,名字为:mktemp

Debian GNU/Linux :

apt-get install mktemp

CentOS GNU/Linux:

yum install mktemp


6
十二 07

Shell产生随机数

BASH Shell中有一个用于生成随机数的变量:RANDOM

这个变量的值是不断变化的,每次echo $RANDOM都会得到不同的值,在shell角本中可以做为随机数使用。

从别人的脚本里得到的一个获得随机数的方法:
rand() {
dd if=/dev/urandom bs=1 count=4 2>/dev/null | od -t u4 | awk ‘NR=1{print $2}’
}


6
十二 07

加密shell脚本

shc是一个加密shell脚本的工具.它的作用是把shell脚本转换为一个可执行的二进制文件.

用shell脚本对系统进行自动化维护,简单,便捷而且可移植性好.

但shell脚本是可读写的,很有可能会泄露敏感信息,如用户名,密码,路径,IP等.

同样,在shell脚本运行时会也泄露敏感信息.

shc是一个加密shell脚本的工具.它的作用是把shell脚本转换为一个可执行的二进制文件.

这就很好的解决了上述问题.

shc的下载地址:

http://www.anyside.com/linux/shc-3.8.tgz

http://www.datsi.fi.upm.es/~frosal/sources/shc-3.8.tgz

安装:

tar zxvf shc-3.8.tgz
cd shc-3.8
make test
make
make test
make strings
make install 这一步需要root权限

使用方法:

shc -r -f script-name 注意:要有-r选项, -f 后跟要加密的脚本名.

运行后会生成两个文件,script-name.x 和 script-name.x.c

script-name.x是加密后的可执行的二进制文件.

./script-name 即可运行.

script-name.x.c是生成script-name.x的原文件(c语言)

设定期限:

首先使用shc转化为二进制,并加上过期时间,如

./shc -e 12/06/2006 -m “please contact jdaoyou@sohu.com” -r -f flushvpn.sh

我一般在程序中加入自动更新系统时间的命令,防止用户更改系统时间。

注:在使用的过程中遇到不少问题,运行并不是直分理想。


5
十二 07

LVS实施笔记

在RS中建立一个lo:0接口,设置ip为vip地址,注意掩码要使用255.255.255.255。

当使用arping vip时,会有多个MAC地址回应,这是因为RS也响应了VS的arp查询。

sysctl -e net.ipv4.conf.all.arp_ignore=1

此时,RS即不再影响RS关于vip的ARP MAC查询了。

假如两台VS之间使用的互备关系,那么当一台VS接管LVS服务时,可能会网络不通,这时因为路由器的MAC缓存表里关于vip这个地址的MAC地址还是被替换的VS的MAC,有两种解决方法,一种是修改新VS的MAC地址,另一种是使用send_arp 命令(piranha软件包里带的一个小工具),格式如下:

send_arp send_arp [-i dev] src_ip_addr src_hw_addr targ_ip_addr tar_hw_addr

这个命令不一定非要在VS上执行,只要在同一VLAN即可。

12-17:

今天对RS ARP MAC查询有了新的认识,网上大多数的文章都提到要用四个参数来关闭arp查询响应请求:

echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce

我的RS最近的流量也频繁出现“异常”,经分析是因为arp的问题,rs有时会夺取VS的ip援用权。使用以上四条之后,VS立刻有了流量。


4
十二 07

X60/T60的SATA硬盘如何安装xp

X60/T60的SATA硬盘如何安装xp!(转自51bbnet)

http://www-307.ibm.com/pc/support/site.wss/MIGR-62909.html

X60/T60安装OS指导!!

本来安装OS是件简单事儿,但因为X60/T60的硬盘是SATA的,所以又不太简单!不想用随机盘恢复的本友请详见下述:

1、问题产生的根源:
WinXp虽然主流,但也是几年前的产物了,相对于SATA这个新生事物,有点欺生:)。打个比方,就好比要往SCSi硬盘上装WinXP,需要在第一屏“使用第三方SCSI驱动,请按F6”时,按F6,然后用SCSI厂商提供的软盘安装驱动,然后继续安装。然而,很显然,有SATA盘的本本都没有软驱。

2、下面说解决方案:
a)有USB软驱,没说的,下载附件中的驱动,解压后,拷到软盘里,在安装时F6装上,剩下的和正常安装同样。

b)也是大家常见的情况:没有软驱,步骤如下:

i)在启动时F1进Bios-〉Serial ATA-〉将硬盘模式从AHCI(高级接口模式,支持SATA的150M传输率)改为:Compatibility(兼容模式,模拟传统的IDE硬盘)
ii)用Xp安装盘正常安装,完成安装后,请先使用附件驱动安装SATA的驱动。把驱动解压到c:\drv\sata下,在c:\drv\sata\PREPARE下执行install.cmd,系统安装完后自动重启。
iii)重启后进Bios,将Serial ATA模式改回AHCI,正常进系统,会报告发现新硬件,不使用自动安装,手工把搜索路径指向c:\drv\sata,系统会自动完成安装,正确安装后,SATA在设备管理器中将显示为:Intel(R) 82801 GBM SATA AHCI Controller (Mobile ICH7M),至此,WinXP就可以正常用SATA告诉模式启动了
iiii)对于X60,因为没有光驱,强烈建议先用工具盘引导用PQ把分区做好,并把安装文件拷到硬盘下,然后用98盘引导,进入Win的目录,执行XX\i386\winnt,剩下的过程同T60
iiiii)强烈建议做好干净的OS后留一个Ghost备份!

最后,转一下帖子,关于T60的驱动问题。

a、由于T60使用了HD Audio声卡,看起来能够使音质得到一个提升的东西(好像用那两个小喇叭听确实说得过去)。但是在安装过程中,总会遇到报错:“需要 HD Audio总线驱动程序,但是没有找到”; 这里需要一个Windows的系统补丁KB888111,在安装声卡驱动之前,先打上相应的补丁(2000、XP SP1、XP SP2、2003均不同),然后系统会告诉你发现新硬件,这里还可以附带安装Modem的驱动,它好像也要HD Audio的总线驱动才能安装。

b、安装显卡驱动之前要装好Microsoft .NET Framework 2.0,否则显卡驱动安装不正常。表现在看起来装好了,但是重新启动之后就会报错:“.cli.exe 应用程序错误”。如果在MSConfig中取消它的启动,只能从表面解决问题。关键是要安装Microsoft .NET Framework 2.0后再安装显卡驱动。—-这是因为Ati的控制中心要求的要.net估计是IBM的驱动没有像Ati那样集成进去。

附件: ibm-sata.rar (2006-7-24 18:18, 180.8 K)

补充一点,关于IBM T60 X60的系统安装指南

联想在新一代的Thinkpad 6系列中采用的SATA硬盘,并在bios里面将sata的模式默认设置为AHCI,导致用户自行安装操作系统的时候出现硬件无响应,蓝屏,安装失败,但我们并不是没有办法给自己的本本重新安装操作系统,以下文字摘自IBM官方网站的文档,本人加以翻译,不对产生的任何问题负责
------------------------------------
从说明文档里我们能看到两种安装方式:

第一种是clean install,
1. Attach a diskette drive to your computer.
1,将一张软盘插入系统软驱(可以用双起U盘实现)
2. Download Intel Matrix Storage Manager Driver from the Web site and extract the driver to C:\DRIVERS\WIN\SATA and copy the driver to a diskette.
2,下载Intel Matrix Storage Manager Driver并把其解压到 C:\DRIVERS\WIN\SATA (其实任意地方都行),然后把它拷贝到软盘里。
3. To make sure that SATA AHCI is enabled, start the BIOS Setup Utility menu.
4. Select “Config”.
5. Select “Serial ATA (SATA)”.
6. Select “AHCI”.
3、4、5、6是告诉大家如何把SATA设置成AHCI模式,这个机器默认就是这样的,基本可以跳过
7. Change the startup sequence of your computer. Following the instructions on the Startup menu in the BIOS Setup Utility, set the CD-ROM drive to start first.
7,改变启动顺序,光驱第一(这么做的目的是为了从光盘装系统,如果是从硬盘装就不用了)
8. Insert the CD for Windows XP into the CD or DVD drive, and restart the computer.
8,插入Xp安装盘并重启
9. To install a third-party SCSI or RAID driver first, press F6.
9,“安装第三方SCSI或RAID驱动,请按F6
10. When prompted, select S for Specify Additional Device.
10,当安装界面出现,选S表示Specify Additional Device
11. When prompted, insert the diskette that you created in step 2, and press Enter.
11,然后插入你刚才拷贝了驱动程序的软盘
12. Select “Intel(R) 82801 GBM SATA AHCI Controller (Mobile ICH7M)”, and press Enter.
12,选择Intel(R) 82801 GBM SATA AHCI Controller (Mobile ICH7M,按enter
13. To continue the installation, press Enter again. Leave the diskette in the drive until the next reboot; the software may need to be copied from the diskette again when the files are copied during setup.
13,再按一次enter进行继续安装,不要拿出软盘
14. Follow the instruction to complete the OS installation.
14,继续正常安装操作系统

第二种方法是针对没有软盘驱动器的用户,官方文档说明如下
If you do not have a diskette drive, you can install Intel Matrix Storage Manager Driver by the following alternative procedure:
如果你没有软驱,你可以按照下面的方法安装 Intel Matrix Storage Manager Driver
Note: If you select AHCI for Serial ATA (SATA) in the BIOS Setup Utility before installing Intel Matrix Storage Manager Driver, your computer will not respond; it will only display a blue screen.
注意:如果你把SATA选成了AHCI模式,那么当你安装 Intel Matrix Storage Manager Driver 之前系统会没有反应,蓝屏
1. Start the BIOS Setup Utility menu.
2. Select “Config”.
3. Select “Serial ATA (SATA)”.
4. Select “Compatibility”.
1~4,就是开机,按F1进bios,然后把SATA选成compatibility模式。
5. Install Windows XP and Service Pack 2.
5,正常安装windows xp
6. Download Intel Matrix Storage Manager Driver from the Web site and extract the driver to C:\DRIVERS\WIN\SATA.
6,下载 Intel Matrix Storage Manager Driver 并解压到C:\DRIVERS\WIN\SATA
7. Run Intel Matrix Storage Manager Driver. To do this, go to C:\DRIVERS\WIN\SATA\PREPARE, and double-click install.cmd.
7,运行C:\DRIVERS\WIN\SATA\PREPARE中的install.cmd,安装Intel Matrix Storage Manager Driver
8. Turn the computer off and then on again.
8,重启
9. Start the BIOS Setup Utility menu.
10. Select “Config”.
11. Select “Serial ATA (SATA)”.
12. Select “AHCI”.
9~12,进入bios把sata模式改回AHCI
13. Start Windows XP. The Welcome to the Found New Hardware Wizard appears.
14. Click “No, not this time”, and then click “Next”.
15. Select Install from a list or specific location (Advanced), and then click Next.
16. Select “Search for the best driver in these locations”. Then select “Include this location in the search:”, specify the path, C:\DRIVERS\WIN\SATA, and click “Next”. The Completing the Found New Hardware Wizard appears.
17. Click “Finish”.
18. When the System Settings Change window appears, click “Yes”. The computer restarts.
13~18,进入操作系统,发现新硬件,指向C:\DRIVERS\WIN\SATA完成驱动程序的安装


4
十二 07

我的FireFox常用插件

主题:

Noia 2.0 (lite)

扩展:

Web Developer 1.1.4

Firebug 1.05

yslow

Wizz RSS News Reader 2.1.9.8

Search Status

Google Notebook插件

Nagios Checker

TamperData

scribefire

ReminderFox

showip

lori

Hide Menubar

Adblock Plus

字体:

微软雅黑字体

抓屏展示:

我的FireFox抓屏


2
十二 07

lvcreate -s

Create a snapshot logical volume (or snapshot) for an  existing, so  called  original logical volume (or origin).  Snapshots provide a ‘frozen image’of the contents of the  origin  while  the origin  can still be updated. They enable consistent backups and online recovery of removed/overwritten data/files. The  snapshot does  not  need  the same amount of storage the origin has. In a typical scenario, 15-20% might be enough. In case  the  snapshot runs  out  of  storage,  use lvextend(8) to grow it. Shrinking a snapshot is supported by lvreduce(8) as well.  Run  lvdisplay(8) on  the snapshot in order to check how much data is allocated to it.