Linux 存档

shell 自动备份db及文件

添加配置文件的shell

#!/bin/bash
thisdir=$(cd "$(dirname "$0")"; pwd)
read -p "Input your database login name:" dbuser
echo $dbuser
read -p "Input your database password:" dbpwd
echo $dbpwd
read -p "Input your database name:" dbname
echo $dbname
read -p "Input your mail:" email
echo $email
read -p "Input your backup web directory(Like:/home/wwwroot/default):" fullpath
echo $fullpath

if [ $fullpath == "clear" ];	then
	fullpath="null"
fi
echo $dbuser	$dbpwd	$dbname	$email	$fullpath >> $thisdir/backup.conf

下面是备份的shell

#!/bin/bash
thisdir=$(cd "$(dirname "$0")"; pwd)
backupdir=$thisdir"/backup/"
if [ ! -x $backupdir ]; then
mkdir $backupdir
fi
#echo "---------------Progran is Runing------------------" >> $thisdir/log
#load data to start backup
while read dbuser dbpwd dbname mail fullpath
do
Now=$(date +"%Y-%m-%d-%H-%M-%S")
filename=$dbname-$Now.sql
savefile=$backupdir$filename
echo "---------------Backup Start------------------" >> $thisdir/log
echo $Now >> $thisdir/log
if [ $fullpath != "NULL" ]; then
echo "directory is:"$fullpath
#check directory exists
if [ ! -x $fullpath ]; then
echo "directory:"$fullpath" does not exist"
echo "backup exit;"

