淫荡的一天又开始了!!!

一个让银蛋疼的博客



MySQL 百万级分页优化

以下分享一点我的经验

一般刚开始学SQL的时候,会这样写

SELECT * FROM table ORDER BY id LIMIT 1000, 10;

但在数据达到百万级的时候,这样写会慢死

SELECT * FROM table ORDER BY id LIMIT 1000000, 10;

也许耗费几十秒

网上很多优化的方法是这样的

SELECT * FROM table WHERE id >= (SELECT id FROM table LIMIT 1000000, 1) LIMIT 10;

是的,速度提升到0.x秒了,看样子还行了
可是,还不是完美的!

以下这句才是完美的!

SELECT * FROM table WHERE id BETWEEN 1000000 AND 1000010;

比上面那句,还要再快5至10倍

转载请注明作者及出处:http://www.21andy.com/

另外,如果需要查询 id 不是连续的一段,最佳的方法就是先找出 id ,然后用 in 查询

SELECT * FROM table WHERE id IN(10000, 100000, 1000000...);

再分享一点
查询字段一较长字符串的时候,表设计时要为该字段多加一个字段,如,存储网址的字段
查询的时候,不要直接查询字符串,效率低下,应该查诡该字串的crc32或md5

  2012, October 15, 8:06 AM

[0] 评论 (3785 views)


批量管理VPS的工具SolusVMController

SolusVMController 是 PHP 开发的免费 VPS 管理面板,它通过 SolusVM 的 API 来控制,可以把所有的 VPS 集中管理了,现在购买的 VPS 面板一般都是SolusVM,API 具体请进面板开启。

» 阅读全文

  2012, October 15, 8:03 AM

[0] 评论 (3766 views)


Linux从FTP上下载整个目录命令 LINUX打开WINDOWS文件共享方法

FTP上下载整个目录命令 LINUX打开WINDOWS文件共享方法< xmlnamespace prefix ="o" ns ="urn:schemas-microsoft-com:office:office" />

wget -m ftp://xxxx/dirname -- ftp-user=user --ftp-password=password

这样将会从ftp上匿名下载VM_XP这个文件到本地。

m 参数表示镜像指定的目录 等同于   -r -N -l inf --no-remove-listing

能实现此功能的另一个办法是

wget -rtxx ftp://172.16.12.111/ppp/*

r是断点绪传,t是失败后可重新联接的xx次。

例如从ftp上直接下载整个目录到本地,我使用的完整命令是

wget   -nH --cut-dirs=1 -m --ftp-user=szh --ftp-password=szhftp ftp://192.168.13.17/Server_CDROM

ftp下载时与目标路径相关的两个参数:

-nH

        --no-host-directories

            Disable generation of host-prefixed directories. By default, invoking Wget with -r

            http://fly.srk.fer.hr/ will create a structure of directories beginning with

            fly.srk.fer.hr/.  This option disables such behavior.

--cut-dirs=number

            Ignore number directory components.   This is useful for getting a fine-grained control

            over the directory where recursive retrieval will be saved.

LINUX下挂载WINDOWS共享目录,实现文件共享!

mount -t smbfs -o username=Administrator,password=Password //10.10.10.94/fileNet /opt/fileNet

  2012, June 15, 5:39 PM

[0] 评论 (4832 views)


linux上用iptables自动封ip的bash脚本

这个还是有一定效果的

先装iptables

