July 30, 2015
用shell分析nginx日志里的访问最多的IP地址
"# $3的位置是IP地址,可按情况修改,如: # [30/Sep/2012:19:14:47 +0800] 110.75.176.58 www.example.com \u0026#34;GET / HTTP/1.1\u0026#34; 200 3629 \u0026#34;-\u0026#34; \u0026#34;Yahoo! Slurp China\u0026#34; cat nginx.log | awk \u0026#39;{print $3}\u0026#39; | sort | uniq -c | sort -nr | less #输出: # 120 189.17.37.109 # 96 12.15.61.22 # 95 12.20.29.33 # 。。。 。。。 "
July 24, 2015
安装apache+php(fastcgi)
"最近有下二次开发的程序,由于源程序使用了zend压缩,提示需要安装 Zend Guard Loader 扩展。而安装zend guard 7后,发现在phpinfo()里检测不到,后来才发现原来zend guard只能使用nfs非安全线程的php,没有办法,重新下载NFS版本的php版本。以下为安装要点:\n我用的是WampServer集成环境,于是就想到了把 Apache 换成 FastCGI 模式来跑 PHP5.3 nts 版,这样就可以使用Zend Guard Loader 扩展了。\n1、下载 PHP5.3.28 ,解压到 F:/php5.3.28nts ,配置好 php.ini,也顺便把 Zend Guard Loader 扩展配置好。\n2、下载 mod_fcgid-2.3.6-win32-x86.zip 或 http://www.apachelounge.com/download/ 解压 manual、modules 目录中的文件到 f:\\wamp\\bin\\apache\\apache2.2.22 对应目录里去。\n3、打开 Apache …"
July 18, 2015
mysql中kill掉所有锁表的进程
"很多时候由于异常或程序错误会导致个别进程占用大量系统资源,需要结束这些进程,通常可以使用以下命令Kill进程:\nmysql中kill掉所有锁表的进程\n3点钟刚睡下, 4点多, 同事打电话告诉我用户数据库挂掉了. 我起床看一下进程列表.\nmysql\u0026gt;show process list; 出来哗啦啦好几屏幕的, 没有一千也有几百条, 查询语句把表锁住了, 赶紧找出第一个Locked的thread_id, 在mysql的shell里面执行.\nmysql\u0026gt;kill thread_id; kill掉第一个锁表的进程, 依然没有改善. 既然不改善, 咱们就想办法将所有锁表的进程kill掉吧, 简单的脚本如下.\n#!/bin/bash mysql -u root -e \u0026#34;show processlist\u0026#34; | grep -i \u0026#34;Locked\u0026#34; \u0026gt;\u0026gt; locked_log.txt for line in `cat locked_log.txt | awk \u0026#39;{print $1}\u0026#39;` do echo \u0026#34;kill …"
July 18, 2015
检查mysql数据库是否存在坏表
"shell脚本检测和检查mysql数据库是否存在坏表\n此脚本的主要用途是检测mysql服务器上所有的数据库或者单独数据库中的坏表,适用于RHEL/Centos系列\n#!/bin/bash #此脚本的主要用途是检测mysql服务器上所有的db或者单独db中的坏表 #变量说明 pass mysql账户口令 name mysql账号名称 data_path mysql目录路径 directory_list 目录列表 file_list文件列表 db_name 数据库名称 repair_count单库中待修复的表总数 #变量说明 repair_count_all所有库中待修复的表总数 mysql_version mysql版本 _file_name 数据表名称 echo -e \u0026#34;此脚本的主要用途是检测mysql服务器上所有的数据库或者单独数据库中的坏表\\n\\n\u0026#34; pass=123456 name=root read -p \u0026#34;输入mysql存储路径: \u0026#34; choose data_path=$choose unset choose read -p \u0026#34;请输 …"
June 17, 2015
linux下安装php7+mysql5.7+nginx
"环境: CentOS7.1 X64 MySQL5.7.10 PHP7.0.4 Tengine/2.1.2 (nginx/1.6.2)\n参考: http://blog.haohtml.com/archives/15340\n一。安装常用扩展库\nsudo yum -y install gcc gcc-c++ autoconf libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel zlib zlib-devel glibc glibc-devel glib2 glib2-devel bzip2 bzip2-devel ncurses ncurses-devel curl curl-devel e2fsprogs e2fsprogs-devel libidn libidn-devel openssl openssl-devel openldap openldap-devel nss_ldap openldap-clients openldap-servers libevent …"
June 17, 2015
git commit 与 git commit -a 的区别
"软件版本: 操作系统:ubuntu10.04 内核版本:Linux version 2.6.32-36-generic git 版本:git version 1.7.0.4\n目录:\n文件状态 提交 2.1 git commit 与 git commit -a 2.2 添加提交信息 修改/取消 参考资料 1. 文件状态\n一般仓库中的文件可能存在于这三种状态:\n1)Untracked files → 文件未被跟踪; 2)Changes to be committed → 文件已暂存,这是下次提交的内容; 3) Changes bu not updated → 文件被修改,但并没有添加到暂存区。如果 commit 时没有带 -a 选项,这个状态下的文件不会被提交。\n$git status # On branch master # Changes to be committed: # (use \u0026#34;git reset HEAD \u0026lt;file\u0026gt;...\u0026#34; to unstage) # # new file: file2 # # Changed but not updated: …"
June 15, 2015
golang中chan实例
"package main import \u0026#34;fmt\u0026#34; func main() { data := make(chan int) // 数据交换队列 exit := make(chan bool) // 退出通知 go func() { for d := range data { // 从队列迭代接收数据,直到 close 。 fmt.Println(d) } fmt.Println(\u0026#34;recv over.\u0026#34;) exit \u0026lt;- true // 发出退出通知。 }() data \u0026lt;- 1 // 发送数据。 data \u0026lt;- 2 data \u0026lt;- 3 close(data) // 关闭队列。 fmt.Println(\u0026#34;send over.\u0026#34;) \u0026lt;-exit // 等待退出通知。 } 输出结果:\n1 2 3 send over. recv over. 而如果将上面与 exit chan有关的三行删除掉,则结果为:"
June 13, 2015
golang中chan的理解与使用教程
"对于 chan 介绍见: https://github.com/astaxie/build-web-application-with-golang/blob/master/zh/02.7.md\n这里我们主要通过实例来介绍对chan的理解及用法.\n无Buffer的Channels 实例1:\nfunc main() { ci := make(chan int) ci \u0026lt;- 4 value := \u0026lt;-ci fmt.Println(value) } 执行结果错误为:\nfatal error: all goroutines are asleep - deadlock! goroutine 1 [chan send]:\n从上面“fatal error: all goroutines are asleep - deadlock!” 这句我们可以看出是groutings 阻塞了,这里为写阻塞,从“goroutine 1 [chan send]”可以看出来。\n这一点文档里已经说明阻塞的原因了:\n默认情况下,channel接收和发送数据都是阻塞的,除非另一端已经准备好,这样就使 …"
June 13, 2015
Dev with Vagrant and Docker
"前言 为了在团队里搭建统一的本地开发环境,最近花了点时间用了下vagrant和docker,在此做个记录, 这也算一个DevOps的实践。\nVagrant介绍 Vagrant 是一款用来构建虚拟开发环境的工具,非常适合 php/python/ruby/java 这类语言开发 web 应用,“代码在我机子上运行没有问题”这种说辞将成为历史。\n我们可以通过 Vagrant 封装一个 Linux 的开发环境,分发给团队成员。成员可以在自己喜欢的桌面系统(Mac/Windows/Linux)上开发程序,代码却能统一在封装好的环境里运行,非常霸气。\n以上介绍直接抄自网络,我觉得介绍的很到位。\n「注意点:」\nvagrant up命令执行后,如果看到下面的错误信息,则需要安装另外一个工具:\n[default] The guest additions on this VM do not match the installed version of VirtualBox! In most cases this is fine, but in rare cases it can prevent …"
June 9, 2015
golang中flag包的用法
"golang中flag包主要用来CLI下,获取命令参数,示例如下mysql.go:\npackage main import ( \u0026#34;flag\u0026#34; \u0026#34;fmt\u0026#34; ) func main() { host := flag.String(\u0026#34;h\u0026#34;, \u0026#34;localhost\u0026#34;, \u0026#34;请指定一个主机\u0026#34;) user := flag.String(\u0026#34;u\u0026#34;, \u0026#34;root\u0026#34;, \u0026#34;请指定数据库用户\u0026#34;) port := flag.Int(\u0026#34;P\u0026#34;, 3306, \u0026#34;Port number to use for commection or 0 for default to, in port 3306\u0026#34;) //var name string //flag.StringVar(\u0026amp;name, \u0026#34;u\u0026#34;, \u0026#34;root\u0026#34;, \u0026#34;请指定用户名\u0026#34;) flag.Parse() //参数解析 fmt.Println(\u0026#34;主机地 …"