Selector | Example | Selects |
---|---|---|
* | $(“*”) | All elements |
#id | $(“#lastname”) | The element with id=lastname |
.class | $(“.intro”) | All elements with |
element | $(“p”) | All p elements |
.class.class | $(“.intro.demo”) | All elements with the classes “intro” and “demo” |
:first | $(“p:first”) | The first p element |
:last | $(“p:last”) | The last p element |
:even | $(“tr:even”) | All even tr elements |
:odd | $(“tr:odd”) | All odd tr elements |
:eq(index) | $(“ul li:eq(3)”) | The fourth element in a list (index starts at 0) |
:gt(no) | $(“ul li:gt(3)”) | List elements with an index greater than 3 |
:lt(no) | $(“ul li:lt(3)”) | List elements with an index less than 3 |
:not(selector) | $(“input:not(:empty)”) | All input elements that are not empty |
:header | $(“:header”) | All header elements h1, h2 … |
:animated | $(“:animated”) | All animated elements |
:contains(text) | $(“:contains(‘W3Schools’)”) | All elements which contains the text |
:empty | $(“:empty”) | All elements with no child (elements) nodes |
:hidden | $(“p:hidden”) | All hidden p elements |
:visible | $(“table:visible”) | All visible tables |
s1,s2,s3 | $(“th,td,.intro”) | All elements with matching selectors |
[attribute] | $(“[href]”) | All elements with a href attribute |
[attribute=value] | $(“[href=’default.htm’]”) | All elements with a href attribute value equal to “default.htm” |
[attribute!=value] | $(“[href!=’default.htm’]”) | All elements with a href attribute value not equal to “default.htm” |
[attribute$=value] | $(“[href$=’.jpg’]”) | All elements with a href attribute value ending with “.jpg” |
[attribute^=value] | $(“[href^=’jquery_’]”) | All elements with a href attribute value starting with “jquery_” |
:input | $(“:input”) | All input elements |
:text | $(“:text”) | All input elements with type=”text” |
:password | $(“:password”) | All input elements with type=”password” |
:radio | $(“:radio”) | All input elements with type=”radio” |
:checkbox | $(“:checkbox”) | All input elements with type=”checkbox” |
:submit | $(“:submit”) | All input elements with type=”submit” |
:reset | $(“:reset”) | All input elements with type=”reset” |
:button | $(“:button”) | All input elements with type=”button” |
:image | $(“:image”) | All input elements with type=”image” |
:file | $(“:file”) | All input elements with type=”file” |
:enabled | $(“:enabled”) | All enabled input elements |
:disabled | $(“:disabled”) | All disabled input elements |
:selected | $(“:selected”) | All selected input elements |
:checked | $(“:checked”) | All checked input elements |
-
jquery reference
-
一些常用开源软件
操作系统:Centos※,Freebsd,Ubuntu
网站服务:apache※,nginx※,lighttpd,php※,tomcat※,resin※
数据 库:Mysql※,PostgreSQL,Mysql-proxy
代理相关:lvs,keepalived,haproxy,nginx,apache,heartbeat(此行都是※)
网站缓存:squid※,nginx※,varnish
内存缓存:memcache※,memcached,TokyoTyrant※,MongoDB,Cassandra※,redis※,tair,CouchDB
存储相关:Nfs※,Moosefs※,Hadoop※,gfs※,lustre,FastDFS
版本管理:cvs,svn※,git※
监控报警:mboy,mrtg,nagios※,cacti※,zbbix,munin※,hyperic※
域名解析:bind※,powerdns,dnsmq※
同步软件:rsync,sersync,drbd,csync2+lsyncd(此行都是※)
分发工具:Secboy※,expect※,puppet※,cfengine※,ssh+rsync+sersync※
虚拟软件:xen※,kvm
内网软件:iptables※,zebra※,iftraf,ntop※,tc※,iftop
邮件软件:qmail※,posfix※,sendmail
远程拨号:openvpn※,pptp,openswan※,ipip※
统一认证:ldap※
队列工具:ActiveMQ※,RabbitMQ
打包发布:mvn※,ants※,jenkins※
测试软件:apache ab,smokeping,siege,JMeter,Webbench,LoadRunner(此行都是※)
日志相关:syslog,rsyslog,Awstats
DB代理 :mysql-proxy,amoeba -
linux下 crontab文件在哪 crontab文件路径
用户的都在/var/spool/cron/下/var/spool/cron/crontabs/root -
linux三台以上服务器集群间建立ssh信任关系
linux服务器集群之间进行ssh访问时需要输入密码,对进行scp等操作很麻烦,现教大家如何在linux服务器集群之间实现无密码访问。 ssh访问是是需要指定用户的,所以此处建立用户信任关系时以root用户为例,如服务器集群中有三台服务器,分别为A、B、C。现在要实现三台机器之间的root用户的相互无密码访问,操作步骤如下:
(1 )用root用户登录A服务器,执行ssh-keygen -t rsa 命令,此命令为A机器上的用户root 生成密钥对。当询问保存路径时全部回车采用默认路径即可,当提示要为密钥输入 passphrase 是回车采用空密码。此命令执行完毕生成一对密钥文件 id_rsa (私钥)和 id_rsa.pub (公钥),默认存储在 /root/.ssh 下;
(2 ) 把生成的id_ras.pub 重定向到authorized_keys,命令是cat id_ras.pub > authorized_keys,把authorized_keys文件拷贝到B机器上得的同一目录下(命令为:scp /root/.ssh/authorized_keys root@B: /root/.ssh/ 或者 scp ./authorized_keys root@B: pwd);(3)用root用户登录B机器,按照要求执行(1)步骤,然后,将生成的 id_ras.pub 追加到authorized_keys文件中,命令是cat id_ras.pub >> authorized_keys,然后将 authorized_keys文件拷贝覆盖掉A级器上的authorized_keys文件,这样A,B机器之间就可以实现相互之间的ssh无密码访问。
(4)对于C机器,同样将生成的生成的 id_ras.pub 追加到authorized_keys文件中,然后用新的authorized_keys文件覆盖A、B机器上的authorized_keys文件,则A、B、C机器之间就可以进行ssh无密码访问了。
注:以上是对root用户而言,如果是普通用户的话,则权限需要修改,.ssh文件夹权限是700,authorized_keys文件的权限是600,执行以下两个语句即可:
chmod 700 .ssh
chmod 600 authorized_keys -
利用rsync 从 windows2003⇒linux系统备份
windows端 安装rsyncServer(WINDOWS)版本 1.程序目录下配置文件 rsyncd.conf 修改为:
port = 873 use chroot = false strict modes = false uid=0 gid=0 list = no hosts allow = * log file = rsyncd.log #rsync连接时需要提供的用户名密码 auth users = rsync_picbak secrets file = rsyncd.secrets (跟rsyncd.conf配置文件是同级目录) [test] #同步目录设置 /cygdrive/d/代表d盘 path = /cygdrive/d/websites read only = yes transfer logging = yes
2.rsyncd.secrets的内容为:
rsync_picbak = 111111(密码)
3.启动rsync服务
打开“控制面板”-->“管理工具”-->“服务”: 找到一个RsyncServer的服务,启动它(防火墙设置记得打开873端口)
linux端安装rsync的client客户端
安装完毕 ,telnet 服务器ip 873 通的就可以执行以下同步操作了
rsync -vzrtopg --progress --delete --password-file=/var2/db_bak/pass_file rsync_picbak@122.225.115.*::test/ /var2/pic_bak/208 /var2/db_bak/pass_file 为存放密码的文件 /var2/pic_bak/208 为本机需要备份的文件夹名称
-
mysql主从同步过程 同步原理
Replication 线程
Mysql的 Replication 是一个异步的复制过程,从一个 Mysql instace(我们称之为 Master)复制到另一个 Mysql instance(我们称之 Slave)。在 Master 与 Slave 之间的告终全副复制过程重要由三个线程来告终,其中两个线程(Sql线程和IO线程)在 Slave 端,另外一个线程(IO线程)在 Master 端。
要告终 MySQL 的 Replication ,率先定然敞开 Master 端的Binary Log(mysql-bin.******)功能,否则无法告终。因为全副复制过程切实上即便Slave从Master端获得该日志然后再在自己身上全面 次序的厉行日志中所登记的各种垄断。敞开 MySQL 的 Binary Log 能够穿越在启用 MySQL Server 的过程中利用 “—log-bin” 参数选项,可能在 my.cnf 搭配文件中的 mysqld 参数组([mysqld]标识后的参数局部)添置 “log-bin” 参数项。
MySQL 复制的大约过程如下:
1. Slave 上面的IO线程连接上 Master,并哀求从指定日志文件的指定位置(可能从最开始的日志)尔后的日志内容;
2. Master 接收到来自 Slave 的 IO 线程的哀求后,穿越负责复制的 IO 线程依据哀求消息读取指定日志指定位置尔后的日志消息,归来给 Slave 端的 IO 线程。归来消息中除非日志所包括的消息之外,还包括鄙碌回的消息在 Master 端的 Binary Log 文件的名目以及在 Binary Log 中的位置;
3. Slave 的 IO 线程接收到消息后,将接收到的日志内容顺次写入到 Slave 端的Relay Log文件(mysql-relay-bin.******)的最末路,并将读取到的Master端的bin-log的文件名和位置登记到master- info文件中,以便在下顺次读取的时候能够打听的高速Master“我必需从某个bin-log的哪个位置开始后来的日志内容,请发给我”
4. Slave 的 SQL 线程检测到 Relay Log 中新添置了内容后,会即刻解析该 Log 文件中的内容成为在 Master 端诚厉行行时候的那些可厉行的 Query 语句,并在切身厉行这些 Query。这么,切实上即便在 Master 端和 Slave 端厉行了同样的 Query,因而两端的数据是全面一样的。
切实上,在老版本中,MySQL 的复制告终在 Slave 端并不是由 SQL 线程和 IO 线程这两个线程共同配合而告终的,而是由独自的一个线程来告终所有的工作。然而 MySQL 的工程师们很快觉察,这么做存在很大的危险和功能问题,重要如下:
率先,万一穿越一个单一的线程来自力更生告终这个工作的话,就使复制 Master 端的,Binary Log日志,以及解析这些日志,然后再在切身厉行的这个过程成为一个串行的过程,功能慷慨会受到较大的局限,这种架构下的 Replication 的迟到慷慨就比拟长了。
其次,Slave 端的这个复制线程从 Master 端获得 Binary Log 到来尔后,必需随后解析这些内容,还原成 Master 端所厉行的原始 Query,然后在切身厉行。在这个过程中,Master端很可能又曾经发生了许多的改变并生成了许多的 Binary Log 消息。万一在这个阶段 Master 端的存储系统揭示了无法修复的故障,那么在这个阶段所发生的所有改变都将永远的失落,无法再找归来。这种埋伏危险在Slave 端压力比拟大的时候尤其冒尖,因为万一 Slave 压力比拟大,解析日志以及利用这些日志所花费的工夫慷慨就会更长一些,可能失落的数据也就会更多。
因而,在后期的改革中,新版本的 MySQL 为了尽量减小这个危险,并长进复制的功能,将 Slave 端的复制改为两个线程来告终,也即便前面所提到的 SQL 线程和 IO 线程。最早提出这个改进计划的是Yahoo!的一位工程师“Jeremy Zawodny”。穿越这么的改革,这么既在很大程度上处理了功能问题,缩小了异步的延随工夫,同时也收缩了埋伏的数据失落量。
当然,即便是换成了目前这么两个线程来配合处理尔后,同样也还是存在 Slave 数据延时以及数据失落的可能性的,终究这个复制是异步的。凡是数据的改动不是在一个事务中,这些问题都是存在的。
万一要全面避免这些问题,就只能用 MySQL 的 Cluster 来处理了。不过 MySQL的 Cluster 懂得笔者写这局部内容的时候,依旧还是一个内存数 据库的处理计划,也即便必需将所有数据包括索引全副都 Load 到内存中,这么就对内存的要求就极其大的大,对于等闲的公众化利用来说可厉行性并不是太大。当然,在之前与 MySQL 的 CTO David 沟通的时候得知,MySQL 目前正在不时改进其 Cluster 的告终,其中极其大的一个修改即便批准数据无须全副 Load 到内存中,而仅仅只是索引全副 Load 到内存中,我想信在告终该项改革尔后的 MySQL Cluster 将会更加受人迎接,可厉行性也会更大 -
帝国目录权限修改脚本
#! /bin/sh
chmod 777 d/ -Rf
chmod 777 s/ -Rf
chmod 777 search/ -Rf
chmod 777 html/ -Rf
chmod 777 index.html -Rf
chmod 777 e/data/ -Rf
chmod 777 e/install/ -Rf
chmod 777 e/admin/ebak/bdata/ -Rf
chmod 777 e/admin/ebak/zip/ -Rf
chmod 777 e/class/config.php
chmod 777 e/class/user.php
chmod 777 e/member/iframe/index.php
chmod 777 e/member/login/loginjs.php
chmod 777 e/pl/more/index.php
chmod 777 e/sch/index.php
chmod 777 e/tool/feedback/temp/ -Rf
chmod 777 e/tool/gbook/index.php -
insert into … select …
语句形式为:Insert into Table2(field1,field2,…) select value1,value2,… from Table1
要求目标表Table2必须存在,由于目标表Table2已经存在,所以我们除了插入源表Table1的字段外,还可以插入常量。 -
nginx + spawn-fcgi
apt-get install spawn-fcgi php5-cgi
用 spawn-fcgi 启动 fcgi ,
spawn-fcgi -a 127.0.0.1 -p 8000 -u nobody -f /usr/bin/php-cgi -C 5 ;
在 nginx 里配置加一句:
location ~ .php$ {
fastcgi_pass 127.0.0.1:8000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /home/nginx/html$fastcgi_script_name;
include fastcgi_params;
} -
linux系统内核优化tcp参数 sysctl.conf
查看网络连接状态
netstat -nat |awk '{print $6}'|sort|uniq -c|sort -rn
debian系统32位优化
在Squid服务器中
vi /etc/sysctl.conf
net.ipv4.tcp_syncookies=1
net.ipv4.tcp_synack_retries = 2
net.ipv4.tcp_syn_retries = 2
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_keepalive_time = 120
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.ip_local_port_range = 2048 65000
net.ipv4.tcp_max_syn_backlog = 8192
net.core.netdev_max_backlog=10000Apache或Nginx等的Web服务器,或Nginx的反向代理,则只需要更改以下几项即可:
net.ipv4.tcp_syncookies=1
net.ipv4.tcp_tw_reuse=1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.ip_local_port_range = 1024 65000
如果是邮件服务器,则建议内核方案如下:net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_keepalive_time = 300
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.ip_local_port_range = 5000 65000
kernel.shmmax = 134217728其中:
net.ipv4.tcp_syncookies=1表示开启SYN Cookies。当出现SYN等待队列溢出时,启用cookie来处理,可防范少量的SYN攻击。默认为0,表示关闭。
net.ipv4.tcp_tw_reuse=1表示开启重用。允许将TIME-WAIT套接字重新用于新的TCP连接。默认为0,表示关闭。
net.ipv4.tcp_tw_recycle=1表示开启TCP连接中TIME-WAIT套接字的快速回收。默认为0,表示关闭。
net.ipv4.tcp_fin_timeout=30表示如果套接字由本端要求关闭,这个参数决定了它保持在FIN-WAIT-2状态的时间。
net.ipv4.tcp_keepalive_time=1200表示当keepalive启用时,TCP发送keepalive消息的频度。默认是2小时,这里改为20分钟。
net.ipv4.ip_local_port_range=1024 65000表示向外连接的端口范围。默认值很小:32768~61000,改为1024~65000。
net.ipv4.tcp_max_syn_backlog=8192表示SYN队列的长度,默认为1024,加大队列长度为8192,可以容纳更多等待连接的网络连接数。
net.ipv4.tcp_max_tw_buckets=5000表示系统同时保持TIME_WAIT套接字的最大数量,如果超过这个数字,TIME_WAIT套接字将立刻被清除并打印警告信息。默认为180000,改为5000。对于Apache、Nginx等服务器,前面介绍的几个参数已经可以很好地减少TIME_WAIT套接字数量,但是对于Squid来说,效果却不大。有了此参数就可以控制TIME_WAIT套接字的最大数量,避免Squid服务器被大量的TIME_WAIT套接字拖死。
netdev_max_backlog 在接口接收数据包的速率比内核处理这些包的速率快时,允许送到队列的数据包的最大数目。
执行以下命令使内核配置立即生效:
/sbin/sysctl -p
sysctl.conf中相关重要设定的详细说明
$ /proc/sys/net/core/wmem_max
最大socket写buffer,可参考的优化值:873200
$ /proc/sys/net/core/rmem_max
最大socket读buffer,可参考的优化值:873200
$ /proc/sys/net/ipv4/tcp_wmem
TCP写buffer,可参考的优化值: 8192 436600 873200
$ /proc/sys/net/ipv4/tcp_rmem
TCP读buffer,可参考的优化值: 32768 436600 873200
$ /proc/sys/net/ipv4/tcp_mem
同样有3个值,意思是:
net.ipv4.tcp_mem[0]:低于此值,TCP没有内存压力.
net.ipv4.tcp_mem[1]:在此值下,进入内存压力阶段.
net.ipv4.tcp_mem[2]:高于此值,TCP拒绝分配socket.
上述内存单位是页,而不是字节.可参考的优化值是:786432 1048576 1572864
$ /proc/sys/net/core/netdev_max_backlog
进入包的最大设备队列.默认是300,对重负载服务器而言,该值太低,可调整到1000.
$ /proc/sys/net/core/somaxconn
listen()的默认参数,挂起请求的最大数量.默认是128.对繁忙的服务器,增加该值有助于网络性能.可调整到256.
$ /proc/sys/net/core/optmem_max
socket buffer的最大初始化值,默认10K.
$ /proc/sys/net/ipv4/tcp_max_syn_backlog
进入SYN包的最大请求队列.默认1024.对重负载服务器,增加该值显然有好处.可调整到2048.
$ /proc/sys/net/ipv4/tcp_retries2
TCP失败重传次数,默认值15,意味着重传15次才彻底放弃.可减少到5,以尽早释放内核资源.
$ /proc/sys/net/ipv4/tcp_keepalive_time
$ /proc/sys/net/ipv4/tcp_keepalive_intvl
$ /proc/sys/net/ipv4/tcp_keepalive_probes
这3个参数与TCP KeepAlive有关.默认值是:
tcp_keepalive_time = 7200 seconds (2 hours)
tcp_keepalive_probes = 9
tcp_keepalive_intvl = 75 seconds
意思是如果某个TCP连接在idle 2个小时后,内核才发起probe.如果probe 9次(每次75秒)不成功,内核才彻底放弃,认为该连接已失效.对服务器而言,显然上述值太大. 可调整到:
/proc/sys/net/ipv4/tcp_keepalive_time 1800
/proc/sys/net/ipv4/tcp_keepalive_intvl 30
/proc/sys/net/ipv4/tcp_keepalive_probes 3
$ proc/sys/net/ipv4/ip_local_port_range
指定端口范围的一个配置,默认是32768 61000,已够大.