下面的脚本保存为drop_ips.sh

  1. #! /bin/bash                                                                                                                                                   
  2.  
  3. ###########################################                                                                                                                    
  4. # 封锁ip 用iptables                                                                                                                                            
  5. # usage:                                                                                                                                                       
  6. #                                                                                                                                                              
  7. # create date 2010-11-11                                                                                                                                       
  8. # update date 2010-11-12                                                                                                                                       
  9. ###########################################                                                                                                                    
  10.  
  11.  
  12. # 定义端口                                                                                                                                                     
  13. CHK_PORT="80 25" 
  14.  
  15. # 定义输出文件                                                                                                                                                 
  16. IPTABLE_OUTPUT=/tmp/ip_drop_tables  
  17. # 定义输出文件备份  
  18. IPTABLE_OUTPUT_BAK=/tmp/ip_drop_tables.bak  
  19.  
  20. # 扫描ip的 间隔时间  
  21. SCAN_HTTP_IP_TIMEOUT=20  
  22.  
  23. # 处理ip的间隔时间  
  24. HANDLE_IP_TIMEOUT=120  
  25.  
  26. # 连接数量最大限制  
  27. MAX_CONNECT_IP_NUM=100  
  28.  
  29. # 排除在外的ip  
  30. ACCEPT_IP="203.95.110.2" 
  31.  
  32. # 已经封锁的ip   
  33. DROP_IP_RECORD_FILE=/tmp/drop_ip_record  
  34.  
  35. #################################################################  
  36. #定义方法  
  37. #################################################################  
  38. # 输出ip到文件  
  39. output_ip_table()  
  40. {  
  41.         # 拿到端口号  
  42.         port_num=$1  
  43.         # 查此端口上的连接ip 输出到指定的目录  
  44.         #echo "start scan ......"  
  45.         netstat -na --tcp| grep ESTABLISHED | awk '{ if ( index($4,":"'"$port_num"'"") ) print $5}' | awk -F ':' '{print $1}' | sort  >> $IPTABLE_OUTPUT  
  46.         #echo "scan end ......"  
  47. }  
  48.  
  49.  
  50. # 把需要观测端口列出                                                                                                                                                            
  51. check_port()  
  52. {  
  53.         for port_td in $CHK_PORT  
  54.         do 
  55.         # echo "port : "$port_td  
  56.             # 扫描此端口  
  57.         output_ip_table $port_td  
  58.     done  
  59. }  
  60.  
  61.  
  62. # 封杀ip  
  63. drop_ip_from_table()  
  64. {  
  65.     iptables -I INPUT -s "$1" -j DROP  
  66. }  
  67.  
  68. # 排除ip  
  69. accept_ip()  
  70. {  
  71.     for access_ip in $ACCEPT_IP  
  72.     do 
  73.         iptables -I INPUT -s "$access_ip" -j ACCEPT  
  74.     done  
  75. }  
  76.  
  77. # 提取需要的ip  
  78. get_iptable()  
  79. {  
  80.     # 如果已经存在就删除  
  81.     if [ -e $IPTABLE_OUTPUT_BAK ] ; then  
  82.         rm -rf $IPTABLE_OUTPUT_BAK  
  83.     fi  
  84.     # copy 一份出去   
  85.     cp $IPTABLE_OUTPUT $IPTABLE_OUTPUT_BAK  
  86.     # 排序 数组  
  87.     declare -a ip_array_org=($(cat ${IPTABLE_OUTPUT_BAK} | sort))  
  88.     # 循环  
  89.     # 比对用的ip 初始化  
  90.     tmp_ip=0.0.0.0  
  91.     let "tmp_ip_count=1" 
  92.     for tmp_element in "${ip_array_org[@]}" 
  93.     do            
  94.         # 初始化 没有特殊设置为排除ip  
  95.         is_not_set_accept="true" 
  96.         # 初始化 是否已封杀了  
  97.         is_not_drop="true" 
  98.         # 如果相等  
  99.         if [ "$tmp_ip" = "$tmp_element" ] ; then   
  100.             let "tmp_ip_count+=1" 
  101.         else              
  102.             # 打印  
  103.             echo "ip: $tmp_ip count: $tmp_ip_count"   
  104.             # 如果大于某个数字 就封杀  
  105.             if (( $tmp_ip_count >= $MAX_CONNECT_IP_NUM )) ; then  
  106.                 # 如果没有记录就封杀  
  107.                 if  cat /tmp/drop_ip_record | grep "$tmp_ip" > /dev/null   ; then  
  108.                     echo "this ip $tmp_ip has been mask !" 
  109.                     is_not_drop="false" 
  110.                 else      
  111.                     # 循环 需要排除ip  
  112.                         for tmp_access_ip in $ACCEPT_IP  
  113.                     do 
  114.                         # 如果排除ip里有 就去封锁此ip  
  115.                         if [ "$tmp_access_ip" = "$tmp_ip" ] ; then   
  116.                             echo "this ip $tmp_ip was mark to accept !" 
  117.                             is_not_set_accept="false" 
  118.                         fi  
  119.                     done   
  120.                 fi  
  121.                 if [ $is_not_set_accept = "true" ] && [ $is_not_drop = "true"] ; then  
  122.                     echo "add a new ip to drop : $tmp_ip" 
  123.                     drop_ip_from_table $tmp_ip  
  124.                     # 记录ip  
  125.                     echo "$tmp_ip" >> $DROP_IP_RECORD_FILE  
  126.                 fi  
  127.             fi  
  128.             # 归零  
  129.             let "tmp_ip_count=1" 
  130.             tmp_ip=$tmp_element  
  131.         fi  
  132.     done  
  133.     # 全部处理完了 删除原件  
  134.     rm -rf $IPTABLE_OUTPUT  
  135.     # 排除ip  
  136.     # accept_ip  
  137.       
  138. }  
  139.  
  140. # 扫描ip  
  141. scan_http_access_ip()  
  142. {  
  143.     # 获取当前时间作为开始时间  
  144.     start_time=`date +%s`  
  145.         # 循环开始    
  146.     while true 
  147.     do 
  148.         # 开始检查 扫描ip  
  149.         check_port  
  150.         # 线程停止  
  151.         sleep $SCAN_HTTP_IP_TIMEOUT  
  152.         # 获取当前时间  
  153.         cur_time=`date +%s`  
  154.         # 时间差  
  155.         let "time_out=$cur_time-$start_time" 
  156.         echo "time_out : "$time_out  
  157.         # 超过2分钟  
  158.         if (( $time_out >= $HANDLE_IP_TIMEOUT )) ; then  
  159.             # 整理一次ip表  
  160.             echo " times up"              
  161.             get_iptable           
  162.             # 重置开始时间  
  163.             start_time=`date +%s`  
  164.         fi  
  165.     done      
  166. }  
  167.  
  168. # 程序执行入口  
  169. main_app()  
  170. {  
  171.     # 定时扫描ip  
  172.     scan_http_access_ip  
  173. }  
  174.  
  175. main_app 

 

