生产环境下数据库服务器备份策略参考

定期自动备份,备份文件很频繁,需要定期(1-2个月为宜)清理一些过于频繁的,然后做归档

暂定清理2个月前的备份,清理后,将保留的移到归档目录里,长期保留
暂定每个月保留两份,1日及16日左右
两个月内的备份,全部保留,以备不时之需

长期保留的归档,可以视情况再做精简清理。
定期选择部分下载异地备份

php版本(5.3,5.5,7.0)及运行模式(fast-cgi/fpm,apache模块)之间性能对比测试

php 7.0发布在即,一直以来有传言说php7性能有飞跃,于是做了一个测试。

测试环境

硬件  虚拟机2G内存
OS  CentOS 6.7 (kernel 2.6.32-573.7.1.el6.x86_64)
Web  Apache/2.2.15 (centos 6自带)

php版本选择

5.3.3, CentOS 6自带的版本
5.3.29, 官方5.3分支的最后一个版本,用于跟apache模块做对比
5.6.15,
7.0.0beta3

除了第一个CentOS自带5.3.3是apache模块之外,全部跑在fast-cgi (php-fpm) 模式下,通过apache模块mod_proxy_fcgi整合在apache中(整合方式)。每个版本配置一个虚拟站点,域名分别为 a.dom, b.com... 。

php编译参数

三个自编译版本的编译参数如下(在 /usr/loca 目录下,分别安装到子目录里)

'./configure' '--enable-fpm' '--prefix=/usr/local/php53' '--with-config-file-path=/usr/local/php53/etc' '--with-config-file-scan-dir=/usr/local/php53/etc/php.d' '--enable-exif' '--with-gd' '--with-mysql' '--with-mysqli' '--with-pdo-mysql'

'./configure' '--enable-fpm' '--prefix=/usr/local/php56' '--with-config-file-path=/usr/local/php56/etc' '--with-config-file-scan-dir=/usr/local/php56/etc/php.d' '--enable-exif' '--with-gd' '--with-mysql' '--with-mysqli' '--with-pdo-mysql'

'./configure' '--enable-fpm' '--prefix=/usr/local/php7' '--with-config-file-path=/usr/local/php7/etc' '--with-config-file-scan-dir=/usr/local/php7/etc/php.d' '--enable-exif' '--with-gd' '--with-mysql' '--with-mysqli' '--with-pdo-mysql'

[注] centos自带5.3.3配置参数略,有点长,而且很多模块动态编译成动态加载模块,编译参数里是with-out,所以参数价值不大,故从略。
php7已经移除mysql模块,所以其配置参数里的 --with-mysql 事实上没用,在实际编译中被忽略掉的。

php-fpm配置

php-fpm全部配置成最大20进程,apache也配置成最大20个进程

测试说明

在本机上使用ab测试,减少网络传输的影响,500次连接,并发10,记录 Requests per second(req/s, 以下不再指明),示例

ab -c 10 -n 500 -H "Host: c.dom" http://127.0.0.1/phpinfo.php

[注] 因为使用虚假的域名,所以通过 -H参数指定主机名Host(改host文件也是一样的效果)

测试过程1:phpinfo页面

静态html基准测试,将phpinfo页面的输出保存成html文件,每秒稳定在3000次以上(300并发以下基本上能稳定在3000次,开ab的-k参数的情况下)

(phpinfo页面测试意义其实不大)

版本           次数1       次数2        次数3
---------     --------   --------    ----------
5.3模块:       810         837         774
5.6:          517         635         663
7.0b3:        675         700         638

这里看出php7的性能并不突出,反而apache模块运行效率更高

测试过程2:新安装wordpress文章页

新安装wordpress,其自带的一篇文章页http://127.0.0.1/wordpress/?p=1

版本          次数1        次数2        次数3       次数4
---------    --------    --------    ---------  --------
5.3模块:      7.00        7.06        6.84       6.91
5.6:         7.54        7.55        7.48       4.55
7.0b3:       10.12       10.38       10.14      10.47

