域名

分库分表实战:小试牛刀—千万级数据之SQL优化

字号+作者:益华科技来源:域名2025-11-05 15:57:49我要评论(0)

前 言sql优化是非常重要,因为即使再好的MySQL设计架构,也扛不住一个频繁查询的垃圾sql语句。关于sql的优化,我们也是有一定的原则和先后顺序的,大体的步骤的我们用一张流程图来看一下:总体呢,大

前 言

sql优化是分库分表非常重要,因为即使再好的实战MySQL设计架构,也扛不住一个频繁查询的小试垃圾sql语句。

关于sql的牛刀优化,我们也是千万有一定的原则和先后顺序的,大体的数据步骤的我们用一张流程图来看一下:

总体呢,大概可以分为以下几个步骤:

(1)首先,分库分表我们得要看下sql语句中是实战否有join语句,比如内连接查询inner join,小试外连接查询 left join right join等;因为join语句一般都涉及到跨表查询了,牛刀所以首先我们得要为join语句中,千万负责连接两张表的数据字段创建索引,这样的分库分表话可以利用索引加快两张表关联的速度。

(2)接下来,实战我们会再看一下sql语句中的小试where语句,我们可以根据当前表中的数据量,以及where语句的过滤条件,预估下查询结果的云服务器提供商数据量是否会很大,如果数据量很大的话,查询的速度肯定就会很慢,所以,为了提高sql语句的执行效率,我们得要为where语句中过滤字段单独创建索引。

(3)当我们把join语句以及where语句中的字段优化完之后,就可以来看一下其他的一些细节部分,比如sql语句中如果使用了聚合函数,或者对查询的结果进行了排序,那么,一般我们都建议为聚合函数中的字段,以及排序的字段都创建索引,让这些操作利用索引速度更快点。

sql优化中不管是对where语句、聚合函数、还是排序操作的优化,优化起来相对而言会简单点,为对应的字段创建合适的索引就可以了,高防服务器但是,join语句这块的优化涉及到一些比较重要的原理,我们还是有必要来看下的。

简单来说,在mysql中使用join语句关联2张表的话,比如执行这条sql:

复制select * from order_info t1 left join order_item_detail t2 on t1.order_no = t2.order_no1.

这个时候,join关联查询的过程是什么样子的呢?其实,这个就取决于当前join语句用到的算法了,join语句一共有3种算法,最基础的是Simple nested loop算法,接下来,我们一起来看下。

Simple nested loop算法

Simple nested loop算法,说白了就是一个双重for循环遍历的算法,Simple nested loop算法匹配的过程是这样的:

从左边的驱动表order_info中,WordPress模板每取出一条记录都要遍历一遍被驱动表order_item_detail,说白了就是一个双重for循环。

如果驱动表和被驱动表中都有100条数据的话,那么此时就需要匹配 100 * 100 = 10000次,可见效率是非常低的,所以,MySQL并没有选择使用 Simple nested loop 算法,而是使用了优化后的Block nested loop 算法。

Block nested loop 算法

Block nested loop 算法对 Simple nested loop 算法进行了优化,它引入了 join buffer,join buffer 主要用于优化不带索引条件的 join 查询,它会缓存连接过程中用到的字段,这样可以有效减少匹配次数,就像这样:

可以看到,Block nested loop的优化思路,是减少被驱动表的匹配次数,它主要是通过一次性缓存驱动表的多条数据,以此来减少被驱动表的匹配次数,从而可以达到提升性能的目的。

需要注意的是,MySQL提供了一个参数join buffer_size,它是用来控制 join buffer 大小的,而MySQL默认的join_buffer_size 是 256K,所以如果驱动表的数据太多的话,默认的join buffer可能一次性放不下全部的数据。

这个时候,join buffer就会采用分段缓存的机制来缓存驱动表的数据,但是这种分段缓存方式的性能,是比一次性缓存全部数据要差一些的。

所以,我们可以通过join_buffer_size参数,适当调大join buffer的大小,使join buffer可以一次性放下驱动表的所有数据,这样可以提升join的性能。

Index nested loop算法

