庞志辉博客
php爱好者-
合理设置apache httpd的最大连接数(转载)
发表于 2010年05月6日 没有评论手头有一个网站在线人数增多,访问时很慢。初步认为是服务器资源不足了,但经反复测试,一旦连接上,不断点击同一个页面上不同的链接,都能迅速打开,这种现象就是说明apache最大连接数已经满了,新的访客只能排队等待有空闲的链接,而如果一旦连接上,在keeyalive 的存活时间内(KeepAliveTimeout,默认5秒)都不用重新打开连接,因此解决的方法就是加大apache的最大连接数。
1.在哪里设置?
服务器的为FreeBSD 6.2 ,apache 2.24,使用默认配置(FreeBSD 默认不加载自定义MPM配置),默认最大连接数是250
在/usr/local/etc/apache22/httpd.conf中加载MPM配置(去掉前面的注释):
# Server-pool management (MPM specific)
Include etc/apache22/extra/httpd-mpm.conf可见的MPM配置在/usr/local/etc/apache22/extra/httpd-mpm.conf,但里面根据httpd的工作模式分了很多块,哪一部才是当前httpd的工作模式呢?可通过执行 apachectl -l 来查看:
Compiled in modules:
core.c
prefork.c
http_core.c
mod_so.c看到prefork 字眼,因此可见当前httpd应该是工作在prefork模式,prefork模式的默认配置是:
<IfModule mpm_prefork_module>
StartServers 5
MinSpareServers 5
MaxSpareServers 10
MaxClients 150
MaxRequestsPerChild 0
</IfModule>2.要加到多少?
连接数理论上当然是支持越大越好,但要在服务器的能力范围内,这跟服务器的CPU、内存、带宽等都有关系。
查看当前的连接数可以用:
ps aux | grep httpd | wc -l或:
pgrep httpd|wc -l计算httpd占用内存的平均数:
ps aux|grep -v grep|awk ‘/httpd/{sum+=$6;n++};END{print sum/n}’由于基本都是静态页面,CPU消耗很低,每进程占用内存也不算多,大约200K。
服务器内存有2G,除去常规启动的服务大约需要500M(保守估计),还剩1.5G可用,那么理论上可以支持1.5*1024*1024*1024/200000 = 8053.06368
约8K个进程,支持2W人同时访问应该是没有问题的(能保证其中8K的人访问很快,其他的可能需要等待1、2秒才能连上,而一旦连上就会很流畅)
控制最大连接数的MaxClients ,因此可以尝试配置为:
<IfModule mpm_prefork_module>
StartServers 5
MinSpareServers 5
MaxSpareServers 10
ServerLimit 5500
MaxClients 5000
MaxRequestsPerChild 100
</IfModule>注意,MaxClients默认最大为250,若要超过这个值就要显式设置ServerLimit,且ServerLimit要放在MaxClients之前,值要不小于MaxClients,不然重启httpd时会有提示。
重启httpd后,通过反复执行pgrep httpd|wc -l 来观察连接数,可以看到连接数在达到MaxClients的设值后不再增加,但此时访问网站也很流畅,那就不用贪心再设置更高的值了,不然以后如果网站访问突增不小心就会耗光服务器内存,可根据以后访问压力趋势及内存的占用变化再逐渐调整,直到找到一个最优的设置值。
(MaxRequestsPerChild不能设置为0,可能会因内存泄露导致服务器崩溃)
更佳最大值计算的公式:
apache_max_process_with_good_perfermance < (total_hardware_memory / apache_memory_per_process ) * 2
apache_max_process = apache_max_process_with_good_perfermance * 1.5
参考:apache的参数设置
Apache 2.0性能优化—MPM的选择与配置
如何避免apache的httpd进程占用比较多的内存
对apache中并发控制参数prefork理解和调优
附:
实时检测HTTPD连接数:
watch -n 1 -d “pgrep httpd|wc -l” -
利用nginx+apache+mysql+php+memcached+squid搭建门户网站
发表于 2010年05月5日 没有评论服务器的大用户量的承载方案
一、前言
二、编译安装
三、 安装MySQL、memcache
四、 安装Apache、PHP、eAccelerator、php-memcache
五、 安装Squid
六、后记一、前言,准备工作
当前,LAMP开发模式是WEB开发的首选,如何搭建一个高效、可靠、稳定的WEB服务器一直是个热门主题,本文就是这个主题的一次尝试。
我们采用的架构图如下:
引用——– ———- ————- ——— ————
| 客户端 | ===> |负载均衡器| ===> |反向代理/缓存| ===> |WEB服务器| ===> |数据库服务器|
——– ———- ————- ——— ————
Nginx Squid Apache,PHP MySQL
eAccelerator/memcache准备工作:
引用服务器: Intel(R) Xeon(TM) CPU 3.00GHz * 2, 2GB mem, SCISC 硬盘
操作系统:CentOs4.4,内核版本2.6.9-22.ELsmp,gcc版本3.4.4
软件:
Apache 2.2.3(能使用MPM模式)
PHP 5.2.0(选用该版本是因为5.2.0的引擎相对更高效)
eAccelerator 0.9.5(加速PHP引擎,同时也可以加密PHP源程序)
memcache 1.2.0(用于高速缓存常用数据)
libevent 1.2a(memcache工作机制所需)
MySQL 5.0.27(选用二进制版本,省去编译工作)
Nginx 0.5.4(用做负载均衡器)
squid-2.6.STABLE6(做反向代理的同时提供专业缓存功能)
二、编译安装
一、) 安装Nginx
1.) 安装
Nginx发音为[engine x],是由俄罗斯人Igor Sysoev建立的项目,基于BSD许可。据说他当初是F5的成员之一,英文主页:http://nginx.net。俄罗斯的一些大网站已经使用它超过 两年多了,一直表现不凡。
Nginx的编译参数如下:
[root@localhost]#./configure –prefix=/usr/local/server/nginx –with-openssl=/usr/include \
–with-pcre=/usr/include/pcre/ –with-http_stub_status_module –without-http_memcached_module \
–without-http_fastcgi_module –without-http_rewrite_module –without-http_map_module \
–without-http_geo_module –without-http_autoindex_module
在这里,需要说明一下,由于Nginx的配置文件中我想用到正则,所以需要 pcre 模块的支持。我已经安装了 pcre 及 pcre-devel 的rpm包,但是 Ngxin 并不能正确找到 .h/.so/.a/.la 文件,因此我稍微变通了一下:
[root@localhost]#mkdir /usr/include/pcre/.libs/
[root@localhost]#cp /usr/lib/libpcre.a /usr/include/pcre/.libs/libpcre.a
[root@localhost]#cp /usr/lib/libpcre.a /usr/include/pcre/.libs/libpcre.la
然后,修改 objs/Makefile 大概在908行的位置上,注释掉以下内容:
./configure –disable-shared
接下来,就可以正常执行 make 及 make install 了。
2.) 修改配置文件 /usr/local/server/nginx/conf/nginx.conf
以下是我的 nginx.conf 内容,仅供参考:
#运行用户
user nobody nobody;
#启动进程
worker_processes 2;
#全局错误日志及PID文件
error_log logs/error.log notice;
pid logs/nginx.pid;
#工作模式及连接数上限
events {
use epoll;
worker_connections 1024;
}
#设定http服务器,利用它的反向代理功能提供负载均衡支持
http {
#设定mime类型
include conf/mime.types;
default_type application/octet-stream;
#设定日志格式
log_format main ‘$remote_addr – $remote_user [$time_local] ‘
‘”$request” $status $bytes_sent ‘
‘”$http_referer” “$http_user_agent” ‘
‘”$gzip_ratio”‘;
log_format download ‘$remote_addr – $remote_user [$time_local] ‘
‘”$request” $status $bytes_sent ‘
‘”$http_referer” “$http_user_agent” ‘
‘”$http_range” “$sent_http_content_range”‘;
#设定请求缓冲
client_header_buffer_size 1k;
large_client_header_buffers 4 4k;
#开启gzip模块
gzip on;
gzip_min_length 1100;
gzip_buffers 4 8k;
gzip_types text/plain;
output_buffers 1 32k;
postpone_output 1460;
#设定access log
access_log logs/access.log main;
client_header_timeout 3m;
client_body_timeout 3m;
send_timeout 3m;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
#设定负载均衡的服务器列表
upstream mysvr {
#weigth参数表示权值,权值越高被分配到的几率越大
#本机上的Squid开启3128端口
server 192.168.8.1:3128 weight=5;
server 192.168.8.2:80 weight=1;
server 192.168.8.3:80 weight=6;
}
#设定虚拟主机
server {
listen 80;
server_name 192.168.8.1 www.enew.com.cn;
charset gb2312;
#设定本虚拟主机的访问日志
access_log logs/www.enew.com.cn.access.log main;
#如果访问 /img/*, /js/*, /css/* 资源,则直接取本地文件,不通过squid
#如果这些文件较多,不推荐这种方式,因为通过squid的缓存效果更好
location ~ ^/(img|js|css)/ {
root /data3/Html;
expires 24h;
}
#对 “/” 启用负载均衡
location / {
proxy_pass http://mysvr;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
client_max_body_size 10m;
client_body_buffer_size 128k;
proxy_connect_timeout 90;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_buffer_size 4k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;
}
#设定查看Nginx状态的地址
location /NginxStatus {
stub_status on;
access_log on;
auth_basic “NginxStatus”;
auth_basic_user_file conf/htpasswd;
}
}
}
备注:conf/htpasswd 文件的内容用 apache 提供的 htpasswd 工具来产生即可,内容大致如下:
3.) 查看 Nginx 运行状态
输入地址 http://192.168.8.1/NginxStatus/,输入验证帐号密码,即可看到类似如下内容:
Active connections: 328
server accepts handled requests
9309 8982 28890
Reading: 1 Writing: 3 Waiting: 324
第一行表示目前活跃的连接数
第三行的第三个数字表示Nginx运行到当前时间接受到的总请求数,如果快达到了上限,就需要加大上限值了。
第四行是Nginx的队列状态
三、 安装MySQL、memcache1.) 安装MySQL,步骤如下:
[root@localhost]#tar zxf mysql-standard-5.0.27-linux-i686.tar.gz -C /usr/local/server
[root@localhost]#mv /usr/local/server/mysql-standard-5.0.27-linux-i686 /usr/local/server/mysql
[root@localhost]#cd /usr/local/server/mysql
[root@localhost]#./scripts/mysql_install_db –basedir=/usr/local/server/mysql \
–datadir=/usr/local/server/mysql/data –user=nobody
[root@localhost]#cp /usr/local/server/mysql/support-files/my-large.cnf \
/usr/local/server/mysql/data/my.cnf
2.) 修改 MySQL 配置,增加部分优化参数,如下:
[root@localhost]#vi /usr/local/server/mysql/data/my.cnf
主要内容如下:
[mysqld]
basedir = /usr/local/server/mysql
datadir = /usr/local/server/mysql/data
user = nobody
port = 3306
socket = /tmp/mysql.sock
wait_timeout = 30
long_query_time=1
#log-queries-not-using-indexes = TRUE
log-slow-queries=/usr/local/server/mysql/slow.log
log-error = /usr/local/server/mysql/error.log
external-locking = FALSE
key_buffer_size = 512M
back_log = 400
table_cache = 512
sort_buffer_size = 2M
join_buffer_size = 4M
read_buffer_size = 2M
read_rnd_buffer_size = 4M
myisam_sort_buffer_size = 64M
thread_cache_size = 32
query_cache_limit = 2M
query_cache_size = 64M
thread_concurrency = 4
thread_stack = 128K
tmp_table_size = 64M
binlog_cache_size = 2M
max_binlog_size = 128M
max_binlog_cache_size = 512M
max_relay_log_size = 128M
bulk_insert_buffer_size = 8M
myisam_repair_threads = 1
skip-bdb
#如果不需要使用innodb就关闭该选项
#skip-innodb
innodb_data_home_dir = /usr/local/server/mysql/data/
innodb_data_file_path = ibdata1:256M;ibdata2:256M:autoextend
innodb_log_group_home_dir = /usr/local/server/mysql/data/
innodb_log_arch_dir = /usr/local/server/mysql/data/
innodb_buffer_pool_size = 512M
innodb_additional_mem_pool_size = 8M
innodb_log_file_size = 128M
innodb_log_buffer_size = 8M
innodb_lock_wait_timeout = 50
innodb_flush_log_at_trx_commit = 2
innodb_file_io_threads = 4
innodb_thread_concurrency = 16
innodb_log_files_in_group = 3
以上配置参数请根据具体的需要稍作修改。运行以下命令即可启动 MySQL 服务器:
/usr/local/server/mysql/bin/mysqld_safe \
–defaults-file=/usr/local/server/mysql/data/my.cnf &
由于 MySQL 不是安装在标准目录下,因此必须要修改 mysqld_safe 中的 my_print_defaults 文件所在位置,才能通过
mysqld_safe 来启动 MySQL 服务器。
3.) memcache + libevent 安装编译安装:
[root@localhost]#cd libevent-1.2a
[root@localhost]#./configure –prefix=/usr/ && make && make install
[root@localhost]#cd ../memcached-1.2.0
[root@localhost]#./configure –prefix=/usr/local/server/memcached –with-libevent=/usr/
[root@localhost]#make && make install
备注:如果 libevent 不是安装在 /usr 目录下,那么需要把 libevent-1.2a.so.1 拷贝/链接到 /usr/lib 中,否则
memcached 无法正常加载。运行以下命令来启动 memcached:
[root@localhost]#/usr/local/server/memcached/bin/memcached \
-l 192.168.8.1 -d -p 10000 -u nobody -m 128
表示用 daemon 的方式启动 memcached,监听在 192.168.8.1 的 10000 端口上,运行用户为 nobody,为其分配
128MB 的内存。
四、 安装Apache、PHP、eAccelerator、php-memcache四、) 安装Apache、PHP、eAccelerator、php-memcache由于Apache
2下的php静态方式编译十分麻烦,因此在这里采用动态模块(DSO)方式。1.) 安装Apache 2.2.3
[root@localhost]#./configure –prefix=/usr/local/server/apache –disable-userdir –disable-actions \
–disable-negotiation –disable-autoindex –disable-filter –disable-include –disable-status \
–disable-asis –disable-auth –disable-authn-default –disable-authn-file –disable-authz-groupfile \
–disable-authz-host –disable-authz-default –disable-authz-user –disable-userdir \
–enable-expires –enable-module=so
备注:在这里,取消了一些不必要的模块,如果你需要用到这些模块,那么请去掉部分参数。
2.) 安装PHP 5.2.0
[root@localhost]#./configure –prefix=/usr/local/server/php –with-mysql \
–with-apxs2=/usr/local/server/apache/bin/apxs –with-freetype-dir=/usr/ –with-png-dir=/usr/ \
–with-gd=/usr/ –with-jpeg-dir=/usr/ –with-zlib –enable-magic-quotes –with-iconv \
–without-sqlite –without-pdo-sqlite –with-pdo-mysql –disable-dom –disable-simplexml \
–enable-roxen-zts
[root@localhost]#make && make install
备注:如果不需要gd或者pdo等模块,请自行去掉。
3.) 安装eAccelerator-0.9.5
[root@localhost]#cd eAccelerator-0.9.5
[root@localhost]#export PHP_PREFIX=/usr/local/server/php
[root@localhost]#$PHP_PREFIX/bin/phpize
[root@localhost]#./configure –enable-eaccelerator=shared –with-php-config=$PHP_PREFIX/bin/php-config
[root@localhost]#make && make install
4.) 安装memcache模块
[root@localhost]#cd memcache-2.1.0
[root@localhost]#export PHP_PREFIX=/usr/local/server/php
[root@localhost]#$PHP_PREFIX/bin/phpize
[root@localhost]#./configure –enable-eaccelerator=shared –with-php-config=$PHP_PREFIX/bin/php-config
[root@localhost]#make && make install
5.) 修改 php.ini 配置然后修改 php.ini,修改/加入类似以下内容:
extension_dir = “/usr/local/server/php/lib/”
extension=”eaccelerator.so”
eaccelerator.shm_size=”32″ ;设定eaccelerator的共享内存为32MB
eaccelerator.cache_dir=”/usr/local/server/eaccelerator”
eaccelerator.enable=”1″
eaccelerator.optimizer=”1″
eaccelerator.check_mtime=”1″
eaccelerator.debug=”0″
eaccelerator.filter=”*.php”
eaccelerator.shm_max=”0″
eaccelerator.shm_ttl=”0″
eaccelerator.shm_prune_period=”3600″
eaccelerator.shm_only=”0″
eaccelerator.compress=”1″
eaccelerator.compress_level=”9″
eaccelerator.log_file = “/usr/local/server/apache/logs/eaccelerator_log”
eaccelerator.allowed_admin_path = “/usr/local/server/apache/htdocs/ea_admin”
extension=”memcache.so”
在这里,最好是在apache的配置中增加默认文件类型的cache机制,即利用apache的expires模块,新增类似如下几行:
ExpiresActive On
ExpiresByType text/html “access plus 10 minutes”
ExpiresByType text/css “access plus 1 day”
ExpiresByType image/jpg “access 1 month”
ExpiresByType image/gif “access 1 month”
ExpiresByType image/jpg “access 1 month”
ExpiresByType application/x-shockwave-flash “access plus 3 day”
这么设置是由于我的这些静态文件通常很少更新,因此我选择的是”access”规则,如果更新相对比较频繁,可以改用”modification”规则; 或者也可以用”access”规则,但是在文件更新的时候,执行一下”touch”命令,把文件的时间刷新一下即可。五、 安装Squid
五、) 安装Squid
[root@localhost]#./configure –prefix=/usr/local/server/squid –enable-async-io=100 –disable-delay-pools –disable-mem-gen-trace –disable-useragent-log –enable-kill-parent-hack –disable-arp-acl –enable-epoll –disable-ident-lookups –enable-snmp –enable-large-cache-files –with-large-files
[root@localhost]#make && make install
或使用如下安装方法:
[root@localhost]#yum install squid
如果是2.6的内核,才能支持epoll的IO模式,旧版本的内核则只能选择poll或其他模式了;另外,记得带上支持大文件的选项,否则在access
log等文件达到2G的时候就会报错。设定 squid 的配置大概如下内容:
#设定缓存目录为 /var/cache1 和 /var/lib/squid,每次处理缓存大小为128MB,当缓存空间使用达到95%时
#新的内容将取代旧的而不直接添加到目录中,直到空间又下降到90%才停止这一活动
#/var/cache1 最大1024MB,/var/lib/squid 最大 5000MB,都是 16*256 级子目录
cache_dir aufs /var/cache1 1024 16 256
cache_dir aufs /var/lib/squid 5000 16 256
cache_mem 128 MB
cache_swap_low 90
cache_swap_high 95
#设置存储策略等
maximum_object_size 4096 KB
minimum_object_size 0 KB
maximum_object_size_in_memory 80 KB
ipcache_size 1024
ipcache_low 90
ipcache_high 95
cache_replacement_policy lru
memory_replacement_policy lru
#设置超时策略
forward_timeout 20 seconds
connect_timeout 15 seconds
read_timeout 3 minutes
request_timeout 1 minutes
persistent_request_timeout 15 seconds
client_lifetime 15 minutes
shutdown_lifetime 5 seconds
negative_ttl 10 seconds
#限制一个ip最大只能有16个连接
acl OverConnLimit maxconn 16
http_access deny OverConnLimit
#限制baidu spider访问
#acl AntiBaidu req_header User-Agent Baiduspider
#http_access deny AntiBaidu
#常规设置
visible_hostname cache.enew.com
cache_mgr webmaster@enew.com
client_persistent_connections off
server_persistent_connections on
cache_effective_user nobody
cache_effective_group nobody
tcp_recv_bufsize 65535 bytes
half_closed_clients off
#设定不缓存的规则
hierarchy_stoplist cgi-bin
acl QUERY urlpath_regex cgi-bin
cache deny QUERY
#不要相信ETag 因为有gzip
acl apache rep_header Server ^Apache
broken_vary_encoding allow apache
#设置access log,并且令其格式和apache的格式一样,方便awstats分析
emulate_httpd_log on
logformat apache %>a %ui %un [%tl] “%rm %ru HTTP/%rv” %Hs %
初始化和启动squid
[root@localhost]#/usr/local/server/squid/sbin/squid -z
[root@localhost]#/usr/local/server/squid/sbin/squid
第一条命令是先初始化squid缓存哈希子目录,只需执行一次即可。
六、后记六、后记一、)想要启用squid所需的改变想要更好的利用squid的cache功能,不是把它启用了就可以的,我们需要做以下几个调整:
1、启用apache的 mod_expires 模块,修改 httpd.conf,加入以下内容:
#expiresdefault “modification plus 2 weeks”expiresactive
onexpiresbytype text/html “access plus 10 minutes”expiresbytype
image/gif “modification plus 1 month”expiresbytype image/jpeg “modification
plus 1 month”expiresbytype image/png “modification plus 1
month”expiresbytype text/css “access plus 1 day”expiresbytype
application/x-shockwave-flash “access plus 3 day”
以上配置的作用是规定各种类型文件的cache规则,对那些图片/flash等静态文件总是cache起来,可根据各自的需要做适当调整。
2、修改 php.ini 配置,如下:
session.cache_limiter = nocache
以上配置的作用是默认取消php中的cache功能,避免不正常的cache产生。
3、修改应用程序例如,有一个php程序页面static.php,它存放着某些查询数据库后的结果,并且数据更新并不频繁,于是,我们就可以考虑对其 cache。只需在static.php中加入类似如下代码:
header(’Cache-Control: max-age=86400
,must-revalidate’);header(’Pragma:’);header(’Last-Modified: ‘ .
gmdate(’D, d M Y H:i:s’) . ‘ GMT’ );header(”Expires: ” .gmdate (’D, d M Y
H:i:s’, time() + ‘86400′ ). ‘ GMT’);
以上代码的意思是,输出一个http头部信息,让squid知道本页面默认缓存时长为一天。
二、)squidclient简要介绍
*取得squid运行状态信息: squidclient -p 80 mgr:info
*取得squid内存使用情况: squidclient -p 80 mgr:mem
*取得squid已经缓存的列表: squidclient -p 80 mgr:objects. use it carefully,it may crash
*取得squid的磁盘使用情况: squidclient -p 80 mgr:diskd
*强制更新某个url:squidclient -p 80 -m PURGE http://www.enew.com.cn/static.php
*更多的请查看:squidclient-h 或者 squidclient -p 80 mgr: -
与智慧的人交流,每次都有一些收获
发表于 2010年03月16日 没有评论与智慧的人交流,每次都有一些收获,他们总能从另外一个角度给你启示,使你如沐春风。但这个世界上智慧的人又的确太少了,而每次谈话需要我们仔细的从对方的愚蠢的大脑里提炼出来一些启示或者收获,如果只是一味的听着对方喋喋不休说一些胡话,却是在浪费时间和生命。
记着很多人提到,优秀的文章之所以不朽,在于能引起共鸣。共鸣和说服有着本质的区别,共鸣需要什么?也需要抬杠和辩论。与聪明人辩论,他的观点新颖,使你又能引起共鸣。不自然的扩展了思路,增加了见识,与愚者论道,原本共持一个观点,却能大打出手,让人劳心费神。
所以,欣赏两个聪明人辨论是一种享受,比如报纸上持不同观点的各种论战。而听两个愚蠢的家伙好象见到知己一样互相欣赏发表观点论战,却是是对大脑的惩罚。
同样一个大脑两个膀子,为什么有的人的之间论战我却能如沐春风,而有些的人持同一观点的讨论入我大脑,我却极其烦躁?
-
php4与php5类的差别
发表于 2010年03月11日 没有评论PHP5 中的对象已经进行了较系统、较全面的调整,现在的样子可能看起来会有些类似于 Java。本小节着重讲述 PHP5 中新的对象模式,并举了一些较简易的例子来说明。就让本节成为你的 PHP5 之旅的一个新起点吧。:)
* 构造函数和析构函数
* 对象的引用
* 对象的克隆
* 对象中的私有、公共及受保护模式
* 接口 (Interfaces)
* 抽象类
* __call
* __set 和 __get
* 静态成员构造函数和析构函数
在 PHP4 中,当函数与对象同名时,这个函数将成为该对象的构造函数,并且在 PHP4 中没有析构函数的概念。
在 PHP5 中,构造函数被统一命名为 __construct,并且引入了析构函数的概念,被统一命名为 __destruct。例一:构造函数和析构函数
class foo {
var $x;
function __construct($x) {
$this->x = $x;
}
function display() {
print($this->x);
}
function __destruct() {
print(”bye bye”);
}
}
$o1 = new foo(4);
$o1->display();
?>
在上面的例子中,当你终止调用 foo 类的时候,其析构函数将会被调用,上例中会输出 “bye bye”。对象的引用
众所周知,在PHP4 中,传递变量给一个函数或方法,实际是把这个变量做了一次复制,也就意味着你传给函数或方法的是这个变量的一个副本,除非你使用了引用符号 “&” 来声明是要做一个引用,而不是一个 Copy。在 PHP5 中,对象总是以引用的形式存在的,对象中的赋值操作同样也都是一个引用操作。
例二:对象的引用
class foo {
var $x;
function setX($x) {
$this->x = $x;
}
function getX() {
return $this->x;
}
}
$o1 = new foo;
$o1->setX(4);
$o2 = $o1;
$o1->setX(5);
if($o1->getX() == $o2->getX()) print(”Oh my god!”);
?>对象的克隆
如上所述,当一个对象始终以引用的形式来被调用时,如果我想得到该对象的一个副本,该怎么办呢?PHP5 提供了一个新的功能,就是对象的克隆,语法为 __clone。
例三:对象的克隆
class foo {
var $x;
function setX($x) {
$this->x = $x;
}
function getX() {
return $this->x;
}
}
$o1 = new foo;
$o1->setX(4);
$o2 = $o1->__clone();
$o1->setX(5); if($o1->getX() != $o2->getX()) print(”Copies are independant”);
?>
对象克隆的方法在其它很多应用程序语言中都是存在的,所以你不必担心它的稳定性。:)对象中的私有、公共及保护模式
PHP4 中,一个对象的所有方法和变量都是公共的,这意味着你可以在一个对象的外部操作其中的任意一个变量和方法。PHP5 引入了三种新的用来控制这种存取权限的模式,它们是:公共的(Public)、受保护的(Protected)及私有的(Private)。
公共模式(Public):允许在对象外部进行操作控制。
私有模式(Private):只允许本对象内的方法对其进行操作控制。
受保护模式(Protected):允许本对象及其父对象对其进行操作控制。例四: 对象中的私有、公共及受保护模式
class foo {
private $x;
public function public_foo() {
print(”I’m public”);
}
protected function protected_foo() {
$this->private_foo(); //Ok because we are in the same class we can call private methods
print(”I’m protected”);
}
private function private_foo() {
$this->x = 3;
print(”I’m private”);
}
}
class foo2 extends foo {
public function display() {
$this->protected_foo();
$this->public_foo();
// $this->private_foo(); // Invalid! the function is private in the base class
}
} $x = new foo();
$x->public_foo();
//$x->protected_foo(); //Invalid cannot call protected methods outside the class and derived classes
//$x->private_foo(); //Invalid private methods can only be used inside the class $x2 = new foo2();
$x2->display();
?>
提示:对象中的变量总是以私有形式存在的,直接操作一个对象中的变量不是一个好的面向对象编程的习惯,更好的办法是把你想要的变量交给一个对象的方法去处理。接口 (Interfaces)
众所周知,PHP4 中的对象支持继承,要使一个对象成为另一个对象的派生类,你需要使用类似 “class foo extends parent” 的代码来控制。 PHP4 和 PHP5 中,一个对象都仅能继承一次,多重继承是不被支持的。不过,在 PHP5 中产生了一个新的名词:接口,接口是一个没有具体处理代码的特殊对象,它仅仅定义了一些方法的名称及参数,此后的对象就可以方便的使用 ‘implement’ 关键字把需要的接口整合起来,然后再加入具体的执行代码。
例五:接口
interface displayable {
function display();
}
interface printable {
function doprint();
}class foo implements displayable,printable {
function display() {
// code
} function doprint() {
// code
}
}
?>
这对提高代码的可读性及通俗性有很大的帮助,通过上面的例子可以看到,对象 foo 包含了 displayable 和 printable 两个接口,这时我们就可以清楚的知道,对象 foo 一定会有一个 display() 方法和一个 print() 方法,只需要去了解接口部分,你就可以轻易的操作该对象而不必去关心对象的内部是如何运作的。抽象类
抽象类不能被实例化。
抽象类与其它类一样,允许定义变量及方法。
抽象类同样可以定义一个抽象的方法,抽象类的方法不会被执行,不过将有可能会在其派生类中执行。例六:抽象类
abstract class foo {
protected $x;
abstract function display();
function setX($x) {
$this->x = $x;
}
}
class foo2 extends foo {
function display() {
// Code
}
}
?>__call
PHP5 的对象新增了一个专用方法 __call(),这个方法用来监视一个对象中的其它方法。如果你试着调用一个对象中不存在的方法,__call 方法将会被自动调用。
例七:__call
class foo {
function __call($name,$arguments) {
print(”Did you call me? I’m $name!”);
}
} $x = new foo();
$x->doStuff();
$x->fancy_stuff();
?>
这个特殊的方法可以被用来实现“过载(overloading)”的动作,这样你就可以检查你的参数并且通过调用一个私有的方法来传递参数。例八:使用 __call 实现“过载”动作
class Magic {
function __call($name,$arguments) {
if($name==’foo’) {
if(is_int($arguments[0])) $this->foo_for_int($arguments[0]);
if(is_string($arguments[0])) $this->foo_for_string($arguments[0]);
}
} private function foo_for_int($x) {
print(”oh an int!”);
} private function foo_for_string($x) {
print(”oh a string!”);
}
} $x = new Magic();
$x->foo(3);
$x->foo(”3″);
?>__set 和 __get
这是一个很棒的方法,__set 和 __get 方法可以用来捕获一个对象中不存在的变量和方法。
例九: __set 和 __get
class foo {
function __set($name,$val) {
print(”Hello, you tried to put $val in $name”);
}
function __get($name) {
print(”Hey you asked for $name”);
}
}
$x = new foo();
$x->bar = 3;
print($x->winky_winky);
?>类型指示
在 PHP5 中,你可以在对象的方法中指明其参数必须为另一个对象的实例。
例十:类型指示
class foo {
// code …
}
class bar {
public function process_a_foo(foo $foo) {
// Some code
}
}
$b = new bar();
$f = new foo();
$b->process_a_foo($f);
?>
可以看出,我们可以显性的在参数前指明一个对象的名称,PHP5 会识别出这个参数将会要是一个对象实例。静态成员
静态成员和静态方法在面象对象编程的术语中被称作 “对象方法(class methods)” 和 “对象变量(class variables)”。
“对象方法” 在一个对象没有实例化前允许被调用。同样,“对象变量” 在一个对象没有实例化前可以被独立操作控制(不需要用一个对象的方法来控制)。例十一:对象方法和对象变量
class calculator {
static public $pi = 3.14151692;
static public function add($x,$y) {
return $x + $y;
}
}
$s = calculator::$pi;
$result = calculator::add(3,7);
print(”$result”);
?>异常处理
异常处理是公认的处理程序错误的理想方法,在 Java 及 C++ 中都有这个概念,我们欣喜的看到,在 PHP5 已经加入了这方面的应用。你可以尝试使用 “try” 和 “catch” 来控制程序的错误。
例十二:异常处理
class foo {
function divide($x,$y) {
if($y==0) throw new Exception(”cannot divide by zero”);
return $x/$y;
}
}
$x = new foo();
try {
$x->divide(3,0);
} catch (Exception $e) {
echo $e->getMessage();
echo “n
n”;
// Some catastrophic measure here
}
?>
上例中,我们使用了 “try” 来执行花括号中的语句,当有错误发生的时候,代码会把错误交给 “catch” 子句来处理,在 “catch” 子句中,你需要指明要把错误交给某个对象处理,这样做可以使代码结构看起来更清晰,因为现在我们可以把所有的错误信息交给一个对象来处理。自定义错误处理
你可以很方便的用自定义的处理错误的代码来控制你的程序中的意外。你仅仅需要从异常类中派生出一个自己的错误控制类,在你自己的错误控制类中,你需要有一个构造函数和一个 getMessage 方法,以下是一个例子。
例十三:自定义错误处理
class WeirdProblem extends Exception {
private $data;
function WeirdProblem($data) {
parent::exception();
$this->data = $data;
}
function getMessage() {
return $this->data . ” caused a weird exception!”;
}
}
?>
现在我们可以使用 “throw new WeirdProblem($foo)” 来抛出一个错误句柄,如果错误在 “try” 的代码块中发生,PHP5 会自动把错误交给 “catch” 部分来处理。名称空间
名称空间对类的分组或函数分组很有用。它可以把一些相关的类或函数给组合到一起,方便以后调用。
例十四:名称空间
namespace Math {
class Complex {
//…code…
function __construct() {
print(”hey”);
}
}
} $m = new Math::Complex();
?>
注意你需要在何种情况下使用名称空间,在实际运用中,你可能会需要声明两个或多个名称一样的对象来做不同的事情,那么你就可以把他们分别放到不同的名称空间中去(但接口是要相同的)。 -
国外主流web编辑器
发表于 2010年02月22日 没有评论1. TinyMCE