[小结]:5.6 较5.3略有增强,但差别很小;但php7较都有显示提高。

测试过程3:wordpress导入一批文章后的文章页

导入一批文章后,该测试里增加php5.3.29的fast-cgi版本

ab -c 10 -n 500 -H "Host: c.dom" http://127.0.0.1/wordpress/?p=6459
版本         次数1      次数2       次数3      次数4      次数5    平均值
---------   ------    -------    --------   -------   -----   -----
5.3模块:     5.76      5.60       5.66       5.64      5.82    5.696
5.3 fpm:    5.86      5.97       5.91       6.11      5.97    5.964
5.6:        6.57      6.62       6.65       7.35      5.49    6.536
7.0b3:      8.73      8.33       9.02       9.00      8.67    8.750

[小结]:延续前面的结果,php7比5.x有30%-50%提升,效果明显。

另外5.3的fastCGI及模块差别可以忽略,似乎不像有人说的fastCGI效率有多高。

php7性能提升幅度,似乎也不像鸟哥Laruence所说的翻倍以上的提升(第45页片子)但30%+的提升,也足够让人欣喜了

测试结论

就前面做的测试来看,php7确实比5.x版本有明显提升,值得在生产环境中部署(暂不考虑兼容性)。然而说前面测试结果来看,

附记*php的后向兼容性

按官方文档所示,php7在语言核心方面,变化几乎忽略。主要是彻底放弃php5.4以来已经声明“过时”的特性。

已知可能有较大影响的是 mysql_* 函数被移除,这就意味着使用mysql_*的一些旧应用将无法在php7上跑!一个可选的解决方案是,使用fastCGI,多php版本共存,迁就这些旧应用。

apache下php版本共存,可以参考CentOS 6.x/apache 2.2下php多版本共存探索(模块及fastcgi)/mod_proxy_fcgi实现

CentOS 6.x/apache 2.2下php多版本共存探索(模块及fastCGI)/mod_fcgi,mod_proxy_fcgi实现

在apache下整合fastCGI模式运行的php-fpm,似乎网上很少相关材料,就连英文版材料也少。只要是php-fpm,基本上都是与nginx搭配。查了一大批相关资料,写本文总结一下。

apache下有多个fastCGI的支持方案:至少有mod_fcgimod_fastcgigit)、mod_proxy_fcgi等。这两个模块都有点老,尤其mod_fastcgi自从2007年以来就没有更新,略掉不谈,事实上没用过用。mod_proxy_fcgi模块是httpd 2.4+的版本正式引入,通过简洁的一行 ProxyPassMatch 指令即可。

mod_fcgi

mod_fcgi模块本身是做fastCGI进程管理的,使用它就不需要使用php-fpm管理进程了。核心配置参数

LoadModule fcgid_module modules/mod_fcgid.so
<VirtualHost *:80>
    DocumentRoot "/var/www/html/site_1"
    ServerName "www.yourhost.com"
    DirectoryIndex index.html index.php
    #php.ini的存放目录,Linux下通常不需要
    #FcgidInitialEnv PHPRC "D:/php"
    # 设置PHP_FCGI_MAX_REQUESTS大于或等于FcgidMaxRequestsPerProcess,防止php-cgi进程在处理完所有请求前退出
    FcgidInitialEnv PHP_FCGI_MAX_REQUESTS 1000
    #php-cgi每个进程的最大请求数
    FcgidMaxRequestsPerProcess 1000
    #php-cgi最大的进程数
    FcgidMaxProcesses 3
    #最大执行时间
    FcgidIOTimeout 600
    FcgidIdleTimeout 600
    #php-cgi的路径
    FcgidWrapper /usr/local/php7/bin/php-cgi .php
    AddHandler fcgid-script .php
    FcgidInitialEnv PHP_FCGI_MAX_REQUESTS 1000
    <Directory "/var/www/html/site_1">
        Options +ExecCGI
    </Directory>
</VirtualHost>

其中粗体着色是必须参数,其它几个Fcgid*指令,是优化之用,这里仅示例,要按实际情况调整数值。具体参看mod_fcgi官方文档