最后还有一种Index nested loop算法:

它的优化思路主要是减少被驱动表数据的匹配次数, 就是驱动表直接与被驱动表的索引进行匹配,这样就不用和被驱动表的每条记录比较了。

原来的匹配次数为:驱动表行数 * 被驱动表行数,而现在变成了:驱动表行数 * 被驱动表索引的高度,这样就极大的减少了被驱动表的匹配次数,极大的提升了join的性能。

如果join关联查询能使用到索引的话,MySQL就会使用Indexnestedloop算法,如果无法使用Indexnestedloop算法,MYSQL默认会使用Blocknestedloop算法。

到底能不能使用join?

好了,我们刚才了解了Simple nested loop 、 Block nested loop、Index nested loop 这三种算法,那么现在可以回答开头的问题了:到底能不能使用join?

其实,如果能用上被驱动表上的索引,说白了就是可以用上 Index nested loop 算法的话,是可以使用 join 的。

而如果使用的是 Block nested loop 算法的话,由于扫描行数和比较次数会比较多,所以会占用大量的系统资源,所以这种情况能不用join就不用join。

我们平常使用explain优化sql的时候,如果 explain 结果中的 Extra 字段,如果包含 Using join buffer (Block Nested Loop) 的话,这个时候就代表使用了 Block nested loop 算法了。

如果能使用上被驱动表上的索引的话,join还是可以使用的,这个时候基本不会影响性能,那么我们这里为什么要优化掉join呢?

主要由于2个原因,首先后边我们有分库分表的计划,所以为了有更好的扩展性,我们会优化掉join,其次MySQL是专门用来做数据存储的,所以,还是尽量不要把业务相关的逻辑放到MySQL层面来做。

所以基于这2个原因,我们会将单体应用版本的join给优化掉。

join关联查询优化实战

被驱动表order_no列未加索引

(1)join关联查询sql语句

可以看到,sql语句中,left join语句中,订单明细表是通过order_no字段和订单表关联的,此时驱动表order_info的order_no是加了索引的,而被驱动表order_item_detail的order_no字段没有添加索引

(2)看一下查询时间

此时order_info中的数据量为2500万条,而订单明细表 order_item_detail 的数据量是1亿条。

可以看到被驱动表order_item_detail没使用到索引时,查询效率是非常低下的。

优化:被驱动表order_no列添加索引

(1)为被驱动表添加索引

现在我们为被驱动表order_item_detail的order_no添加索引,添加索引sql如下:

复制create index inx_item_order_no on order_item_detail (order_no);1.

(2)再次查看join关联查询的时间

此时我们发现被驱动表order_item_detail的关联字段order_no用上索引后,查询效率提升的非常明显。

进一步优化:去掉join

此时我们为了更好的扩展性,需要将join关联查询给优化掉

(1)看下join优化后的代码:

拆分join,改成单表查询,内存中再组装数据

(2)看一下优化后的时间

可以看到,将join关联查询优化掉之后,我们除了可以获取到更大的扩展性外,可以发现对查询性能的提升也是非常大的。

被动向主动的转变,监控系统诞生

在sql优化这个例子中,这个问题是由DBA同学发现的,然后DBA同学将问题反馈给了我们,实际在工作中呢,也可能是产品同学发现订单信息查询页面有点慢,然后将问题反馈给我们。

不管是谁发现的,对于我们订单系统的开发人员来说都是非常被动的,因为我们不能及时主动的发现问题,比如某一个接口变慢了,我们不能及时知道,只能等别人反馈给我们,这样被动的发现问题,会在一定程度上扩大问题的影响。

为了解决这个问题,我们建立了一套完善的监控系统,这个监控系统呢,可以添加很多监控面板,比如我们可以添加订单的监控面板,订单监控面板中的核心指标包含:订单核心接口的请求次数、失败次数、TP50、TP99等等。

然后,为了及时发现问题,这个监控系统还集成了报警的功能,说白了就是针对某一个监控指标,我们会设置一个报警规则,比如每天的某一个时间段,在多少分钟内,失败请求超过多少,那么就会报警给对应的开发人员,报警方式呢,会分为2种,分别是报警电话和消息推送(推送给公司内部的办公聊天软件)