免费,开源,轻量,基于 JavaScript,高度可定制,跨平台。
2. FCKEditor

免费,开源,用户量庞大,有良好的社区支持。
3. YUI Editor

属于 Yahoo! YUI 的一部分,能输出纯净 XHTML 代码。
4. NicEdit

简单,易用,轻量,外观漂亮。
5. Kupu
开源,支持 Ajax 保存,跨平台,易于集成,由 OSCOM 推出。
6. Free Rich Text Editor
非常容易部署,输出 XHTML 代码,功能丰富。
7. WebWiz RichTextEditor

这是一个商业产品,并不免费,但功能非常丰富,基于 ASP,JavaScript 和 DHTML。
8. XStandard

故名思意,这个编辑器会生成符合标准的纯净 XHTML 代码。
9. Damn Small Rich Text Editor

基于 jQuery 和 PHP 后台,非常小巧(~18K),但功能丰富。
10. WidgEditor

简单,易用,开源,即使浏览器不支持 JavaScript,仍能很好地工作。
11. Kevin Roth’s Cross Browser Rich Text Editor

一个不错的编辑器,支持皮肤,符合 XHTML 标准,跨浏览器兼容,分免费版和收费版两个版本。
12. OpenWYSIWYG

拥有许多出色的功能,容易部署,速度极快。
13. CodePlex Rich Text Editor