使用mod_fcgid的几个特点

  1. php-fgi进程是由apache模块启动并管理,不需要配置php-fpm
  2. 在php-cig进程以apache用户身份运行,php程序写的文件,其权限为apache用户(而不像php-fpm下写文件为php-fpm用户所有,默认是nobody),这样在目录权限管理方面一致性高些。

mod_fastcgi

虽然CentOS 6.x下是apache 2.2,但所幸已经有人成功移植: https://github.com/ceph/mod-proxy-fcgi 我们可以直接使用;更幸运的是它已经进入epel源,直接yum安装即可;不想匹配epel源的,直接下载rpm包安装也可以(示例 http://mirrors.ustc.edu.cn/epel/6/x86_64/

当然可以重新编译安装apache 2.4, 这样直接有mod_proxy_fcgi可以使用,但这里还是保持原版本不变,省掉编译的工作量。

参考mod_proxy_fcgi官方文档,整合php-fpm的配置指令

ProxyPassMatch "^/myapp/.*\.php(/.*)?$" "fcgi://localhost:9000/var/www/"

语法很简单,跟配置反向代理类似,可以按实际需要做修改。事实上与mod_proxy模块语法一致的,不同处是将http协议改成fcig协议。

以上是apache整合php-fpm模式运行的fastCGI,接下来要对yum安装的php做下配置修改。

yum安装的php配置文件 /etc/httpd/conf.d/php.conf ,其中有如下一行

AddHandler php5-script .php

我们要对不同的站点启用不同的php,上面一行是对全局的.php文件分配给php模块处理,我们把这一行注释掉。而是在每个站点启用不同的php运行模式。

以上即是处理方式。

[已知问题]:裸目录地址转发

有一个困扰的问题没有解决,感觉有点像模块bug:

对于配置了DirectoryIndex index.php的目录,如果其子目录没有index.php,上述ProxyPassMatch还是会做fastCGI转发,这时会看到php-fpm的404响应,而不是apache的响应403页面。但前面的规则并不转发这裸空目录的url,所以感觉像bug

再者就是,对于ProxyPassMatch匹配的目录,apache自动索引功能失效。(当然如果不开启autoindex就无所谓了。生产环境下通常不开启的)

其它,似乎也没有什么严重后果,或者我没还意识到(?)。

解决方法:每个目录下,都放置一个index.html,避免fpm-php处理空请求

 

新版本firefox(如ESR 38+/45+)下live http headers扩展重发请求功能异常修正版

[20160803更新] 安装扩展 Live HTTP Headers (clone) 即可. https://addons.mozilla.org/zh-Cn/firefox/addon/live-http-headers-clone/

感谢该clone版作者的贡献,同时也感谢原版作者的贡献!

------------------------ 下面的文章内容已经过时,仅供参考-----------------

live http headers扩展是一个神器,彪悍简洁好用。然而似乎用户并不那么多,导致维人员看上去并不那么上心,出过几次无法正常使用的bug。本文是本人探索积累下来的经验。

firefox 38左右某版本下解决方案

[20151105]

firefox下的live http headers扩展的功能就不说了,因为firefox版本升级,在某个版本(可能是32左右)的某些改变,该扩展的重发请求功能坏掉了,查看该扩展的官方也有相应的bug报告

从这一页面里https://www.mozdev.org/bugs/show_bug.cgi?id=25831,有国外高手回复说的修正版,修正版在 http://rghost.net/58012556 可以直接下载,然后在通过firefox菜单-文件-打开,浏览到该xpi包安装

为防失效,转来一份 livehttpheaders,是zip压缩过的(wordpress限制文件格式),下载后解压缩后再按上法安装

firefox 45左右某版本下解决方案

[20160708]

firefox 某个版本强制要求扩展的签名机制,至少ESR 45起上面xpi文件已经不能安装了,提示说“似乎已损坏”。