else
cd $fullpath
echo "Find directory:"$fullpath;
echo "Start Backup Database:"$dbname>>$thisdir/log
echo "Create backup file:"$filename>>$thisdir/log
#Start Backup database
mysqldump -u$dbuser -p$dbpwd $dbname>$filename
echo "Start Backup Web directory:"$fullpath
echo "Create Zip File"$dbname-$Now.zip
zip -r $dbname-$Now.zip ./*
echo "Start move backup file to backup directory"
mv $dbname-$Now.zip $backupdir
echo "Moving Success"
echo "delete "$dbname"backup file in "$fullpath
rm -f $dbname-$Now.sql
fi
else
#Start Backup database
echo "Unset web directory">>$thisdir/log
echo "Start Backup Database:"$dbname>>$thisdir/log
echo "Create backup file:"$filename>>$thisdir/log
mysqldump -u$dbuser -p$dbpwd $dbname>$savefile

echo "Backup Database:"$dbname" Success">>$thisdir/log
echo "Send mail to "$mail>>$thisdir/log
php $thisdir/mail/index.php $mail $savefile $filename >> $thisdir/log
fi
echo "----------------Backup End-------------------" >> $thisdir/log
done < $thisdir/backup.conf
#删除七天前的文件
oldtime=$(date +%Y-%m-%d -d "7 days ago")
rm -f $backupdir*$oldtime*.zip > $thisdir/log

PHP开启Opcache性能对比

前阵子在群里,看到大庆提到opcache加速器,当时也不明白是什么,于是抽空研究了一下。发现php官方手册真的非常非常非常有必要通读一遍!!!!
opcache是zend出的一个缓存工具,先将php脚本预编译,缓存到内存中,需要用的时候就不用再次编译了。在php5.5的版本以后,php都内置了opcache。正好vps装的是5.4的,于是闲来无事安装下测试看看。
安装非常简单,一句即可

pecl install ZendOpcache

安装完成后会在php.ini中看到多了opcache

php.ini中的opcache

php.ini中的opcache

图中因为我在测试对比开启opcache前后的性能情况,我是注释了opcache。
注意一定要把opcache.so的位置写正确
添加一些配置内容

 opcache.memory_consumption=128
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=4000
opcache.revalidate_freq=60
opcache.fast_shutdown=1
opcache.enable_cli=1

重启php后,我们在phpinfo中能看到多了opcache
前面介绍过xhprof的安装与使用,正好可以用xhprof测试下开启前后情况。仍然是以博客首页为测试对象。测试结果如下:

opcache开启前响应时间对比(单位:毫秒)
响应时间 开启前 开启后
659,185 407,844
516,839 325,101
585,206 450,047
483,782 445,568
518,558 425,767
851,166 359,448
495,277 349,735
561,613 471,427
600,126 644,085
平均值 585750.2222 431002.4444

 

明显开启后速度是有提高的。

Over~

Centos下http_load做压力测试

前阵子做了个小项目,很小很小的那种,但是这家公司确实很有钱很有钱的那种,赞助了某地方卫视黄金档综艺节目,于是乎,节目首播,客户担心服务器扛不住,于是乎有了我这种菜鸟试着玩一下压力测试。

安装很简单
可以到这里下载http_load http://www.acme.com/software/http_load/

mkdir http_load
cd http_load
wget http://www.acme.com/software/http_load/http_load-14aug2014.tar.gz
tar zxvf http_load-14aug2014.tar.gz
cd http_load-14aug2014
make
make install
vim urllist.txt#输入要做压力测试的url地址保存即可

这样就安装好了
下面要进行测试
也非常简单

-r 每秒访问多少次
-s 访问时长
-f 访问总次数

http_load -r 10 -s 10 urllist.txt 

下面看结果

每秒访问10次,共访问10秒,总计100次请求
[root@aoxiang http_load-14aug2014]# http_load -r 10 -s 10 urllist.txt
42 fetches, 58 max parallel, 1.94275e+06 bytes, in 10.0012 seconds
46256 mean bytes/connection
4.19951 fetches/sec, 194253 bytes/sec
msecs/connect: 1.88881 mean, 11.376 max, 1.164 min
msecs/first-response: 3268.35 mean, 5607.34 max, 534.501 min
HTTP response codes:
code 200 — 42

42 fetches, 58 max parallel, 1.94275e+06 bytes, in 10.0012 seconds
进行了42次请求,最大并发进程数58,总计传输 1.94275e+06 bytes,耗时10秒

46256 mean bytes/connection
每次请求平均传输数据量46256 bytes

4.19951 fetches/sec, 194253 bytes/sec
意味着系统最大每秒钟处理4.1次请求,每秒钟传输194253 bytes数据

msecs/connect: 1.88881 mean, 11.376 max, 1.164 min
平均响应时间1.8秒,最大响应时间 11.376msecs,最小响应时间1.164msecs

更详细的信息,可以参考百度百科《http_load》

安装Xhprof测试性能

额,经人提醒才发现原来SAE在4月份已经取消了每个月对开发者赠送的10000个云豆,导致我一直将博客挂在sae上一个月消耗1000个豆子,现在只剩下4000多。⊙﹏⊙于是昨晚赶紧把博客搬家到VPS上,以后再折腾起来就得先备份了。
前阵子玩了一下Xhprof来试着测试下陈旭的性能,今天来做个记录,顺便待会儿再写一篇关于《PHP开启Opcache性能对比》的。正好可以相互验证。
开始安装

mkdir xhprof;cd xhprof#新建一个目录,下载xhprof并进行安装
wget http://pecl.php.net/get/xhprof-0.9.2.tgz #下载
tar zxvf xhprof-0.9.2.tgz
cd xhprof-0.9.2

在web目录中新建一个目录,存放xhprof的一些类等各种文件
移动xhprof_html、xhprof_lib这两个文件夹到web目录的xhprof目录,
lib是用来被程序调用的library,html是用来显示测试结果的一些前端内容

mkdir /home/wwwroot/xhprof
mv xhprof_html xhprof_lib /home/wwwroot/xhprof

在php.ini中开启disable_functions、exec、system、poct_open这几个函数
进入extension这个目录来进行安装php扩展,
一定要进入这个目录,
一定要进入这个目录,
一定要进入这个目录
一定要在有相关扩展包的文件夹中运行phize,否则会报错,报错内容
php的安装位置不一样时,这里的代码也不一样,我的是安装在/usr/local/php中。

cd extension
/usr/local/php/bin/phpize

开始安装,要注意php的安装位置不一样时,得修改下面的命令

./configure --with-php-config=/usr/local/php/bin/php-config
make
make install

到这里,正常情况下,就安装完了!!!
但是,我的一直在报错,我用make test命令测试make,一直报错。
比如,未开启proc_open()、system()等等函数,这些都好解决,
但是有一条call_user_func()这个一直过不去,make test会在最后有错误的情况下,提示你直接给php.net发邮件,于是我发了几条。

后来没自己编译了。直接用pecl安装,pecl安装其实最简单了。

pecl install xhprof-0.9.2
#成功后会有下面提示
#Build process completed successfully
#Installing ''

一条命令搞定,值得注意的是,
pecl命令会在php.ini中自动加上
extension=xhprof.so
但是我们安装后下载的xhprof.so不一定在存放扩展的目录,比如我的就存放在

/usr/local/php/lib/php/extensions/no-debug-non-zts-20100525/
所以我们需要移动xhprof至存放扩展的目录,或者修改php.ini
vim php.ini
extension=/usr/local/php/lib/php/extensions/no-debug-non-zts-20100525/xhprof.so

xhprof提供图形查看运行情况,
我们可能要再安装一下一个绘图工具

yum install -y graphviz

开始测试
前面已经说过,要吧xhprof_html、xhprof_lib放到web目录中,
下面在php中加入测试代码
我的博客用的是wordpress
我就直接在入口文件index.php开头结尾加入测代码就行了

xhprof_enable(XHPROF_FLAGS_CPU + XHPROF_FLAGS_MEMORY);
define('WP_USE_THEMES', true);

/** Loads the WordPress Environment and Template */
require( dirname( __FILE__ ) . '/wp-blog-header.php' );