报警的时候为了避免开发人员的单点故障,报警接收人一般会添加多个,如果第一个人不接报警电话的话,那么就顺延给第二个人打电话,这样就可以最大程度的及时发现问题了,就可以真正的由被动转为主动了。​

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
  • 安装Ubuntu/Debian 提供了三个不同的 Pure-FTPd 的 deb 安装包,分别是 pure-ftpd、pure-ftpd-ldap 和 pure- ftpd-mysql,其中 ldap 和 mysql 分别表示 Pure-FTPd 跟 ldap 和 mysql 集成,另外这三个包都依赖于 pure-ftpd-common。假如我们不需要 ldap 和 mysql 的话,选择 pure-ftpd 就可以了。通过 pure-ftpd-wrapper 的手册页我们可以得到可用的配置文件选项列表:下面是前面我们介绍的第二种方式的配置文件,我们这儿可以将其作为第三种方式来理解。比如要限制所有用户在其主目录中,在 /etc/pure-ftpd/conf 中创建一个名为 ChrootEveryone 的文件,里面加入一行内容:yes 即可。# 限制所有用户在其主目录中ChrootEveryone yes# 假如前一个指令被设置为了 no,下面组的成员(GID)就不受主目录的限制了。而其他的用户还是# 会被限制在自己的主目录里。假如你不想把任何用户限制在自己的主目录里,只要注释掉 ChrootEveryone# 和 TrustedGID 就可以了。# TrustedGID 100# 兼容ie等比较非正规化的ftp客户端BrokenClientsCompatibility no# 服务器总共允许同时连接的最大用户数MaxClientsNumber 50# 做为守护(doemon)进程运行(Fork in background)Daemonize yes# 同一IP允许同时连接的用户数(Maximum number of sim clients with the same IP address)MaxClientsPerIP 8# 假如你要记录所有的客户命令,设置这个指令为 yes。# This directive can be duplicated to also log server responses.VerboseLog no# 即使客户端没有发送 -a 选项也列出隐藏文件( dot-files )。DisplayDotFiles yes# 不允许认证用户 - 仅作为一个公共的匿名FTP。AnonymousOnly no# 不允许匿名连接,仅允许认证用户使用。NoAnonymous no# Syslog facility (auth, authpriv, daemon, ftp, security, user, local*)# 缺省的功能( facility )是 ftp。 none 将禁止日志。SyslogFacility ftp# 定制用户登陆后的显示信息(Display fortune cookies)# FortunesFile /usr/share/fortune/zippy# 在日志文件中不解析主机名。日志没那么详细的话,就使用更少的带宽。在一个访问量很大# 的站点中,设置这个指令为 yes ,假如你没有一个能工作的DNS的话。DontResolve yes# 客户端允许的最大的空闲时间(分钟,缺省15分钟)MaxIdleTime 15# LDAP 配置文件 (参考 README.LDAP)# LDAPConfigFile /etc/pureftpd-ldap.conf# MySQL 配置文件 (参考 README.MySQL)# MySQLConfigFile /etc/pureftpd-mysql.conf# Postgres 配置文件 (参考 README.PGSQL)# PGSQLConfigFile /etc/pureftpd-pgsql.conf# PureDB 用户数据库 (参考 README.Virtual-Users)# PureDB /etc/pureftpd.pdb# pure-authd 的socket 路径(参考 README.Authentication-Modules)# ExtAuth /var/run/ftpd.sock# 假如你要启用 PAM 认证方式, 去掉下面行的注释。# PAMAuthentication yes# 假如你要启用 简单的 Unix系统 认证方式(/etc/passwd), 去掉下面行的注释。# UnixAuthentication yes# 请注意,LDAPConfigFile, MySQLConfigFile, PAMAuthentication 和# UnixAuthentication 这些指令只能被使用一次,不过,他们能被混合在一起用。例如:假如你使用了# MySQLConfigFile 和 UnixAuthentication,那么 SQL 服务器将被访问。假如因为用户名未找# 到而使 SQL 认证失败的话,就会在/etc/passwd 和 /etc/shadow 中尝试另外一种认证,假如因# 为密码错误而使 SQL 认证失败的话,认证就会在此结束了。认证方式由它们被给出来的顺序而被链# 接了起来。# ls 命令的递归限制。第一个参数给出文件显示的最大数目。第二个参数给出最大的子目录深度。LimitRecursion 2000 8# 允许匿名用户创建新目录?AnonymousCanCreateDirs no# 假如系统被 loaded 超过下面的值,匿名用户会被禁止下载。MaxLoad 4# 被动连接响应的端口范围。- for firewalling.# PassivePortRange 30000 50000# 强制一个IP地址使用被动响应( PASV/EPSV/SPSV replies)。 - for NAT.# Symbolic host names are also accepted for gateways with dynamic IP# addresses.# ForcePassiveIP 192.168.0.1# 匿名用户的上传/下载的比率。# AnonymousRatio 1 10# 所有用户的上传/下载的比率。# This directive superscedes the previous one.# UserRatio 1 10# 不接受所有者为 ftp 的文件的下载。例如:那些匿名用户上传后未被本地管理员验证的文件。AntiWarez yes第二个文件# 客户端登录的时候的默认编码,开启这个选项的话,windows登录时就不会显示不了中文的了ClientCharset gbk# 服务监听的IP 地址和端口。(缺省是所有IP地址和21端口)# Bind 127.0.0.1,21# 匿名用户的最大带宽(KB/s)。# AnonymousBandwidth 8# 所有用户的最大带宽(KB/s),包括匿名用户。# Use AnonymousBandwidth *or* UserBandwidth, both makes no sense.# UserBandwidth 8# 新建目录及文件的属性掩码值。<文件掩码>;:<目录掩码>; .# 177:077 if you feel paranoid.Umask 133:022# 认证用户允许登陆的最小组ID(UID) 。MinUID 100# 仅允许认证用户进行 FXP 传输。AllowUserFXP yes# 对匿名用户和非匿名用户允许进行匿名 FXP 传输。AllowAnonymousFXP no# 用户不能删除和写点文件(文件名以 . 开头的文件),即使用户是文件的所有者也不行。# 假如 TrustedGID 指令是 enabled ,文件所属组用户能够访问点文件(dot-files)。ProhibitDotFilesWrite no# 禁止读点文件(文件名以 . 开头的文件) (.history, .ssh...)ProhibitDotFilesRead no# 永不覆盖文件。当上传的文件,其文件名已经存在时,自动重命名,如: file.1, file.2, file.3, ...AutoRename no# 不接受匿名用户上传新文件( no = 允许上传)AnonymousCantUpload no# 仅允许来自以下IP地址的非匿名用户连接。你可以使用这个指令来打开几个公网IP来提供匿名FTP,# 而保留一个私有的防火墙保护的IP来进行远程管理。你还可以只允许一内网地址进行认证,而在另外# 一个IP上提供纯匿名的FTP服务。#TrustedIP 10.1.1.1# 假如你要为日志每一行添加 PID 去掉下面行的注释。# LogPID yes# 使用类似于Apache的格式创建一个额外的日志文件,如:# fw.c9x.org - jedi [13/Dec/1975] GET /ftp/linux.tar.bz2 200 21809338# 这个日志文件能被 www 流量分析器处理。# AltLog clf:/var/log/pureftpd.log# 使用优化过的格式为统计报告创建一个额外的日志文件。# AltLog stats:/var/log/pureftpd.log# 使用标准的W3C格式创建一个额外的日志文件。(与大部分的商业日志分析器兼容)# AltLog w3c:/var/log/pureftpd.log# 不接受 CHMOD 命令。用户不能更改他们文件的属性。# NoChmod yes# 允许用户恢复和上传文件,却不允许删除他们。# KeepAllFiles yes# 用户主目录不存在的话,自动创建。# CreateHomeDir yes# 启用虚拟的磁盘限额。第一个数字是最大的文件数。# 第二个数字是最大的总的文件大小(单位:Mb)。# 所以,1000:10 就限制每一个用户只能使用 1000 个文件,共10Mb。# Quota 1000:10# 假如你的 pure-ftpd 编译时加入了独立服务器( standalone )支持,你能够改变 pid 文件# 的位置。缺省位置是 /var/run/pure-ftpd.pid 。# PIDFile /var/run/pure-ftpd.pid# 假如你的 pure-ftpd 编译时加入了 pure-uploadscript 支持,这个指令将会使 pure-ftpd# 发送关于新上传的情况信息到 /var/run/pure-ftpd.upload.pipe,这样 pure-uploadscript# 就能读然后调用一个脚本去处理新的上传。# CallUploadScript yes# 这个选项对允许匿名上传的服务器是有用的。当 /var/ftp 在 /var 里时,需要保留一定磁盘空间# 来保护日志文件。当所在磁盘分区使用超过百分之 X 时,将不在接受新的上传。MaxDiskUsage 99# 假如你不想要你的用户重命名文件的话,就设置为 yes 。# NoRename yes# 是 customer proof : 工作区(workaround)反对普通的客户错误,类似于:chmod 0 public_html 的错误。# 那是一个有效的命令,不过,将导致无知的客户所定他们自己的文件,将使你的技术支持忙于愚蠢的的问题中。# 假如你确信你所有的用户都有基本的Unix知识的话,这个特性将没什么用了。不过,假如你是一个主机提供商# 的话,启用它。CustomerProof yes# 每一个用户的并发限制。只有在添加了 --with-peruserlimits 编译选项进行编译后,这个指令才起# 作用。(大部分的二进制的发布版本就是例子)# 格式是 : <每一个用户最大允许的进程>;:<最大的匿名用户进程>;# 例如: 3:20 意思是同一个认证用户最大可以有3个同时活动的进程。而且同时最多只能有20个匿名用户进程。# PerUserLimits 3:20

    安装Ubuntu/Debian 提供了三个不同的 Pure-FTPd 的 deb 安装包,分别是 pure-ftpd、pure-ftpd-ldap 和 pure- ftpd-mysql,其中 ldap 和 mysql 分别表示 Pure-FTPd 跟 ldap 和 mysql 集成,另外这三个包都依赖于 pure-ftpd-common。假如我们不需要 ldap 和 mysql 的话,选择 pure-ftpd 就可以了。通过 pure-ftpd-wrapper 的手册页我们可以得到可用的配置文件选项列表:下面是前面我们介绍的第二种方式的配置文件,我们这儿可以将其作为第三种方式来理解。比如要限制所有用户在其主目录中,在 /etc/pure-ftpd/conf 中创建一个名为 ChrootEveryone 的文件,里面加入一行内容:yes 即可。# 限制所有用户在其主目录中ChrootEveryone yes# 假如前一个指令被设置为了 no,下面组的成员(GID)就不受主目录的限制了。而其他的用户还是# 会被限制在自己的主目录里。假如你不想把任何用户限制在自己的主目录里,只要注释掉 ChrootEveryone# 和 TrustedGID 就可以了。# TrustedGID 100# 兼容ie等比较非正规化的ftp客户端BrokenClientsCompatibility no# 服务器总共允许同时连接的最大用户数MaxClientsNumber 50# 做为守护(doemon)进程运行(Fork in background)Daemonize yes# 同一IP允许同时连接的用户数(Maximum number of sim clients with the same IP address)MaxClientsPerIP 8# 假如你要记录所有的客户命令,设置这个指令为 yes。# This directive can be duplicated to also log server responses.VerboseLog no# 即使客户端没有发送 -a 选项也列出隐藏文件( dot-files )。DisplayDotFiles yes# 不允许认证用户 - 仅作为一个公共的匿名FTP。AnonymousOnly no# 不允许匿名连接,仅允许认证用户使用。NoAnonymous no# Syslog facility (auth, authpriv, daemon, ftp, security, user, local*)# 缺省的功能( facility )是 ftp。 none 将禁止日志。SyslogFacility ftp# 定制用户登陆后的显示信息(Display fortune cookies)# FortunesFile /usr/share/fortune/zippy# 在日志文件中不解析主机名。日志没那么详细的话,就使用更少的带宽。在一个访问量很大# 的站点中,设置这个指令为 yes ,假如你没有一个能工作的DNS的话。DontResolve yes# 客户端允许的最大的空闲时间(分钟,缺省15分钟)MaxIdleTime 15# LDAP 配置文件 (参考 README.LDAP)# LDAPConfigFile /etc/pureftpd-ldap.conf# MySQL 配置文件 (参考 README.MySQL)# MySQLConfigFile /etc/pureftpd-mysql.conf# Postgres 配置文件 (参考 README.PGSQL)# PGSQLConfigFile /etc/pureftpd-pgsql.conf# PureDB 用户数据库 (参考 README.Virtual-Users)# PureDB /etc/pureftpd.pdb# pure-authd 的socket 路径(参考 README.Authentication-Modules)# ExtAuth /var/run/ftpd.sock# 假如你要启用 PAM 认证方式, 去掉下面行的注释。# PAMAuthentication yes# 假如你要启用 简单的 Unix系统 认证方式(/etc/passwd), 去掉下面行的注释。# UnixAuthentication yes# 请注意,LDAPConfigFile, MySQLConfigFile, PAMAuthentication 和# UnixAuthentication 这些指令只能被使用一次,不过,他们能被混合在一起用。例如:假如你使用了# MySQLConfigFile 和 UnixAuthentication,那么 SQL 服务器将被访问。假如因为用户名未找# 到而使 SQL 认证失败的话,就会在/etc/passwd 和 /etc/shadow 中尝试另外一种认证,假如因# 为密码错误而使 SQL 认证失败的话,认证就会在此结束了。认证方式由它们被给出来的顺序而被链# 接了起来。# ls 命令的递归限制。第一个参数给出文件显示的最大数目。第二个参数给出最大的子目录深度。LimitRecursion 2000 8# 允许匿名用户创建新目录?AnonymousCanCreateDirs no# 假如系统被 loaded 超过下面的值,匿名用户会被禁止下载。MaxLoad 4# 被动连接响应的端口范围。- for firewalling.# PassivePortRange 30000 50000# 强制一个IP地址使用被动响应( PASV/EPSV/SPSV replies)。 - for NAT.# Symbolic host names are also accepted for gateways with dynamic IP# addresses.# ForcePassiveIP 192.168.0.1# 匿名用户的上传/下载的比率。# AnonymousRatio 1 10# 所有用户的上传/下载的比率。# This directive superscedes the previous one.# UserRatio 1 10# 不接受所有者为 ftp 的文件的下载。例如:那些匿名用户上传后未被本地管理员验证的文件。AntiWarez yes第二个文件# 客户端登录的时候的默认编码,开启这个选项的话,windows登录时就不会显示不了中文的了ClientCharset gbk# 服务监听的IP 地址和端口。(缺省是所有IP地址和21端口)# Bind 127.0.0.1,21# 匿名用户的最大带宽(KB/s)。# AnonymousBandwidth 8# 所有用户的最大带宽(KB/s),包括匿名用户。# Use AnonymousBandwidth *or* UserBandwidth, both makes no sense.# UserBandwidth 8# 新建目录及文件的属性掩码值。<文件掩码>;:<目录掩码>; .# 177:077 if you feel paranoid.Umask 133:022# 认证用户允许登陆的最小组ID(UID) 。MinUID 100# 仅允许认证用户进行 FXP 传输。AllowUserFXP yes# 对匿名用户和非匿名用户允许进行匿名 FXP 传输。AllowAnonymousFXP no# 用户不能删除和写点文件(文件名以 . 开头的文件),即使用户是文件的所有者也不行。# 假如 TrustedGID 指令是 enabled ,文件所属组用户能够访问点文件(dot-files)。ProhibitDotFilesWrite no# 禁止读点文件(文件名以 . 开头的文件) (.history, .ssh...)ProhibitDotFilesRead no# 永不覆盖文件。当上传的文件,其文件名已经存在时,自动重命名,如: file.1, file.2, file.3, ...AutoRename no# 不接受匿名用户上传新文件( no = 允许上传)AnonymousCantUpload no# 仅允许来自以下IP地址的非匿名用户连接。你可以使用这个指令来打开几个公网IP来提供匿名FTP,# 而保留一个私有的防火墙保护的IP来进行远程管理。你还可以只允许一内网地址进行认证,而在另外# 一个IP上提供纯匿名的FTP服务。#TrustedIP 10.1.1.1# 假如你要为日志每一行添加 PID 去掉下面行的注释。# LogPID yes# 使用类似于Apache的格式创建一个额外的日志文件,如:# fw.c9x.org - jedi [13/Dec/1975] GET /ftp/linux.tar.bz2 200 21809338# 这个日志文件能被 www 流量分析器处理。# AltLog clf:/var/log/pureftpd.log# 使用优化过的格式为统计报告创建一个额外的日志文件。# AltLog stats:/var/log/pureftpd.log# 使用标准的W3C格式创建一个额外的日志文件。(与大部分的商业日志分析器兼容)# AltLog w3c:/var/log/pureftpd.log# 不接受 CHMOD 命令。用户不能更改他们文件的属性。# NoChmod yes# 允许用户恢复和上传文件,却不允许删除他们。# KeepAllFiles yes# 用户主目录不存在的话,自动创建。# CreateHomeDir yes# 启用虚拟的磁盘限额。第一个数字是最大的文件数。# 第二个数字是最大的总的文件大小(单位:Mb)。# 所以,1000:10 就限制每一个用户只能使用 1000 个文件,共10Mb。# Quota 1000:10# 假如你的 pure-ftpd 编译时加入了独立服务器( standalone )支持,你能够改变 pid 文件# 的位置。缺省位置是 /var/run/pure-ftpd.pid 。# PIDFile /var/run/pure-ftpd.pid# 假如你的 pure-ftpd 编译时加入了 pure-uploadscript 支持,这个指令将会使 pure-ftpd# 发送关于新上传的情况信息到 /var/run/pure-ftpd.upload.pipe,这样 pure-uploadscript# 就能读然后调用一个脚本去处理新的上传。# CallUploadScript yes# 这个选项对允许匿名上传的服务器是有用的。当 /var/ftp 在 /var 里时,需要保留一定磁盘空间# 来保护日志文件。当所在磁盘分区使用超过百分之 X 时,将不在接受新的上传。MaxDiskUsage 99# 假如你不想要你的用户重命名文件的话,就设置为 yes 。# NoRename yes# 是 customer proof : 工作区(workaround)反对普通的客户错误,类似于:chmod 0 public_html 的错误。# 那是一个有效的命令,不过,将导致无知的客户所定他们自己的文件,将使你的技术支持忙于愚蠢的的问题中。# 假如你确信你所有的用户都有基本的Unix知识的话,这个特性将没什么用了。不过,假如你是一个主机提供商# 的话,启用它。CustomerProof yes# 每一个用户的并发限制。只有在添加了 --with-peruserlimits 编译选项进行编译后,这个指令才起# 作用。(大部分的二进制的发布版本就是例子)# 格式是 : <每一个用户最大允许的进程>;:<最大的匿名用户进程>;# 例如: 3:20 意思是同一个认证用户最大可以有3个同时活动的进程。而且同时最多只能有20个匿名用户进程。# PerUserLimits 3:20

    2025-11-05 15:50

  • 美的手机遥控——方便实用的智能家居控制利器(一键操控,打造智能化生活体验)

    美的手机遥控——方便实用的智能家居控制利器(一键操控,打造智能化生活体验)

    2025-11-05 15:45

  • 使用KMS激活工具轻松激活Windows系统(了解KMS激活工具的原理及使用方法)

    使用KMS激活工具轻松激活Windows系统(了解KMS激活工具的原理及使用方法)

    2025-11-05 15:11

  • GalaxyJ3是一款如何的手机?(探索GalaxyJ3的功能与性能)

    GalaxyJ3是一款如何的手机?(探索GalaxyJ3的功能与性能)

    2025-11-05 13:48

网友点评
精彩导读