经过探索,发现可以将上述xpi文件解压后的chrome/livehttpheaders.jar文件的替换firefox用户目录里相应的文件即可。不过,firefox重启后,签名验证会再次禁止扩展;换回去再改一次好了。虽然很麻烦,但勉强能用。

  • livehttpheaders.jar 文件可以直接从这里下载livehttpheaders__unpacked-file-livehttpheaders-jar,是zip压缩过的(wordpress限制文件格式),使用前先解压。
  • 我的firefox用户目录里相应位置在,具体请自行寻找一下  C:\Users\Administrator\AppData\Roaming\Mozilla\Firefox\Profiles\d1cain74.default\extensions\{8f8fe09b-0bd3-4470-bc1b-8cad42b8203a}\chrome

由此判断,firefox扩展的签名验证机制,只是在扩展安装及firefox启动时验证,firefox运行中是不检查的。

live http headers重发请求功能的示例

live_http_headers_replylive_http_headers_reply

使用stat命令在shell中读取文件状态(修改时间,大小,权限模式,磁盘占用)

通常我们通过ls 命令显示文件信息,查看目录信息时,再加上参数 -d 。这没有错,看总觉得不方便,尤其是不能显示文件修改时间,访问时间什么的,时间一列显示有时并不方便阅读。这种情况下,你需要的是stat命令,尤其适合查阅单个文件信息。

尤其是,在编写shell脚本时,stat绝对比从ls里面截取方便得多,而且更高的自由度!

stat命令简单示例

列表出文件的一系列摘要信息:

[root@localhost ~]# stat install.log
  File: "install.log"
  Size: 7730            Blocks: 16         IO Block: 4096   普通文件
Device: fd00h/64768d    Inode: 1048578     Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2015-10-20 10:21:05.473712000 +0800
Modify: 2015-10-20 10:23:50.061712001 +0800
Change: 2015-10-20 10:23:56.028712002 +0800
[root@localhost ~]#

很自然,它不包含任何文件内容,事实上该命令读不出文件内容,它也不会去读。

查看指定目录的stat

[root@localhost ~]# stat .
  File: "."
  Size: 4096            Blocks: 8          IO Block: 4096   目录
Device: fd00h/64768d    Inode: 1048577     Links: 5
Access: (0550/dr-xr-x---)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2015-10-27 13:35:30.473108443 +0800
Modify: 2015-10-21 18:54:30.420109149 +0800
Change: 2015-10-21 18:54:30.420109149 +0800
[root@localhost ~]#

玩点高级一点的

上次访问时间:

[root@localhost ~]# stat -c %x install.log
2015-10-20 10:21:05.473712000 +0800

文件大小

[root@localhost ~]# stat -c %s install.log
7730

同时并格式化输出多个参数

$ stat --printf="%n %X %s" plan.jpg
plan.jpg 1445912536 197196

更多使用方法,参考联机帮助或手册

联机帮助:

[root@localhost ~]# stat --help
用法:stat [选项]... 文件...
Display file or file system status.

-L, --dereference     follow links
-Z, --context         print the SELinux security context
-f, --file-system     display file system status instead of file status
-c --format=格式      使用指定输出格式代替默认值,每用一次指定格式换一新行
--printf=格式     类似 --format,但是会解释反斜杠转义符,不使用换行作
输出结尾。如果您仍希望使用换行,可以在格式中
加入"\n"
-t, --terse           使用简洁格式输出
--help            显示此帮助信息并退出
--version         显示版本信息并退出

有效的文件格式序列(不使用 --file-system):

%a    八进制权限
%A   用可读性较好的方式输出权限
%b   计算已分配块数(参见%B)
%B   以字节为单位输出%b 所报告的每个块的大小
%C   SELinux 安全环境字符串
%d    十进制设备编号
%D    十六进制设备编号
%f    十六进制原始模式
%F    文件类型
%g    文件的属组ID
%G    文件的属组组名
%h    硬链接数量
%i    Inode 编号
%n    文件名
%N    如果对象是一个符号链接,显示引用到的其它文件名
%o    I/O 块大小
%s    总计大小,以字节为单位
%t    十六进制主设备类型
%T    十六进制子设备类型
%u    文件的属主ID
%U    文件的属主用户名
%x    上次访问时间
%X    从UNIX 元年起计的上次访问时间
%y    上次修改时间
%Y    从UNIX 元年起计的上次修改时间
%z    上次更改时间
%Z    从UNIX 元年起计的上次更改时间