$xhprof_data = xhprof_disable();

$XHPROF_ROOT = "./xhprof";
include_once $XHPROF_ROOT . "/xhprof_lib/utils/xhprof_lib.php";
include_once $XHPROF_ROOT . "/xhprof_lib/utils/xhprof_runs.php";

$xhprof_runs = new XHProfRuns_Default();
$run_id = $xhprof_runs->save_run($xhprof_data, "xhprof_testing");
echo "<a href='http://aoxiang.me/xhprof/xhprof_html/index.php?run={$run_id}&source=xhprof_testing'>View Xhprof</a>";

打开首页,会有个链接,用来查看测试结果
有兴趣的可以直接看我现在的测试结果
http://aoxiang.me/xhprof/xhprof_html/index.php?run=561c6fa385c83&source=xhprof_testing

Over~

Shell脚本自动备份数据库

给胖子写了个小程序,用来给他们公司记录一些数据。他直接把程序丢在我VPS上,我又比较喜欢折腾VPS,也担心那天数据出问题。所以想写个脚本来自动备份数据库。

So,shell脚本的一些简单用法。

 

其实主要的还是要用mysqldump、Crontab来操作

 一、写备份脚本

mkdir /luffy/backup
cd /luffy/backup
vim backup.sh#建立备份脚本
#下面开始编辑备份脚本
#!/bin/bash
cd /luffy/backup#进入存放备份文件的目录
Now=$(date +"%Y-%d-%m-%H-%M-%S")#这一句是用来显示当前时间
File=databasebackup_$Now.sql#以时间命名数据备份文件
mysqldump -uroot -p'password' database_name>$File#执行备份
echo "database backup Success"
#保存退出
chmod +x /backup/backup.sh#赋予可执行权限

这时候脚本就写好了。
可以执行./backup.sh测试一下是否会生成备份文件

 

 

二、添加定时任务