然后执行下面的脚本,让其自动在后台运行

 

  1. sh ~/scripts/drop_ips.sh &  

 

  2011, December 30, 6:39 PM

[0] 评论 (10960 views)


sed提取网页所有某一类型文件的下载链接

sed提取网页所有某一类型文件的下载链接

比如你需要提取index.html里面所有的.rar的下载链接
命令如下

SED:

sed 's/http:/\n&/g' index.html | sed 's/\.rar/&\n/g' | sed -n 's/^http:\(.*\)\.rar$/&/p'



PERL:
perl -ne 'while (/(http[\S]*\.rar)/g) {print "$1\n";}' index.html
其中的index.html换成*.*可以对当前文件夹下所有的文件操作

迅雷批量下载+这个脚本可以批量提取某些东西
  2011, December 19, 9:06 PM

[0] 评论 (4251 views)


froxlor一键安装lnmp控制面板发布

只在centos 5 32位测试过,如有问题,欢迎批出.froxlor是德国人开发的支持nginx,apache,lighttpd的web控制面板,界面简洁但不难看.手动配置较繁琐,所以弄了个脚本一键安装,脚本只支持centos.
官方网站http://www.froxlor.org/
演示站点:http://demo.froxlor.org/
如何安装 使用提示

1.面板分三个等级,customer无法直接添加域名,只有管理员和分销员才能添加

2.用户后台能添加mysql数据库,ftp用户,在线管理文件.



有问题可以到http://www.centos.bz/froxlor/留言

 

 

  2011, December 19, 9:02 PM

[0] 评论 (4369 views)


MAPN的反向教程

话说什么MAPN的反向教程,什么LNMP的反向教程 其实都是一个原理
只是这位兄弟发的教程指令更适用于red hat/centos
我就发个debian/ubuntu下的指令吧

已经安装MAPN的朋友依然可以使用,前端依然是前端,后端依然是后端

复制内容到剪贴板
代码:
apt-get -y install gcc g++ libncurses5-dev make libxml2-dev subversion libpcre3 libpcre3-dev libcurl4-openssl-dev
复制内容到剪贴板
代码:
wget http://nginx.org/download/nginx-1.0.10.tar.gz
svn checkout http://substitutions4nginx.googlecode.com/svn/trunk/ substitutions4nginx-read-only
tar zxvf nginx-1.0.10.tar.gz
cd nginx-1.0.10/
复制内容到剪贴板
代码:
./configure --user=www --group=www --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --with-http_sub_module --add-module=/root/substitutions4nginx-read-only --with-http_gzip_static_module --with-ipv6
复制内容到剪贴板
代码:
make && make install
完成后重启NGINX
复制内容到剪贴板
代码:
/etc/init.d/nginx restart
好了,apache继续做apache的事,NGINX做nginx的事