基于 ASP.NET,目前只支持 IE 和 Firefox。
14. FreeTextBox

集成了相册,拼写检查等功能,尤其适合 ASP.NET 项目。
15. Silverlight Rich Text Editor

适合与微软的 Silverlight 一起使用,功能丰富,不过,似乎原作者已经不再更新这个项目了。
16. BXE (Bitflux Editor)

从 2002 年以来一直开源,拥有一批非常忠实的用户和社区,据称是目前最好的 WYSIWYG 编辑器之一。
17. MarkItUp!

基于 jQuery,轻量,支持键盘快捷键,支持多种代码,包括 HTML, Textile, Wiki Syntax, Markdown, BBcode。
18. Dijit Editor for Dojo

基于 Dojo JavaScript 框架,输出干净 HTML 代码,支持插件,拥有清新的按钮。
19. EditArea

易于集成,干净代码,实时语法加亮,自动缩进,多语种支持,多实例支持,全屏模式等功能。
20. WYMeditor

输出干净的 XHTML + SCTRICT 代码,注重结构与语义,在输出结构化 XHTML 代码方面是最佳方案。
21. Whizzywig

多浏览器支持,Web 安全色选择器,支持表格,图片,Word 代码清洁,拼写检查等功能。
22. Xinha

基于 BSD协议,易于部署与扩展,拥有很好的社区支持。
-
夸人文章写得好的词
发表于 2009年09月21日 没有评论扬葩振藻:葩:形容文章写得华丽多采。(文采好)
璧坐玑驰:形容文章的语言精采美妙。(语言精妙)
徜徉恣肆:形容文章挥洒自如,气势豪放。(有气势)
辞无所假:写文章时用词有所创新,没有因袭前人。形容文章自成一家,有独特的风格。(用词有创新)
蹙金结绣:形容文章精美,结构严密。(结构严谨)
短小精干:形容文章、言论等简短有力。(精短)
花团锦簇:形容文章辞藻华丽。(辞藻华丽)
浑然一体:形容文章绘画,布置匀整,结构谨严。(结构严谨)
流水行云:形容文章自然不受约束,就象漂浮着的云和流动着的水一样。(既可指语言流畅,也可以指内容自然不受约束)
神完气足:神气十分舒畅。常形容文章首尾贯穿,一气呵成。
硬语盘空:形容文章的气势雄伟,矫健有力。
情文并茂:指文章的思想感情丰富,文辞也很美盛。
笔头生花:形容文章写得很出色。
不蔓不枝:比喻说话或写文章简明扼要,不拖泥带水。
咳唾成珠:比喻言辞精当,议论高明。(言辞准确)
点睛之笔:指文章传神绝妙之处。
开门见山:打开门就能看见山。比喻说话或写文章直截了当谈本题,不拐弯抹角。
旁征博引:指说话、写文章引用材料作为依据或例证。
深入浅出:指讲话或文章的内容深刻,语言文字却浅显易懂。
言之有序:说话和写文章很有条理。
要言不烦:指说话或写文章简单扼要,不烦琐。 -
(马云+牛根生+史玉柱)经典语录
发表于 2009年09月18日 没有评论马云经典语录:
1.当你成功的时候,你说的所有话都是真理。
2.我永远相信只要永不放弃,我们还是有机会的。最后,我们还是坚信一点,这世界上只要有梦想,只要不断努力,只要不断学习,不管你长得如何,不管是这样,还是那样,男人的长相往往和他的的才华成反比。今天很残酷,明天更残酷,后天很美好,但绝对大部分是死在明天晚上,所以每个人不要放弃今天。
3.孙正义跟我有同一个观点,一个方案是一流的Idea加三流的实施;另外一个方案,一流的实施加三流的Idea,哪个好?我们俩同时选择一流的实施,三流的Idea。
4.我既要扔鞭炮,又要扔炸弹。扔鞭炮是为了吸引别人的注意,迷惑敌人;扔炸弹才是我真正的目的。不过,我可不会告诉你我什么时候扔鞭炮,什么时候扔炸弹。游戏就是要虚虚实实,这样才开心。如果你在游戏中感到很痛苦,那说明你的玩法选错了。
5.“其实,有的时候人的最大问题就在于他说的都是对的” 。
6.那些私下忠告我们,指出我们错误的人,才是真正的朋友。
7.我生平最高兴的,就是我答应帮助人家去做的事,自己不仅是完成了,而且比他们要求的做得更好,当完成这些信诺时,那种兴奋的感觉是难以形容的……
8.注重自己的名声,努力工作、与人为善、遵守诺言,这样对你们的事业非常有帮助。
9. 商业合作必须有三大前提:一是双方必须有可以合作的利益,二是必须有可以合作的意愿,三是双方必须有共享共荣的打算。此三者缺一不可。
10.服务是全世界最贵的产品,所以最佳的服务就是不要服务,最好的服务就是不需要服务.
11.永远不要跟别人比幸运,我从来没想过我比别人幸运,我也许比他们更有毅力,在最困难的时候,他们熬不住了,我可以多熬一秒钟、两秒钟。
12.今天到北大演讲心里特别激动。我一直把北大的学子当做我的偶像,一直考却考不进,所以我想如果有一天我一定要到北大当老师。
13.看见10只兔子,你到底抓哪一只?有些人一会儿抓这个兔子,一会儿抓那个兔子,最后可能一只也抓不住。CEO的主要任务不是寻找机会而是对机会说NO。机会太多,只能抓一个。我只能抓一只兔子,抓多了,什么都会丢掉.
14.我们公司是每半年一次评估,评下来,虽然你的工作很努力,也很出色,但你就是最后一个,非常对不起,你就得离开。
15.我们与竞争对手最大的区别就是我们知道他们要做什么,而他们不知道我们想做什么。我们想做什么,没有必要让所有人知道。
16.网络上面就一句话,光脚的永远不怕穿鞋的。
17.中国电子商务的人必须要站起来走路,而不是老是手拉手,老是手拉着手要完蛋。我是说阿里巴巴发现了金矿,那我们绝对不自己去挖,我们希望别人去挖,他挖了金矿给我一块就可以了。
18.我深信不疑我们的模式会赚钱的,亚马逊是世界上最长的河,8848是世界上最高的山,阿里巴巴是世界上最富有的宝藏。一个好的企业靠输血是活不久的,关键是自己造血。
19.我为什么能活下来?第一是由于我没有钱,第二是我对INTERNET一点不懂,第三是我想得像傻瓜一样。
20.发令枪一响,你是没时间看你的对手是怎么跑的。只有明天是我们的竞争对手。
21.如果早起的那只鸟没有吃到虫子,那就会被别的鸟吃掉。
22.听说过捕龙虾富的,没听说过捕鲸富的。
23.好的东西往往都是很难描述的。
24.在我看来有三种人,生意人:创造钱;商人:有所为,有所不为。企业家:为社会承担责任。企业家应该为社会创造环境。企业家必须要有创新的精神。
25.一个公司在两种情况下最容易犯错误,第一是有太多的钱的时候,第二是面对太多的机会,一个CEO看到的不应该是机会,因为机会无处不在,一个CEO更应该看到灾难,并把灾难扼杀在摇篮里。牛根生经典语录:
1.小胜凭智,大胜靠德。
2.有干劲,你就洒下汗水;有知识,你就献出智慧;二者都不具备,请你让出岗位。
3.城市多喝一杯奶,农村致富一家人。
4.财散人聚,财聚人散。
5.一个产品,抓眼球,揪耳朵,都不如暖人心。
6.一个人智力有问题,是次品;一个人的灵魂有问题,就是危险品。经营人心就是经营事业。
7.好心态才有好状态。
8.帮助别人,但不伤害别人。
9.要想知道,打个颠倒。
10.从无到有,是件快乐的事。而从有到无,同样是种快感。
11.产品市场是亿万公民,资本市场是千万股民,原料市场是百万农民。
12.让认识你的人受益,还不能算好;让不认识你的人也受益,那才是真好。
13.吃亏吃到再也吃不进的时候,就不会吃亏了。苦多了,甜就大了。
14.想赢个三回两回,三年五年,有点智商就行;想做个百年老店,想一辈子赢,没有德商绝对不行。
15.学得辛苦,做得舒服;学得舒服,做得辛苦。
16.产品等于人品,质量就是生命。
17.看别人不顺眼,首先是自己修养不够。
18.从最不满意的客户身上,学到的东西最多。
19.管理是严肃的爱。
20.经营企业就是经营人心。
21.人不能把金钱带入坟墓,但金钱却可以把人带入坟墓。
22.一个人快乐不是因为他拥有得多,而是因为计较得少。
23.一个事业能不能成功,关键靠制度设计。
24.别人从零起步,而我从负数起步。
25.听不到奉承的人是一种幸运,听不到批评的人却是一种危险。
26.善待每一头牛,因为它们都是母亲。
27.布局决定结局。
28.世界上还有很多事情,只要你把它做透了,做成专家,你就能够为自己创造成功的机会。
29.会说话的产品卖得快,哑巴产品走得慢。
30.你如果拿五分的力量跟别人较劲,别人会拿出十二分的力量跟你较劲。史玉柱经典语录:
1.90%的困难你现在想都没有想到,你都不知道那是困难。
2。团队核心成员有人要提出辞职时,不要挽留,既然提出了,他迟早是要走的。
3。如果没有价格上的优势与技术上的绝对优势,千万不要进入红海市场,否则你会必输无疑!
4。做连锁经营业务,一定要做一套傻瓜版的营销手册与管理手册,只有这样,才能实现远距离的管理。
5。做成功一个店之后离你大的成功就不远了,所以你首先就是脚踏实地、集中精力地先做出一家,也是要放弃掉连锁的这种,不要在将来如何做连锁方面做太多的梦,先脚踏实地做出第一家。
6。做全国性市场,一定要先做一个试销市场,要一点点来,快不得;做成了,真到做全国市场时,要快半步,慢不得!
7。初中水平跟博士后没啥区别。只要能干就行,我一直是这个观点,不在乎学历,只要能干能做出贡献就行。
8。作为我们曾经失败过,至少有过失败经历的人,应该经常从里面学点东西。人在成功的时候是学不到东西的,人在顺境的时候,在成功的时候,沉不下心来,总结的东西自然是很虚的东西。只有失败的时候,总结的教训才是深刻的,才是真的。
9.对过去成功的经验再好好总结总结,尤其是对失败的教训,下半夜夜深人静的时候你仔细想一想。反正睡觉也想,想一想实际上对你有很大收获比你看书更有用。因为有的书离你远,那是看自己过去写的东西。
10。最痛苦的时候,压力最大的时候,脑子里面只有一件事儿的时候,我把全国分公司经理招到荒山脚下北大门那个地方,招待所里面,然后在那个地方闭门开批判会。大家批判我,批判了三天三夜,我觉得那个就很有用。
11。要改变消费者固有的想法,比登太阳还难;但不是不可能的。
12。现在的时代,战略正确之后细节决定因素,有很多细节处理不好,你的战略正确了也会失败。
13。不要只看塔尖,二三线市场比一线的更大。
14。管理无情,人有情。
15。所谓人才,就是你交给他一件事情,他做成了;你再交给他一件事情,他又做成了。16、营销里面有个叫第一法则。你到哈佛去学的时候,他会说一个案例。对美国人来说,谁第一个飞越大西洋的人?一般都能回答得出来,但是问谁是第二个飞越的,就没人能回答出来了。谁是第三个飞越的?记得了。为什么?第三个是第一个女性飞越,她拥有了个第一。
17、你一定要在你的品牌建设里面,把你的第一给挖出来,猛宣传那一点。18、宣传用什么手段呢?我建议别上来上电视。第一、报纸,第二个、创造事件营销,让媒体作为新闻自觉去报道你,这样很省钱。
19、不诚信的是吧?我说三年之内我要把他们的钱还掉,我满了三年我没有还出来,没有还出来,老百姓那时候是很痛恨我的,看到他们对我愤怒的眼光,那种击是非常大的。所以我后面这些东西,实际上我是在补我过去的过失。
20、做任何一件事或者违反任何一个规则,都是要付出成本的。只不过我觉得作为一个企业,你不诚信而付出的成本是十分巨大的,这个都是血的教训换来的。
-
聪明识人
发表于 2009年07月1日 没有评论看一个人有没有前途,是否聪明是最重要的评判标准。俗话说物以类聚,聪明人也愿意和聪明人在一起。环顾四周,你认为你周围的朋友都是笨蛋的时候,最重要的考虑不是想办法把他们变得聪明起来,而是尽快找几个您感觉聪明人成为你的朋友!
人聪明分两种,一种是思维活跃,发散思维强,表现在这个人主意多,脑袋快。一种是逻辑思维强,表现在想问题逻辑性非常好,比如中国的学习成绩好的学生。如果一个人您认为他两者都不符合,那么这个人应该性格好一点,否则,为什么要和又笨性格又差的人做朋友呢?
回到话题,怎么判断一个人的发散思维好呢?就是和他瞎聊,看看他想的东西杂不杂,主意多不多,在一个问题面前有几个解决办法,比如问他上班有几条路可以走等等。值得注意的事,发散思维好的人一般比较自负,不过那是应该的,谁让人家聪明呢?大体老板、商人是发散思维好的人。
另外一种聪明人其实我们大部分人称之为讷,就是木,因为对一个问题关注太多而不能自拔,又有钻牛角的脾气和个性,非要把一个东西弄顺了、弄清楚了、弄明白了,但恰恰这个世界任何一件事物又都很复杂,越是深入发现越弄不清。所以说爱因斯坦和聂卫平本质上一样的,只是非要弄清的物件不一样而已。
两种聪明实际上又是相对的,目前对人而言,不自然把参照物定位于本身。明白点就是说,判断一个人是不是发散思维好,和他谈完话,发现他所说所想和自己相差较大,就指定他笨蛋,但纳闷,很多人特欣赏他,原因就是参照物的差别!同样,和牛人谈话,当你感觉思维跟不上他的思维的时候,对他而言,你何尝不是笨蛋呢?逻辑思维方面也是同样道理,棋逢对手最好,与我相比,水平太高和太低的人都和我下不到一块去!对专业技能的高低评判我们也应该依据最原始的两点:发散思维和逻辑思维能力。两者较高的人,专业技能在时间允许的条件下也相对较高,反之则低。这就解决了一个重要问题,当你在寻找不属于本专业的技能人才的时候,你考察他什么?不如问他上班有几条路可选或者看他的象棋水平的高低!
-
Mysql配置为Master/Slave的常用维护命令
发表于 2009年05月22日 没有评论master端:
show master status;—查看状态:
show processlist; –查看slave下mysql进程信息
reset master; #慎用,将清空日志及同步positionslave端:
CHANGE MASTER TO MASTER_LOG_FILE=’master.000019′;
show slave status;
show slave logs;
show processlist;
reset slave; #慎用,将清空slave配置信息、日志及同步position
在从服务器上跳过错误事件
mysql>stop slave;
mysql>set global sql_slave_skip_counter = n(跳过主服务器中的接下来的 n 个事件。此命令对于由语句引起的复制终止有效。仅在从服务器线程没运行的时候有效);
mysql>start slave;mysql 主服务器中同步用户 必须具有 SUPER ,RELOAD,REPLICATION SLAVE 权限
当新加从服务器时,需要先在从库上 load data master; 保证和其他从库数据一致
set global sql_slave_skip_counter=n # 客户端运行,用来跳过几个事件,只有当同步进程出现错误而停止的时候才可以执行。
reset master #主机端运行,清除所有的日志,这条命令就是原来的flush master
reset slave #从机运行,清除日志同步位置标志,并重新生成master.info
虽然重新生成了master.info,但是并不起用,最好,将从机的mysql进程重启一下,
load table tblname from master
#从机运行,从主机端重读指定的表的数据,每次只能读取一个,受timeout时间限制,需要调整timeout时间。执行这个命令需要同步账号有reload和super权限。以及对相应的库有select权限。如果表比较大,要增加net_read_timeout 和 net_write_timeout的值load data from master #从机执行,从主机端重新读入所有的数据。执行这个命令需要同步账号有reload和super权限。以及对相应的库有select权限。如果表比较大,要增加net_read_timeout 和 net_write_timeout的值
change master to master_def_list #在线改变一些主机设置,多个用逗号间隔,比如
change master to
master_host=’master2.mycompany.com’,
master_user=’replication’,
master_password=’bigs3cret’
master_pos_wait() #从机运行
show master status #主机运行,看日志导出信息
show slave hosts #主机运行,看连入的从机的情况。
show slave status (slave)
show master logs (master)
show binlog events [ in 'logname' ] [ from pos ] [ limit [offset,] rows ]
purge [master] logs to ‘logname’ ; purge [master] logs before ‘date’
//显示所有本机上的二进制日志
mysql> SHOW MASTER LOGS;
//删除所有本机上的二进制日志
mysql> RESET MASTER;
//删除所有创建时间在binary-log.xxx之前的二进制日志
mysql> PURGE MASTER LOGS TO ‘binary-log.xxx’;
//只保留最近6天的日志,之前的都删掉
find /var/intra -type f -mtime +6 -name “*.log” -exec rm -f {} \;
//用键盘左上角(也就是Esc下面)那个键包围起来,说明是命令。-1d是昨天,以此类推-1m是上个月等等
day=`/bin/date -v -1d +%Y%m%d`;
//给文件改名
mv xxx.log xxx-${day}.log;
//这里还要加上数据库的用户名密码,作用是更新日志(包括二进制日志和查询日志等等)
mysqladmin flush-logs -
Apache2运用mod_deflate已经代替了mod_gizp
发表于 2009年05月22日 没有评论apache2已经用mod_deflate代替了mod_gzip
apache2已经包含了mod_deflate
打开模组
- /usr/local/apache2/bin/apxs -i -c /yourpath/httpd-2.2.3/modules/filters/mod_deflate.c
httpd.conf添加
- LoadModule deflate_module modules/mod_deflate.so
如果想只压缩html,text,xml 如果下面配置:
- AddOutputFilterByType DEFLATE text/html text/plain text/xml
下面给出我的配置档:
- LoadModule deflate_module modules/mod_deflate.so
- SetOutputFilter DEFLATE
- BrowserMatch ^Mozilla/4 gzip-only-text/html
- BrowserMatch ^Mozilla/4\.0[678] no-gzip
- BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
- # Don’t compress images
- SetEnvIfNoCase Request_URI \
- \.(?:gif|jpe?g|png)$ no-gzip dont-vary
- SetEnvIfNoCase Request_URI \
- \.(?:exe|t?gz|zip|bz2|sit|rar)$ no-gzip dont-vary
- SetEnvIfNoCase Request_URI \
- \.pdf$ no-gzip dont-vary
- SetEnvIfNoCase Request_URI \
- \.(css|js)$ no-gzip dont-vary
- # Make sure proxies don’t deliver the wrong content
- Header append Vary User-Agent env=!dont-vary
- DeflateFilterNote Input input_info
- DeflateFilterNote Output output_info
- DeflateFilterNote Ratio ratio_info
- LogFormat ‘”%r” %{output_info}n/%{input_info}n (%{ratio_info}n%%)’ deflate
- CustomLog logs/deflate_log.log deflate
在apache的使用手册上还有这么一句,但是不知道为什么不能添加上去.
- # Make sure proxies don’t deliver the wrong content
- Header append Vary User-Agent env=!dont-vary
这个可以压缩 SVN 出来的文件。
———————————————
不能添加的原因是下面的模组没有打开:
- LoadModule headers_module modules/mod_headers.so
=================
Apache deflate模块配置说明
前几天一直在找apache2.0以dso方式编译后加载deflate模块的办法
试了apxs -ica mod_deflate.c N次,始终是报- Cannot load /opt/apache/modules/mod_deflate.so into server: /opt/apache/modules/mod_deflate.so: undefined symbol: deflate
异常的痛苦,什么ldd mod_deflate.so后再export LIB_LIBRARY_PATH呀,都试了N次,google也go了N天。终于在google上go出来一篇文章,终于解决,方法如下:
- vi /usr/local/apache2/bin/apr-config
- 修改LDFLAGS=” ” 为 LDFLAGS=”-lz”
- 然后再apxs -ica mod_deflate.c
- 就OK了
另外在配置deflate规则时
apache2.0推荐加上这句- Header append Vary User-Agent env=!dont-vary
以便确保不会输出在压缩过程中出现内容方面的error
但一般情况下,在测试apache的语法过程中会现出
Invalid command ‘Header’, perhaps mis-spelled or defined by a module not included in the server configuration
解决办法就是加载一个headers模块就OK了不过最好还是在编译apache模块时直接加上–enable-deflate –enable-headers就省事多了。
一、 需求
压缩apache的输出内容,降低网站带宽
二、 加载Apache的deflate模块
1、 修改apr-config- vi /usr/local/apache2/bin/apr-config
修改LDFLAGS=” ” 为 LDFLAGS=”-lz”
2、 到apache源安装目录下,例如- cd /root/httpd-2.0.55/modules/filters
3、加载mod_deflate模块
- /usr/local/apache2/bin/apxs -i -a -c mod_deflate.c
如果没有安装headers模块,加载headers模块
- cd /root/httpd-2.0.55/modules/metadata
加载mod_headers模块
- /usr/local/apache2/bin/apxs -i -a –c mod_headers.c
三、配置Apache主配置文件
1. 在httpd.conf主配置文件里添加如下行- #声明输入流的byte数量
- DeflateFilterNote Input instream
- #声明输出流的byte数量
- DeflateFilterNote Output outstream
- #声明压缩的百分比
- DeflateFilterNote Ratio ratio
- #声明日志类型
- LogFormat ‘”%r” %{outstream}n/%{instream}n (%{ratio}n%%)’ deflate
- CustomLog logs/deflate_log deflate
- #指定压缩参数
- # Insert filter
- SetOutputFilter DEFLATE
- # Netscape 4.x has some problems…
- BrowserMatch ^Mozilla/4 gzip-only-text/html
- # Netscape 4.06-4.08 have some more problems
- BrowserMatch ^Mozilla/4\.0[678] no-gzip
- # MSIE masquerades as Netscape, but it is fine
- # BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
- # NOTE: Due to a bug in mod_setenvif up to Apache 2.0.48
- # the above regex won’t work. You can use the following
- # workaround to get the desired effect:
- BrowserMatch \bMSI[E] !no-gzip !gzip-only-text/html
- # Don’t compress images
- SetEnvIfNoCase Request_URI \.(?:gif|jpg|cab|jpe?g|exe|bmp|mp3|rar|zip|swf|png)$ no-gzip dont-vary
- # Make sure proxies don’t deliver the wrong content
- Header append Vary User-Agent env=!dont-vary
二、日志输出格式如下
- [root@trffic2 logs]# tail -f access_log
- “GET /apache_pb.gif HTTP/1.1″ -/- (-%)
- “GET /manual/ HTTP/1.1″ 2163/7434 (29%)
- “GET /manual/style/css/manual.css HTTP/1.1″ 3973/18335 (21%)
- “GET /manual/style/css/manual-loose-100pc.css HTTP/1.1″ 1006/2882 (34%)
- “GET /manual/style/css/manual-print.css HTTP/1.1″ 2994/13017 (23%)
_________________
apache1.3.x可以用mod_gzip进行优化网页浏览的速度,可以明显的感觉到速度的提升。在apache2中也尝试用mod_gzip,但是配置后确发现网页不能正确显示(空白页),所以改换mod_deflate。
在Linux命令行下运行以下命令安装mod_deflate模块(斜体是apache2的目录)- /usr/local/apache2/bin/apxs -i -c /root/httpd-2.0.48/modules/filters/mod_deflate.c
编辑httpd.conf,加入以下内容:
- LoadModule deflate_module modules/mod_deflate.so
- DeflateFilterNote ratio
- LogFormat ‘”%v %h %l %u %t “%r” %>s %b “%{Referer}i” “%{User-Agent}i”" (%{ratio}n)’ deflate
- # Insert filter
- SetOutputFilter DEFLATE
- # Netscape 4.x has some problems…
- BrowserMatch ^Mozilla/4 gzip-only-text/html
- # Netscape 4.06-4.08 have some more problems
- BrowserMatch ^Mozilla/4.0[678] no-gzip
- # MSIE masquerades as Netscape, but it is fine
- BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
- # Don’t compress images
- SetEnvIfNoCase Request_URI
- .(?:gif|jpe?g|png)$ no-gzip dont-vary
- # Make sure proxies don’t deliver the wrong content
- # Header命令不对?注释这一行
- # Header append Vary User-Agent env=!dont-vary
- #查找Customlog 注释原来的的一行,改成
- CustomLog logs/deflate_log deflate
- #查看logs目录下deflate_log文件,你可以看到许多这样的信息:
- “www.21php.com 220.163.107.88 - - [27/Mar/2004:01:03:55 -0800] “GET /ad/usrlogo/21PHPLOGO_88X31.gif HTTP/1.1″ 200 3656 “http://soft.ttee.com/vbb/” “Mozilla/4.0 (compatible; MSIE 5.5; Windows 98)”" (-)
- “www.21php.com 211.144.88.138 - - [27/Mar/2004:01:03:57 -0800] “GET /tutorial/tutorial.php?tid=68 HTTP/1.1″ 200 5173 “http://www.21php.com/tutorial/tutorial.php?catalogid=12″ “Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; MyIE2; .NET CLR 1.0.3705; Alexa Toolbar)”" (29)
- “www.21php.com 211.144.88.138 - - [27/Mar/2004:01:03:58 -0800] “GET /style.cssHTTP/1.1″ 304 - “http://www.21php.com/tutorial/tutorial.php?tid=68″ “Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; MyIE2; .NET CLR 1.0.3705; Alexa Toolbar)”" (-)
- “www.21php.com 211.144.88.138 - - [27/Mar/2004:01:03:58 -0800] “GET /images/bar-4.gif HTTP/1.1″ 304 - “http://www.21php.com/tutorial/tutorial.php?tid=68″ “Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; MyIE2; .NET CLR 1.0.3705; Alexa Toolbar)”" (-)
- “www.21php.com 211.144.88.138 - - [27/Mar/2004:01:03:58 -0800] “GET /images/logo.gif HTTP/1.1″ 304 - “http://www.21php.com/tutorial/tutorial.php?tid=68″ “Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; MyIE2; .NET CLR 1.0.3705; Alexa Toolbar)”" (-)
- “www.21php.com 211.144.88.138 - - [27/Mar/2004:01:03:58 -0800] “GET /images/icon1.gif HTTP/1.1″ 304 - “http://www.21php.com/tutorial/tutorial.php?tid=68″ “Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; MyIE2; .NET CLR 1.0.3705; Alexa Toolbar)”" (-)
Boban 写于2004年3月27日凌晨
附注:关于mod_deflate的详细内容,可以参考http://httpd.apache.org/docs-2.0/mod/mod_deflate.html
__________________如果apache是rpm安装的,那么默认就已经有mod_deflate这个模块了。
更详细的可以看这里:http://sysoev.ru/mod_deflate/readme.html因为mod_deflate相比较mod_gzip来说,有了更多的更新,所以我用上了它!
注意:mod_gzip在apache1.x上用起来比较好,但是在apache2.x上用起来就不是很爽,老出错,也许是我的水平问题,没办法,所以改用:mod_deflate
我的apache:2.0.55
配置如下:(修改:httpd.conf)- DeflateCompressionLevel 9
- AddOutputFilterByType DEFLATE text/html text/plain text/xml
- application/x-httpd-php
- AddOutputFilter DEFLATE js css
- BrowserMatch ^Mozilla/4 gzip-only-text/html
- BrowserMatch ^Mozilla/4\.0[678] no-gzip
- BrowserMatch \bMSI[E] !no-gzip !gzip-only-text/html
- Header append Vary User-Agent env=!dont-vary
- DeflateFilterNote deflate_ratioLogFormat “%v %h %l %u %t \”%r\” %>s %b mod_deflate: %{deflate_ratio}n pct.” vhost_with_deflate_infoCustomLog logs/order.7180.com-access_log vhost_with_deflate_info
将以上的配置文字加入到:之间即可:)
以上的做法是压缩一般的网页html、xml、php、css、js等格式文件的输出,虽然会占用一点服务器的资源,不过这个可以减少带宽被占用的情况:)
这里:DeflateCompressionLevel 9是指压缩程度的等级,从1到9,9是最高级别的。这样做可以压缩到20%的大小,最少也有50%。至于jpg等已经压缩过的文件,就不需要再压缩了。