其实定时任务就一句代码

00 23 * * * /luffy/bakup/backup.sh >/luffy/backup/backup.log
#每天晚上23:00执行backup.sh,并将结果输入到backup.log文件中,over

就这么简单,结束了。

不过备份是可以了。下一步是要想办法,自动以邮件的方式发送备份文件到邮箱。这样才能长久保存。

Zend Guard 代码加密详细步骤图解

最近想研究下Zend Guard给代码加密,以便以后做项目做好保密性,也方便以后客户抓在自己手上做维护。

这里分两步做

1、生成加密文件

2、配置服务器环境解密运行加密后的文件

一、生成加密文件
先抛出来Zend Guard相关安装包吧。

百度云下载Zend Guard.5.5

这里的注意以下2点:

  1. Zend Guard是需要收费的,下载的文件包里面有key,但是Key的有效期是10年7月10号。安装完成register的时候需要将系统时间调整到10年以前,[Help]->[Register]->[Search for a license file on my disk]
  2. key是试用版的,所以加密后的文件只能使用14天。你在生成加密文件以前可以将系统时间向后调整N年,比如2099年。这样就会在2099年以后14天过期。

PS:文件包中有个.zl,是激活用的。但是我们其实可以自己生成一个zl。可以选择不用它的。

下面上图按步骤走吧:

  1. 新建一个项目【File】-【New】-【Zend Guard Project】。这里主要填写下项目名称,以及最后一个加密后代码输出位置:OutputLocation:

    新建Zend Guard Project

    新建Zend Guard Project

  2. 选择代码所在文件夹

    选择代码所在文件夹

    选择代码所在文件夹

(更多…)

svn添加钩子hooks并解决hooks速度慢。

前几天安装好了SVN,然后想要提交之后直接放到web目录中,可以直接通过web访问页面效果。于是知道了有钩子这么个东西。
假设已经有了svn project,我们需要做一下操作:

  • 在web目录里面checkout对应的代码文件
  • 创建钩子模板并赋予执行权限
  • 敲入钩子文件的内容
  1. checkout代码的文件
    在web目录下创建网站对应的文件夹,我这里直接给文件夹命名为svn,并且checkout

    mkdir /home/wwwroot/svn 
    cd /home/wwwroot/svn
    svn checkout svn://127.0.0.1 ./
    

    完成以后目录下会多了.svn的隐藏文件夹

  2. 创建钩子
    在创建好svn project之后会有如下目录结构。我们的钩子就存放在hooks里面。

    svn目录

    我们需要做下面步骤:

    代码如下:

    cd hooks
    cp post-commit.tmpl post-commit #拷贝一个钩子模板
    chmod 777 post-commit #赋予可执行权限
    vim post-commit
    
  3. 编辑钩子文件
    找到/svn/svntest/hooks/post-commit,
    进入到post-commit编辑状态后,我们最好把里面的内容都给注释。然后敲入以下代码:

    #!/bin/sh
    SVN=/usr/bin/svn #svn执行文件所在的文件夹
    WEB=/home/wwwroot/svn #svn项目所在目录
    LOG_PATH=/svn/svntest/svn_hook.log #我们定义的一个log文件
    echo "------------Start Commit -----------" >> $LOG_PATH
    echo "Time:"`date '+%Y-%m-%d %T'`>>$LOG_PATH #这里是在日志中写入执行的时间
    cd $WEB
    for dir in 'svnlook dirs-changed /svn/svntest'  #查找有修改过的文件,并将修改过的内容部署到web目录
    do
            #下面一句执行update命令
            $SVN  update $WEB --username "aoxiang" --password "aoxiang" >> $LOG_PATH 
    done
    echo "------------Commit End---------------" >>$LOG_PATH
    

    这里解释一下代码:
    我在部署完钩子之后,发现有一个问题:

    在本地commit 到服务器以后,速度都很快显示100%,但是进度条会一直卡在最后不动很长时间。

    我的项目大概400MB,当时就怀疑是钩子的原因,导致commit速度下降。
    最后找到方法:

    先找到有修改的目录,然后将修改的内容部署到web目录,这样就不会把整个项目部署到web目录

    for dir in 'svnlook dirs-changed /svn/svntest' 
    do
        #这里是要执行的代码
    done
    

    svnlook dirs-changed命令用来找打修改过内容的目录

    下面一句就相当于是在我们对应的svn的目录里面执行了update命令

    $SVN update -N $WEB --username "aoxiang" --password "aoxiang" &gt;&gt; $LOG_PATH