反向代理使用方法可以参照这哥们的内容http://www.hostloc.com/viewthread.php?tid=94331

  2011, December 12, 8:25 PM

[0] 评论 (4500 views)


lnmp不影响建站的基础上进行反代教程

首先,本人属于菜鸟级别,不懂技术,元老纯属活跃交流积累来的
教程不能算是原创,都是网上学习、拼凑,然后经过无数次的折腾积累经验完成的
切入正题,教程开始
1.首先安装lnmp
2.升级Nginx至1.0.8版(我是cd /root后升级的)

复制内容到剪贴板
代码:
cd /root      //我是返回root目录里再进行操作的,我是为了方便查看
wget http://soft.vpser.net/lnmp/upgrade_nginx.sh;sh upgrade_nginx.sh

 

3.安装预备软件

复制内容到剪贴板
代码:
yum -y --noplugins install wget zip
yum -y --noplugins install unzip
yum -y --noplugins install gcc
yum -y --noplugins install make
yum -y --noplugins install pcre-devel
yum -y --noplugins install openssl-devel
yum -y --noplugins install subversion

4.下载substitutions

复制内容到剪贴板
代码:
svn checkout http://substitutions4nginx.googlecode.com/svn/trunk/ substitutions4nginx-read-only

5.编译

复制内容到剪贴板
代码:
cd nginx-1.0.8
./configure
./configure --add-module=/root/substitutions4nginx-read-only
make
make install

6.编辑Nginx配置文件

复制内容到剪贴板
代码:
vim /usr/local/nginx/conf/nginx.conf

从第53行的server到倒数第二行全部删掉(最后一行的"}"要留下哦亲)
然后添加(在最后的"}"上面添加哦亲)

复制内容到剪贴板
代码:
server_name  www.xxx.com;
location / {
    subs_filter ca-pub-9805743306566114  ca-pub-98057433063434;        //把google ad 的用户号 ca-pub-9805743306566114 改成你自己的,比如 ca-pub-98057433063434 
    subs_filter 6121088089    612108343455;      //把google ad 的广告号 6121088089  改成你自己的,比如 612108343455(太邪恶了)
    subs_filter www.hostloc.com www.xxx.com;
    subs_filter '全球主机交流论坛' '全球MJJ交流论坛' gi;
    proxy_set_header referer http://www.hostloc.com;  //这一条解决验证码不显示的问题
    proxy_pass   http://www.hostloc.com;         
   index  index.html index.htm;
}
include vhost/*.conf;  //这个只需要在最后的"}"上面出现一次就可以了,添加其他规则的话无需重复添加这条

nginx.conf 要保存成 utf8格式才能替换中文字符
记住subs_filter 命令的格式,你想替换设么就随你了。
另外, 反向代理的个数是不限制的。只要你掌握了规则,一个网站下可以包含n多个网站的镜像。 一个nginx 上也可以跑 n多个网站。就看你自己怎么运用了。
别忘了吧logo地址替换成自己的


7.添加好后,先执行:

复制内容到剪贴板
代码:
/usr/local/nginx/sbin/nginx -t

检查配置是否正常,如果显示:
the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok      
configuration file /usr/local/nginx/conf/nginx.conf test is successful 
则正常,否则按错误提示修改配置。
再执行

复制内容到剪贴板
代码:
kill -HUP `cat /usr/local/nginx/logs/nginx.pid`
/usr/local/nginx/sbin/nginx

使配置生效


已经很细心的写了,不过也可能有出错的地方,欢迎纠正~
另外,感谢fw2you帮我解决了很多我不懂的难题

  2011, December 12, 8:20 PM

[0] 评论 (4515 views)
 
Records:4012345

浏览本博请不要用淫荡的眼神和思想,谢谢合作
Browse this blog, please do not use the lustful eyes and thought, thank you

  


搜索文章

高级搜索

实用链接

站长工具

规则转换

在线翻译 云输入法 IP归属在线查询 --在线偷窥-- 云网盘