有效的文件系统格式序列:

%a    非超级用户可用的剩余块数
%b    文件系统的总数据块数
%c    文件系统中文件节点总数
%d    文件系统中空闲文件节点数
%f    文件系统中空闲块数
%C    SELinux 安全环境字符串
%i    十六进制文件系统ID
%I    允许的文件名最大长度
%n    文件名
%s    块大小(用于快速传输)
%S    基本块大小(用于块计数)
%t    十六进制类型描述
%T    可读性较好的类型描述

注意:您的shell 内含自己的stat 程序版本,它会覆盖这里所提及的相应
版本。请查阅您的shell 文档获知它所支持的选项。

请向bug-coreutils@gnu.org 报告stat 的错误
GNU coreutils 项目主页:<http://www.gnu.org/software/coreutils/>
GNU 软件一般性帮助:<http://www.gnu.org/gethelp/>
请向<http://translationproject.org/team/zh_CN.html> 报告stat 的翻译错误
要获取完整文档,请运行:info coreutils 'stat invocation'

电脑硬件配件比较等材料收集(cup,显卡等)

http://itianti.sinaapp.com/index.php/cpu

几个基准参考(个人用)

Intel Core i7-4790K @ 4.00GHz         11238             ¥2099
Intel Core i5-4690K @ 3.50GHz         7769              ¥1550
Intel Core i5-4690 @ 3.50GHz          7624              ¥1467
Intel Core i5-4590 @ 3.30GHz          7251              ¥1280
Intel Core i5-4460 @ 3.20GHz          6664              ¥1209

Intel Core i5-2520M @ 2.50GHz         3555
Intel Core i5-5250U @ 1.60GHz         3704
Intel Core i3-4170 @ 3.70GHz          5393
Intel 奔腾 E6500 @ 2.93GHz            1768

该网站(天梯排名)另有其它一系列比较数据,如硬盘,内存,手机拍照等,值得参考 http://itianti.sinaapp.com/index.php

显卡功耗  http://www.itocp.com/bbs/thread-77736-1-1.html

电源评估及选择原则  http://www.pc841.com/article/20141125-38354_all.html

http://detail.zol.com.cn/cpu/s1584/
http://detail.zol.com.cn/motherboard/s4695_s1281/
https://zh.wikipedia.org/wiki/Intel%E6%99%B6%E7%89%87%E7%B5%84%E5%88%97%E8%A1%A8
https://zh.wikipedia.org/wiki/Intel_Core_i5

坑啊!virtual box差分磁盘文件在修改虚拟机后会被清空!

被坑死了,下载一夜的文件,白下载了!

事情这样:
「背景」因为ssd空间较小,vbox里的win xp虚拟机,使用的动态差分硬盘:原始磁盘文件在sata盘上,差分文件放到ssd上,这样磁盘性能会比较好。虚拟硬盘设置的20G,比较小。
「发现」昨晚下载了几个大文件,在解压缩时,磁盘空间不够了,于是再分配一块新硬盘上去,机器重启后,发现系统竟然被还原了。查了磁盘文件,发现差分文件只有50M,这肯定不对。到处找,也没有。
「确认」为了验证一下,在v xp里做了一些文件修改,让磁盘差分文件大一点,然后把第二块盘从配置里移除,果然,

【161010补】之前看这篇草稿,想完成并发布之,但没动。一个主要原因是,仔细想想,vbox这样的设定,其实是合理的。怪自己当时的自作聪明。

本文是以前一次悲惨经历的记录。在草稿箱里放了1年多,最近整理博客看其更新时间为 2015年9月12日 @ 09:05,这么久都没有继续写,大概以后也不会续写,直接发出来算了(2016-10-10 16:46)。