以上基本上就ok了。今天主要被上传速度困扰了一天。后来找到方法先检查修改的文件后,顿时就搞定了

Centos 安装SVN服务器

之前一直想搭Git服务器,搭了好久没有搭好。后来还是选择搭SVN了。代码丢上来

  1. 检查已安装版本 
    #检查是否安装了低版本的SVN
    rpm -qa subversion
    #卸载旧版本SVN
    [root@localhost modules]# yum remove subversion
    
  2. 安装SVN
    yum install httpd httpd-devel subversion mod_dav_svn mod_auth_mysql
  3. 确认已安装了SVN模块
    cd /etc/httpd/modules
    ls | grep svn
    #会返回以下内容
    #mod_authz_svn.so
    #mod_dav_svn.so
    
  4. 验证安装
    检验已经安装的SVN版本信息

    svnserve --version

    返回以下内容:

  5. 创建代码库
    SVN软件安装完成后还需要建立SVN库

    mkdir -p /svn/web
    svnadmin create /svn/web
    

    执行上面的命令后,自动建立web库,查看/svn/web 文件夹发现包含了conf, db,format,hooks, locks, README.txt等文件,说明一个SVN库已经建立。

  6. 配置代码库-设置SVN用户名及密码
    进入上面生成的文件夹conf下,进行配置

    cd /svn/svn/conf
    #用户密码passwd配置 
    
    规则如下username=password
  7. 权限控制-authz
    这里是设置用户访问权限、访问目录。

    vi authz
    #设置[/]代表根目录下所有的资源
    #rw是读写权限
    [/]
    aoxiang=rw
    
  8. 服务svnserve.conf配置
    vi svnserve.conf
    #追加以下内容
    [general]
    #匿名访问的权限,可以是read,write,none,默认为read
    anon-access=none
    #使授权用户有写权限
    auth-access=write
    #密码数据库的路径
    password-db=passwd
    #访问控制文件
    authz-db=authz
    #认证命名空间,subversion会在认证提示里显示,并且作为凭证缓存的关键字
    realm=/svn/web
    
  9. 配置防火墙端口
    vi /etc/sysconfig/iptables
    #添加以下内容:
    -A INPUT -m state --state NEW -m tcp -p tcp --dport 3690 -j ACCEPT
    #保存后重启防火墙 
    service iptables restart
    
  10. 启动SVN
    svnserve -d -r /svn/web
  11. 查看SVN进程
    ps -ef|grep svn|grep -v grep
    #返回一下信息:
    #root     12538     1  0 14:40 ?        00:00:00 svnserve -d -r /opt/svn/repositories
    
  12. 检测SVN 端口
    netstat -ln |grep 3690
    #返回一下信息:
    #tcp        0      0 0.0.0.0:3690                0.0.0.0:*                   LISTEN
    
  13. 停止重启SVN
    killall svnserve    //停止 
    svnserve -d -r /svn/web  // 启动 
    

centos安装memcache

这两天搞定了nginx+php+mysql+svn,最后一个就是memcache了。准备这几项都搞定了以后,着手开始重写博客。

因为,妈蛋看了半年前自己用CI写的博客的代码,都在想“我次奥,我当时怎么会写出这么垃圾的代码!!!”

memcache分为服务器端和PHP扩展,所以我们是需要分两块进行安装的。

  1. 下载相关组件。
    这里是下载服务器端用的组件,memcached和libevent,libevent是用于做Socket处理,其他的我也不清楚具体怎么。
    memcached:http://www.danga.com/memcached/dist/memcached-1.2.2.tar.gz
    libevent:http://www.monkey.org/~provos/libevent-1.3.tar.gz
    附上libevent官网:http://www.monkey.org/~provos/libevent/

    这里有我在百度盘留存的一份可供下载“libevent+memcached下载

    mkdir /opt/memcached
    cd /opt/memcached/
    wget http://www.danga.com/memcached/dist/memcached-1.2.2.tar.gz
    
    mkdir /opt/libevent
    cd /opt/libevent
    wget http://www.monkey.org/~provos/libevent-1.3.tar.gz
    
  2. 安装libevent
    tar zxvf libevent-1.3.tar.gz
    cd libevent-1.3
    ./configure –prefix=/usr
    make
    make install
    
  3. 测试libevent安装是否成功
    ls -al /usr/lib | grep libevent

    反馈如下

    libevent安装测试

  4. 安装服务器端memcached
    cd /opt/memcached
    tar zxvf memcached-1.2.2.tar.gz
    cd memcached-1.2.2
    ./configure –with-libevent=/usr
    make
    make install
    
    

    如果中间出现报错,请仔细检查错误信息,按照错误信息来配置或者增加相应的库或者路径。
    反正我是一路正常的走下来,没有发现有报错的情况
    安装完成后会把memcached放到 /usr/local/bin/memcached

  5. 测试是否安装成功
    ls -al /usr/local/bin/mem*
    

    反馈如下

    memcached安装反馈

(更多…)

Centos编译安装Nginx+php+Mysql

配过很多次服务器,一直都是在用lnmp的一键包。最近因为一直在玩Linux,所以试着自己编译安装Nginx、php、mysql、memcache。今天按照网上的找到的一篇教程,试着安装了一遍nginx+php+mysql。
下面把命令丢上来存档用。

  1. 配置防火墙,开启80端口、3306端口
    vi /etc/sysconfig/iptables 

    将下面两句丢在22端口下面

    -A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
    -A INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT
    
  2. 关闭SELINUX
    vi /etc/selinux/config
    #SELINUX=enforcing #注释掉
    #SELINUXTYPE=targeted #注释掉
    SELINUX=disabled #增加
    

    并重启系统

    reboot -n
  3. 系统约定这里我们自行约定软件包、编译安装位置如下。(后续命令会按照约定的目录来键入)

    1、软件源代码存放位置:/usr/local/src
    2、源码包编译安装位置:/usr/local/src/软件名字

  4. 下载软件下载nginx(目前稳定版)http://nginx.org/download/nginx-1.5.13.tar.gz下载pcre(支持nginx伪静态)http://sourceforge.net/projects/pcre/files/pcre/8.35/pcre-8.35.tar.gz下载MySQL http://mirrors.sohu.com/mysql/MySQL-5.5/mysql-5.5.37.tar.gz

    下载php http://ar2.php.net/get/php-5.5.10.tar.gz/from/this/mirror

    下载cmake(MySQL编译工具) http://www.cmake.org/files/v2.8/cmake-2.8.8.tar.gz

    下载libmcrypt(PHPlibmcrypt模块)
    http://nchc.dl.sourceforge.net/project/mcrypt/Libmcrypt/2.5.8/libmcrypt-2.5.8.tar.gz

    在天朝有时候可能访问不了sf等其他站点。这里我把我的软件包上传在百度云,可供大家下载。http://pan.baidu.com/s/1pJHUITH

    下载好以后,按照前文约定的目录树如下:

    nginx+mysql+php+cmake+pcre+libmcrypt目录树

    nginx+mysql+php+cmake+pcre+libmcrypt目录树


    (更多…)