filezilla server手工修改配置文件及重加载生效/命令行参考等

使用filezilla server自带的配置工具,修改用户(或用户组)目录权限时,浏览文件是很麻烦的事情,要一级一级展开,尤其是目录比较深的时候。这时,推荐手工修改配置文件 FileZilla Server.xml 。

以下示例假定filezilla server安装在 D:\Program Files\FileZilla Server

安装目录下文件 FileZilla Server.xml 即配置文件。该文件结构很清晰,而且有良好排版。每个用户(或组),下面都有 <Permissions> ... </Permissions> 节点,其中每个目录是一个 Permission节点,其中多个option,定义几种操作的权限。

下面是几种常用的权限示例,需要增减目录配置时,直接复制相应的 <Permission ...>.....</Permission> 节点 ,修改其中目录 Dir 即可

<label>readonly 只读权限</label>

                <Permission Dir="E:\web\tools">
                    <Option Name="FileRead">1</Option>
                    <Option Name="FileWrite">0</Option>
                    <Option Name="FileDelete">0</Option>
                    <Option Name="FileAppend">0</Option>
                    <Option Name="DirCreate">0</Option>
                    <Option Name="DirDelete">0</Option>
                    <Option Name="DirList">1</Option>
                    <Option Name="DirSubdirs">1</Option>
                    <Option Name="IsHome">0</Option>
                    <Option Name="AutoCreate">0</Option>
                </Permission>


<label>allaccess 所有权限,包括读写删除管理目录等</label>

                <Permission Dir="E:\web\tools">
                    <Option Name="FileRead">1</Option>
                    <Option Name="FileWrite">1</Option>
                    <Option Name="FileDelete">1</Option>
                    <Option Name="FileAppend">1</Option>
                    <Option Name="DirCreate">1</Option>
                    <Option Name="DirDelete">1</Option>
                    <Option Name="DirList">1</Option>
                    <Option Name="DirSubdirs">1</Option>
                    <Option Name="IsHome">0</Option>
                    <Option Name="AutoCreate">0</Option>
                </Permission>


<label>basic_write 常规的文件读写权限,不允许增删目录操作</label>

                <Permission Dir="E:\web\tools">
                    <Option Name="FileRead">1</Option>
                    <Option Name="FileWrite">1</Option>
                    <Option Name="FileDelete">1</Option>
                    <Option Name="FileAppend">1</Option>
                    <Option Name="DirCreate">1</Option>
                    <Option Name="DirDelete">0</Option>
                    <Option Name="DirList">1</Option>
                    <Option Name="DirSubdirs">1</Option>
                    <Option Name="IsHome">0</Option>
                    <Option Name="AutoCreate">0</Option>
                </Permission>


<label>no_access 无任何权限,包括读写文件,列出目录等</label>

                <Permission Dir="E:\web\tools">
                    <Option Name="FileRead">0</Option>
                    <Option Name="FileWrite">0</Option>
                    <Option Name="FileDelete">0</Option>
                    <Option Name="FileAppend">0</Option>
                    <Option Name="DirCreate">0</Option>
                    <Option Name="DirDelete">0</Option>
                    <Option Name="DirList">0</Option>
                    <Option Name="DirSubdirs">0</Option>
                    <Option Name="IsHome">0</Option>
                    <Option Name="AutoCreate">0</Option>
                </Permission>

即如上

,修改后,不需要重启,只需在命令行下重新加载权限即可,示例

D:\Program Files\FileZilla Server>"FileZilla Server.exe" /reload-config

"FileZilla Server.exe"  不像unix程序一样自带help,经查官方手册,转载如下

-------------- "FileZilla Server.exe" Command-line arguments  ------------------
Starting and stopping the service:

/start
/stop

Installing the service for manual startup:

/install

Installing the service for start at boot:

/install auto

Uninstalling service:

/uninstall

Reloading configuration at runtime:

/reload-config

--------------------------------

 

Pages: Prev 1 2 3 4 5 6 7 8 9 10 ... 46 47 48 Next