Archive for September, 2010


mysql关于timeout的问题

一般来讲,程序配置优化所产生的生产力远比提高硬件配置要好,可能一行蹩脚的SQL要吃 掉你服务器整个内存,导航你的网站或服务器宕机。
优化程序和服务器配置是提高效率的第一步也是最好的办法,如果实在不行再从去升级你的硬件配置。
在 日常的MySQL服务器中,wait-timeout这个参数非常有用。
(在部分MySQL的默认配置中可能没有wait-timeout这个参 数项,你在[mysqld]节中加上即可)
参数意义:MySQL客户端的数据库连接闲置最大时间值。
参数默认值:默认值为8小时 。
这 个参数的大概意思是某一个MySQL客户端连接闲置的最大时间值,即某一个MySQL客户端连接过程中,闲置的最大时间到达后服务器将其关闭。
MySQL 服务器所支撑的最大连接数是有限的,因为每一个连接、第一个表打开的操作都要消耗服务器内存,理想状态是当一个MySQL客户端连接完成工作就自动断开释 放内存,如果你的你的网站有大量的MySQL链接请求,这些连接完成SQL执行任务后空闲着啥事也不干,白白占用内存资源,如果这些连接堆积起来,将导致 MySQL超过最大连接数,从而无法新建MySQL连接,有可能导致“Too many connections”的错误。
可以在设置之前用 show processlist查看一下MySQL状态,如果你发现你的MYSQL中有大量的Sleep进程,哪么你真的需要设置你的wait-timeout 了。依你的程序而定设置多大的值,我的设置wait-timeout=10,MySQL中的所有Sleep线程最多只能“睡”10秒,之后就被强行关闭 了。

注意:要经常追踪一下看看目前MYSQL里面是否有长连接存在如果有的话要尽快中断

如何加大MYSQL中的最大连接数

mysql的最大连接数默认是100, 这个数值对于并发连接很多的数据库应用是远远不够的,当连接请求大于默认连接数后,就会出现无法连接数据库的错误,因此我们需要把它适当调大一些,
有两种办法可以修改最大连接数,一种是修改safe_mysqld,另一种是直接修改原代码并重新编译。下面我们就分别介绍这两种方法:

1.修改safe_mysqld

找到safe_mysqld编辑它,找到mysqld启动的那两行,在后面加上参数 :

-O max_connections=1000

例如 :(其中前面有—的是原来的内容,而+++是修改过以后的)

— safe_mysqld.orig Mon Sep 25 09:34:01 2000

+++ safe_mysqld Sun Sep 24 16:56:46 2000

@@ -109,10 +109,10 @@

if test “$#” -eq 0

then

nohup $ledir/mysqld –basedir=$MY_BASEDIR_VERSION –datadir=$DATADIR

- –skip-locking >> $err_log 2>&1

+ –skip-locking -O max_connections=1000 >> $err_log 2>&1

else

nohup $ledir/mysqld –basedir=$MY_BASEDIR_VERSION –datadir=$DATADIR

- –skip-locking “$@” >> $err_log 2>&1

+ –skip-locking “$@” -O max_connections=1000 >> $err_log 2>&1

fi

if test ! -f $pid_file # This is removed if normal shutdown

then

然后关闭mysql重启它,用

/mysqladmin所在路径/mysqladmin -uroot -p variables

输入root数据库账号的密码后可看到

| max_connections | 1000 |

即新改动已经生效。

2.修改原代码

解开MySQL的原代码,进入里面的sql目录修改mysqld.cc找到下面一行:

{ “max_connections”, (long*) &max_connections,100,1,16384,0,1},

把它改为:

{ “max_connections”, (long*) &max_connections,1000,1,16384,0,1},

存盘退出,然后./configure ;make;make install可以获得同样的效果。

mysql innodb 优化 参数篇

作/译者:吴炳锡,来源:http://imysql.cn & http://imysql.cn/blog/3208 转载请注明作/译者和出处,并且不能用于商业用途,违者必究。
介绍:
InnoDB给MySQL提供了具有提交,回滚和崩溃恢复能力的事务安全(ACID兼容)存 储引擎。InnoDB锁定在行级并且也在SELECT语句提供一个Oracle风格一致的非锁定读。这些特色增加了多用户部署和性能。没有在InnoDB 中扩大锁定的需要,因为在InnoDB中行级锁定适合非常小的空间。InnoDB也支持FOREIGN KEY强制。在SQL查询中,你可以自由地将InnoDB类型的表与其它MySQL的表的类型混合起来,甚至在同一个查询中也可以混合。
Innodb 的创始人:Heikki Tuuri
Heikki Tuuri在Innodb的Bug社区里也是很活跃的,如果遇到Bug也可以直接提到社区,得到作者的解答。
为什么要学习Innodb的调优:
目前来说:InnoDB是为Mysql处理巨大数据量时的最大性能设计。它的CPU效率可能是任何其它基于磁盘的关系数据库引擎所不能匹敌的。在数据量大的网站或是应用中Innodb是倍受青睐的。
另一方面,在数据库的复制操作中Innodb也是能保证master和slave数据一致有一定的作用。
参数调优内容:
1. 内存利用方面
2. 日志控制方面
3. 文件IO分配,空间占用方面
4. 其它相关参数
1.内存利用方面:
首先介绍一个Innodb最重要的参数:
innodb_buffer_pool_size
这个参数和MyISAM的key_buffer_size有相似之处,但也是有差别的。这个参数主要缓存innodb表的索引,数据,插入数据时的缓冲。为Innodb加速优化首要参数。
该参数分配内存的原则:这个参数默认分配只有8M,可以说是非常小的一个值。如果是一个专用DB服务器,那么他可以占到内存的70%-80%。这个参数 不能动态更改,所以分配需多考虑。分配过大,会使Swap占用过多,致使Mysql的查询特慢。如果你的数据比较小,那么可分配是你的数据大小+10%左 右做为这个参数的值。例如:数据大小为50M,那么给这个值分配innodb_buffer_pool_size=64M
设置方法:
innodb_buffer_pool_size=4G
这个参数分配值的使用情况可以根据show innodb status\G;中的
———————-
BUFFER POOL AND MEMORY
———————-
Total memory allocated 4668764894;

去确认使用情况。
第二个:
innodb_additional_mem_pool:
作用:用来存放Innodb的内部目录
这个值不用分配太大,系统可以自动调。不用设置太高。通常比较大数据设置16M够用了,如果表比较多,可以适当的增大。如果这个值自动增加,会在error log有中显示的。
分配原则:
show innodb status\G;去查看运行中的DB是什么状态(参考BUFFER POOL AND MEMORY段中),然后可以调整到适当的值。
———————-
BUFFER POOL AND MEMORY
———————-
Total memory allocated 4668764894; in additional pool allocated 16777216
参考:in additional pool allocated 16777216
根据你的参数情况,可以适当的调整。
设置方法:
innodb_additional_mem_pool=16M
2.关于日志方面:
innodb_log_file_size
作用:指定日志的大小
分配原则:几个日志成员大小加起来差不多和你的innodb_buffer_pool_size相等。上限为每个日志上限大小为4G.一般控制在几个LOG文件相加大小在2G以内为佳。具体情况还需要看你的事务大小,数据大小为依据。
说明:这个值分配的大小和数据库的写入速度,事务大小,异常重启后的恢复有很大的关系。
设置方法:
innodb_log_file_size=256M
innodb_log_files_in_group
作用:指定你有几个日志组。
分配原则: 一般我们可以用2-3个日志组。默认为两个。
设置方法:
innodb_log_files_in_group=3
innodb_log_buffer_size:
作用:事务在内存中的缓冲。
分配原则:控制在2-8M.这个值不用太多的。他里面的内存一般一秒钟写到磁盘一次。具体写入方式和你的事务提交方式有关。在Oracle等数据库了解这个,一般最大指定为3M比较合适。
参考:Innodb_os_log_written(show global status 可以拿到)
如果这个值增长过快,可以适当的增加innodb_log_buffer_size
另外如果你需要处理大理的TEXT,或是BLOB字段,可以考虑增加这个参数的值。
设置方法:
innodb_log_buffer_size=3M
innodb_flush_logs_at_trx_commit
作用:控制事务的提交方式
分配原则:这个参数只有3个值,0,1,2请确认一下自已能接受的级别。默认为1,主库请不要更改了。
性能更高的可以设置为0或是2,但会丢失一秒钟的事务。
说明:
这个参数的设置对Innodb的性能有很大的影响,所以在这里给多说明一下。
当这个值为1时:innodb 的事务LOG在每次提交后写入日志文件,并对日志做刷新到磁盘。这个可以做到不丢任何一个事务。
当 这个值为2时:在每个提交,日志缓冲被写到文件,但不对日志文件做到磁盘操作的刷新,在对日志文件的刷新在值为2的情况也每秒发生一次。但需要注意的是, 由于进程调用方面的问题,并不能保证每秒100%的发生。从而在性能上是最快的。但操作系统崩溃或掉电才会删除最后一秒的事务。
当这个值为0时:日志缓冲每秒一次地被写到日志文件,并且对日志文件做到磁盘操作的刷新,但是在一个事务提交不做任何操作。mysqld进程的崩溃会删除崩溃前最后一秒的事务。
从以上分析,当这个值不为1时,可以取得较好的性能,但遇到异常会有损失,所以需要根据自已的情况去衡量。
设置方法:
innodb_flush_logs_at_trx_commit=1
3. 文件IO分配,空间占用方面
innodb_file_per_table
作用:使每个Innodb的表,有自已独立的表空间。如删除文件后可以回收那部分空间。
分配原则:只有使用不使用。但DB还需要有一个公共的表空间。
设置方法:
innodb_file_per_table=1
innodb_file_io_threads
作用:文件读写IO数,这个参数只在Windows上起作用。在LINUX上只会等于4
设置方法:
innodb_file_io_threads=4
innodb_open_files
作用:限制Innodb能打开的表的数据。
分配原则:如果库里的表特别多的情况,请增加这个。这个值默认是300。
设置方法:
innodb_open_files=800
请适当的增加table_cache
4. 其它相关参数
这里说明一个比较重要的参数:
innodb_flush_method
作用:Innodb和系统打交道的一个IO模型
分配原则:Windows不用设置。
Unix可以设置:fsync() or O_SYNC/O_DSYNC
如果系统可以禁止系统的Cache那就把他禁了。
Linux可以选择:O_DIRECT
直接写入磁盘,禁止系统Cache了
设置方法:
innodb_flush_method=O_DIRECT
innodb_max_dirty_pages_pct
作用:控制Innodb的脏页在缓冲中在那个百分比之下,值在范围1-100,默认为90.
这个参数的另一个用处:当Innodb的内存分配过大,致使Swap占用严重时,可以适当的减小调整这个值,使达到Swap空间释放出来。建义:这个值最大在90%,最小在15%。太大,缓存中每次更新需要致换数据页太多,太小,放的数据页太小,更新操作太慢。
设置方法:
innodb_max_dirty_pages_pct=90
动态更改需要有Super权限:
set global innodb_max_dirty_pages_pct=50;
总结:
这里只算是列出了Innodb部分的重要参数,不能认为是对Mysql的整体调优。Mysql的参数一般分为:全局参数,具体引擎的参数。全局参数方面请参考http://imysql.cn/2007_12_08_optimize_mysql_under_linux yejr的那个Mysql调优的PPT。

了解 NoSQL 的必读资料

NoSQL 是非关系型数据存储的广义定义。它打破了长久以来关系型数据库与 ACID 理论大一统的局面。NoSQL 数据存储不需要固定的表结构,通常也不存在连接 操作。在大数据存取上具备关系型数据库无法比拟的性能优势。该术语在 2009 年初得到了广泛认同。
     当今的应用体系结构需要数据存储在横向伸缩性 上能够满足需求。而 NoSQL 存储就是为了实现这个需求。Google 的 BigTable 与 Amazon 的 Dynamo 是非常成功的商业 NoSQL 实现。一些开源的 NoSQL 体系,如Facebook 的 Cassandra , Apache 的 HBase ,也得到了广泛认同。
     如果您刚接触 NoSQL,那有必要学习一些背景知识。下列资料是国外一前沿技术分析师 认为非常有价值的 NoSQL 相关必读资料:
Amazon Dynamo 论文 。几乎所有懂 NoSQL 的人都阅读过它。
Google 的 Bigtable 论文 。 也许您已经耳熟能详。
Werner Vogels 的 “Eventually Consistent” (发布于 ACM Queue )。如果您对“最终一致性 ”不是非常清晰,请阅读这篇文章。
Brewer 的 CAP 理论 (可伸缩性的基础)在这里 可以找到非常好的诠释。也可以看看 2000 7 月 PODC 上 Brewer的原始幻灯片 。
在 2009 年 6 月在 SFO 的 NoSQL 见面会的幻灯片 。这些资料可以用经典的、关键的、将影响巨大的、值得纪念的来形容。
SQL Databases Don’t Scale 是一篇简短、基础、直切问题的文章。除非您是一位在伸缩性问题 上身经百战的数据库管理员,否则,这篇文章讲述的内容对于您可能是非常关键的。
Jonathan Ellis 的文章 NoSQL Ecosystem 以表格的方式对当今主流的分布式数据库 做了比较。类似的比较还有 Quick Reference to Alternative data storages 。Ellis 的文章除了表格对比外对于想了解 NoSQL 生态的人来说是非常值得一读的,该文章内涵丰富,短小精悍;而 Quick Reference to Alternative data storages 主要是表格,这些表格对比的内容又比 Ellis 的完整。
相关国外资源
    http://nosql-databases.org —— 该站点的标语是:“非关系型世界的终结向导!”,该站点非常确信自己是:“在互联网上拥有 NoSQL 相关链接最多的网站。”总之,该网站值得关注。
     另外,作为 NoSQL 极客(geeks),请 follow @nosqlupdate 。另外,请 follow @al3xandru (MyNoSQL blog 与 NoSQL Week in Review 的创建者)。NoSQL Week in Review 比较新,希望能保持正常更新,因为它确实很棒!
     当然,您还可以看看 Ricky Ho 最近的博文,他总结了一些分布式数据存储技术关键点。他的博文中有两篇非常值得一看的文章:Query Processing for NoSQL Databases ,还有 NoSQL Design Patterns 。

相关国内资源
Tim[后端技术] :分布式 Key Value Store 漫谈
CSDN 新闻频道 :豆瓣开源 Key Value 存储系统 BeansDB
robbin的自言自语 :NoSQL数据库探讨之一
J道 BanQ :CAP 原理和 BASE 思想

来源:NoSQL Required Reading ,Wikipedia – NoSQL
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/DL88250/archive/2010/01/14/5191092.aspx

MySQL导出导入命令的用例

1.导出整个数据库

mysqldump -u 用户名 -p 数据库名 > 导出的文件名

mysqldump -u wcnc -p smgp_apps_wcnc > wcnc.sql

2.导出一个表

mysqldump -u 用户名 -p 数据库名 表名> 导出的文件名

mysqldump -u wcnc -p smgp_apps_wcnc users> wcnc_users.sql

3.导出一个数据库结构

mysqldump -u wcnc -p -d –add-drop-table smgp_apps_wcnc >d:\wcnc_db.sql

-d 没有数据 –add-drop-table 在每个create语句之前增加一个drop table

4.导入数据库

常用source 命令

进入mysql数据库控制台,

如mysql -u root -p

mysql>use 数据库

然后使用source命令,后面参数为脚本文件(如这里用到的.sql)

mysql>source d:\wcnc_db.sql

为mysql数据库建立索引

就象许多的PHP开发者一样,在刚开始建立动态网站的时候,我都是使用相对简单 的数据结构。PHP在连接数据库方面的确实是十分方便(译者注:有些人认为PHP在连接不同数据库时没有一个统一的接口,不太方便,其实这可以通过一些扩 展库来做到这一点),你无需看大量的设计文档就可以建立和使用数据库,这也是PHP获得成功的主要原因之一。

前些时候,一位颇高级 的程序员居然问我什么叫做索引,令我感到十分的惊奇,我想这绝不会是沧海一粟,因为有成千上万的开发者(可能大部分是使用MySQL的)都没有受过有关数 据库的正规培训,尽管他们都为客户做过一些开发,但却对如何为数据库建立适当的索引所知较少,因此我起了写一篇相关文章的念头。

最普通的情况,是为出现在where子句的字段建一个索引。为方便讲述,我们先建立一个如下的表。

Code代码如下:
CREATE TABLE mytable (
id serial primary key,
category_id int not null default 0,
user_id int not null default 0,
adddate int not null default 0
);

很简单吧,不过对于要说明这个问题,已经足够了。如果你在查询时常用类似以下的语句:

SELECT * FROM mytable WHERE category_id=1;

最直接的应对之道,是为category_id建立一个简单的索引:

CREATE INDEX mytable_categoryid
ON mytable (category_id);

OK,搞定?先别高兴,如果你有不止一个选择条件呢?例如:

SELECT * FROM mytable WHERE category_id=1 AND user_id=2;

你的第一反应可能是,再给user_id建立一个索引。不好,这不是一个最佳的方法。你可以建立多重的索引。

CREATE INDEX mytable_categoryid_userid ON mytable (category_id,user_id);

注意到我在命名时的习惯了吗?我使用”表名_字段1名_字段2名”的方式。你很快就会知道我为什么这样做了。

现在你已经为适当的字段建立了索引,不过,还是有点不放心吧,你可能会问,数据库会真正用到这些索引吗?测试一下就OK,对于大多数的数据库来说,这是很容易的,只要使用EXPLAIN命令:

EXPLAIN

SELECT * FROM mytable
WHERE category_id=1 AND user_id=2;

This is what Postgres 7.1 returns (exactly as I expected)

NOTICE: QUERY PLAN:

Index Scan using mytable_categoryid_userid on
mytable (cost=0.00..2.02 rows=1 width=16)

EXPLAIN

以上是postgres的数据,可以看到该数据库在查询的时候使用了一个索引(一个好开始),而且它使用的是我创建的第二个索引。看到我上面命名的好处了吧,你马上知道它使用适当的索引了。

接着,来个稍微复杂一点的,如果有个ORDER BY字句呢?不管你信不信,大多数的数据库在使用order by的时候,都将会从索引中受益。

SELECT * FROM mytable
WHERE category_id=1 AND user_id=2
ORDER BY adddate DESC;

有点迷惑了吧?很简单,就象为where字句中的字段建立一个索引一样,也为ORDER BY的字句中的字段建立一个索引:

CREATE INDEX mytable_categoryid_userid_adddate
ON mytable (category_id,user_id,adddate);

注意: ”mytable_categoryid_userid_adddate” 将会被截短为

“mytable_categoryid_userid_addda”

CREATE

EXPLAIN SELECT * FROM mytable
WHERE category_id=1 AND user_id=2
ORDER BY adddate DESC;

NOTICE: QUERY PLAN:

Sort (cost=2.03..2.03 rows=1 width=16)
-> Index Scan using mytable_categoryid_userid_addda
on mytable (cost=0.00..2.02 rows=1 width=16)

EXPLAIN

看看EXPLAIN的输出,好象有点恐怖啊,数据库多做了一个我们没有要求的排序,这下知道性能如何受损了吧,看来我们对于数据库的自身运作是有点过于乐观了,那么,给数据库多一点提示吧。

为 了跳过排序这一步,我们并不需要其它另外的索引,只要将查询语句稍微改一下。这里用的是postgres,我们将给该数据库一个额外的提示–在 ORDER BY语句中,加入where语句中的字段。这只是一个技术上的处理,并不是必须的,因为实际上在另外两个字段上,并不会有任何的排序操作,不 过如果加入,postgres将会知道哪些是它应该做的。

EXPLAIN SELECT * FROM mytable
WHERE category_id=1 AND user_id=2
ORDER BY category_id DESC,user_id DESC,adddate DESC;

NOTICE: QUERY PLAN:

Index Scan Backward using
mytable_categoryid_userid_addda on mytable
(cost=0.00..2.02 rows=1 width=16)

EXPLAIN

现在使用我们料想的索引了,而且它还挺聪明,知道可以从索引后面开始读,从而避免了任何的排序。

以 上说得细了一点,不过如果你的数据库非常巨大,并且每日的页面请求达上百万算,我想你会获益良多的。不过,如果你要做更为复杂的查询呢,例如将多张表结合 起来查询,特别是where限制字句中的字段是来自不止一个表格时,应该怎样处理呢?我通常都尽量避免这种做法,因为这样数据库要将各个表中的东西都结合 起来,然后再排除那些不合适的行,搞不好开销会很大。

如果不能避免,你应该查看每张要结合起来的表,并且使用以上的策略来建立索引,然后再用EXPLAIN命令验证一下是否使用了你料想中的索引。如果是的话,就OK。不是的话,你可能要建立临时的表来将他们结合在一起,并且使用适当的索引。

要注意的是,建立太多的索引将会影响更新和插入的速度,因为它需要同样更新每个索引文件。对于一个经常需要更新和插入的表格,就没有必要为一个很少使用的where字句单独建立索引了,对于比较小的表,排序的开销不会很大,也没有必要建立另外的索引。

以 上介绍的只是一些十分基本的东西,其实里面的学问也不少,单凭EXPLAIN我们是不能判定该方法是否就是最优化的,每个数据库都有自己的一些优化器,虽 然可能还不太完善,但是它们都会在查询时对比过哪种方式较快,在某些情况下,建立索引的话也未必会快,例如索引放在一个不连续的存储空间时,这会增加读磁 盘的负担,因此,哪个是最优,应该通过实际的使用环境来检验。

在刚开始的时候,如果表不大,没有必要作索引,我的意见是在需要的时候才作索引,也可用一些命令来优化表,例如MySQL可用”OPTIMIZE TABLE”。

综上所述,在如何为数据库建立恰当的索引方面,你应该有一些基本的概念了。

mysql密码忘记的解决方法

mysql密码忘记的解决方法 ,经过测试,如果不能成功一般是你的mysql运行的不正常
解决办法:
在windows下:
复制代码 代码如下:
打开命令行窗口,停止mysql服务:
Net stop mysql
启动mysql,一般到mysql的安装路径,找到 mysqld-nt.exe
执行:mysqld-nt –skip-grant-tables 当前窗口将会停止。
另外打开一个命令行窗口,执行mysql 如果提示没有这个命令,先进入MYSQL的安装位置下BIN目录再运行mysql
>use mysql
>update user set password=password(“new_password”) where user=”root”;
>flush privileges;
>exit
用Ctrl+Alt+Del,找到mysqld-nt的进程杀掉它,在重新启动mysql-nt服务,就可以用新密码登录了
在linux下:
复制代码 代码如下:
如果 MySQL 正在运行,首先杀之: killall -TERM mysqld。
启动 MySQL :bin/safe_mysqld –skip-grant-tables &
就可以不需要密码就进入 MySQL 了。
然后就是
>use mysql
>update user set password=password(“new_pass”) where user=”root”;
>flush privileges;
重新杀 MySQL ,用正常方法启动

详细出处参考:http://www.jb51.net/article/10351.htm

下载页面:http://dev.mysql.com/downloads/mysql/5.0.html#downloads
到页面底部,找到Source downloads,这个是源码版本,下载第1个Tarball

groupadd mysql
新建一个名为mysql的用户组
useradd -g mysql mysql
在mysql用户组下新建一个名为mysql的用户
gunzip < mysql-VERSION.tar.gz | tar -xvf -
解压下载到的.gz文件
cd mysql-VERSION
进入解压后的目录
CFLAGS=”-O3 -mcpu=pentium4″ CXX=gcc CXXFLAGS=”-O3 -march=pentium4 -felide-constructors -fno-exceptions -fno-rtti” ./configure –prefix=/home/mysql/ –without-debug   –with-unix-socket-path=/home/mysql/tmp/mysql.sock –with-client-ldflags=-all-static –with-mysqld-ldflags=-all-static –enable-assembler –with-extra-charsets=gbk,gb2312,utf8 –without-innodb –without-isam –with-pthread –enable-thread-safe-client
配置mysql
gcc的相关参数:

-O3 \
-O
-O1
优化.对于大函数,优化编译占用稍微多的时间和相当大的内存.
不使用`-O’选项时,编译器的目标是减少编译的开销,使编译结果能够调试.语句是独立的:如果在 两条语句之间用断点中止程序,你可以对任何变量重新赋值,或者在函数体内把程序计数器指到其他语句,以及从源程序中 精确地获取你期待的结果.
不使用`-O’选项时,只有声明了register的变量才分配使用寄存器.编译结果比不用 `-O’选项的PCC要略逊一筹.
使用了`-O’选项,编译器会试图减少目标码的大小和执行时间.
如果指定了`-O’选项, `-fthread-jumps’和`-fdefer-pop’选项将被 打开.在有delay slot的机器上, `-fdelayed-branch’选项将被打开.在即使没有帧指针 (frame pointer)也支持调试的机器上, `-fomit-frame-pointer’选项将被打开.某些机器上 还可能会打开其他选项.
-O2
多优化一些.除了涉及空间和速度交换的优化选项,执行几乎所有的优化工作.例如不进行循环展开(loop unrolling)和函数内嵌(inlining).和-O选项比较,这个选项既增加了编译时间,也提高了生成代码的 运行效果.
-O3
优化的更多.除了打开-O2所做的一切,它还打开了-finline-functions选项.
-O0
不优化.
如果指定了多个-O选项,不管带不带数字,最后一个选项才是生效的选项。
-mcpu=pentium4 \根据CPU类型优化编译,可以让你的mysq表现更好!可选项目很多:i386, i486, i586, i686, pentium, pentium-mmx, pentiumpro, pentium2, pentium3, pentium4, k6, k6-2, k6-3, athlon, athlon-tbird, athlon-4, athlon-xp,athlon-mp,winchip-c6, winchip2 , c3.
-fomit-frame-pointer \对于不需要栈指针的函数就不在寄存器中保存指针,因此可以忽略存储和检索地址的代码,并将寄存器用于普通用途。所有”-O”级别都打开着一选项,但仅在调试器可以不依靠栈指针运行时才有效。建议不需要调试的情况下显式的设置它。

configure的相关参数:
–prefix=/home/mysql/  \指定安装目录
–without-debug \去除debug模式
–with-extra-charsets=gbk,gb2312,utf8  \添加gbk,gb2312,utf8中文字符支持
–with-pthread \强制使用pthread库(posix线程库)
–enable-assembler \使用一些字符函数的汇编版本
–enable-thread-safe-client \以线程方式编译客户端
–with-client-ldflags=-all-static \以纯静态方式编译客户端
–with-mysqld-ldflags=-all-static \以纯静态方式编译服务端
–without-isam \去掉isam表类型支持,现在很少用了,isam表是一种依赖平台的表
–without-innodb \去掉innodb表支持,innodb是一种支持事务处理的表,适合企业级应用

make
编译
make install
安装
cp support-files/my-medium.cnf /etc/my.cnf
将mysql的配置文件copy到/etc目录下,并更名为my.cnf

/home/mysql下面有5个my-xxxx.cnf文件
my-small.cnf             最小配置安装,内存<=64M,数据数量最少
my-large.cnf             内存=512M
my-medium.cnf          32M<内存<64M,或者内存有128M,但是数据库与web服务器公用内存
my-huge.cnf             1G<内存<2G,服务器主要运行mysql
my-innodb-heavy-4G.cnf 最大配置安装,内存至少4G

cd /home/mysql
进入安装目录
bin/mysql_install_db –user=mysql
以mysql用户的身份建立数据表
chown -R root   .
将mysql的主目录(即/home/mysql)
的属主设为root用户。这是官方文档上的命令,但奇怪的是,如果将mysql的主目录属主设成root用户,在运行了下面的bin/mysqld_safe –user=mysql &后则不能启动mysql。问题出在“权限”上,运行chown -R mysql .则可以用下面的命令正常启动mysql。难道官方文档有错?希望大家一起来探讨一下。
chown -R mysql var
将var目录的属主设为mysql用户
chgrp -R mysql .
将mysql的主目录的属主设为mysql用户组(注意:和前面的命令不一样,这个命令是对用户组进行赋权)
bin/mysqld_safe –user=mysql &
启动mysql,如果一切正常的话,运行此命令后,不会有任何提示。
bin/mysqladmin -u root password password
修改root用户的密码,这里的root用户指的是mysql的root用户,与Linux的root用户无关。绿色的password就是你需要设置的新密码,牢记!
bin/mysql -u root -p
如果正常的话,用这个名字可以登录,在输入密码后,出现mysql > 的提示符表明登录成功。用quit命令可退出

以下命令用于设置mysql开机自动运行
cd mysql-VERSION
再次进入解压后的目录,即源码目录。
cp support-files/mysql.server /etc/init.d/mysql
将mysql.server这个文件copy到/etc/init.d/目录下,并更名为mysql
chmod 755 /etc/init.d/mysql
给/etc/init.d/mysql这个文件赋予“执行”权限
chkconfig –level 345 mysql on
加入到开机自动运行,运行级别为3 4 5
service mysql restart
重启mysql服务

Q:为什么我用PHP连接Mysql时提示“connect fail:Can’t connect to local MySQL server through socket ‘/home/mysql/tmp/mysql.sock‘ (13)”
A:这是因为PHP没能正常的连接到Mysql套接字,即mysql.sock文件。首先,检查/home/mysql/tmp/目录下是否有mysql.sock这个文件。如果没有,可能是mysql没有正常启动;如果有,可能是/home/mysql/tmp/这个目录的权限不够,用chmod 755 /home/mysql/tmp可解决此问题。

———————————————————————————————–
Mysql的优化设置

打开/etc/my.cnf文件,修改以下设置,如果没有,可手动添加。调整设置时,请量力而行,这与你的服务器的配置有关,特别是内存大小。以下设置比较适合于1G内存的服务器,但并不绝对。

#指定索引缓冲区的大小,它决定索引处理的速度,尤其是索引读的速度。通过检查状态值Key_read_requests和Key_reads,可以知道key_buffer_size设置是否合理。比例key_reads / key_read_requests应该尽可能的低,至少是1:100,1:1000更好(上述状态值可以使用show status like ‘key_reads’获得)。key_buffer_size只对MyISAM表起作用。即使你不使用MyISAM表,但是内部的临时磁盘表是MyISAM表,也要使用该值。可以使用检查状态值created_tmp_disk_tables得知详情。
key_buffer = 384M

#要求MySQL能有的连接数量。当主要MySQL线程在一个很短时间内得到非常多的连接请求,这就起作用,然后主线程花些时间(尽管很短)检查连接并且启动一个新线程。back_log值指出在MySQL暂时停止回答新请求之前的短时间内多少个请求可以被存在堆栈中。只有如果期望在一个短时间内有很多连接,你需要增加它,换句话说,这值对到来的TCP/IP连接的侦听队列的大小。你的操作系统在这个队列大小上有它自己的限制。试图设定back_log高于你的操作系统的限制将是无效的。默认数值是50
back_log = 200

#一个包的最大尺寸。消息缓冲区被初始化为net_buffer_length字节,但是可在需要时增加到max_allowed_packet个字节。缺省地,该值太小必能捕捉大的(可能错误)包。如果你正在使用大的BLOB列,你必须增加该值。它应该象你想要使用的最大BLOB的那么大。
max_allowed_packet = 4M

#允许的同时客户的数量。增加该值增加 mysqld要求的文件描述符的数量。这个数字应该增加,否则,你将经常看到 Too many connections 错误。 默认数值是100
max_connections = 1024

#指定表高速缓存的大小。每当MySQL访问一个表时,如果在表缓冲区中还有空间,该表就被打开并放入其中,这样可以更快地访问表内容。通过检查峰值时间的状态值Open_tables和Opened_tables,可以决定是否需要增加table_cache的值。如果你发现open_tables等于table_cache,并且opened_tables在不断增长,那么你就需要增加table_cache的值了(上述状态值可以使用show status like ‘Open_tables’获得)。注意,不能盲目地把table_cache设置成很大的值。如果设置得太高,可能会造成文件描述符不足,从而造成性能不稳定或者连接失败。
table_cache = 512

#每个线程排序所需的缓冲
sort_buffer_size = 4M

#当一个查询不断地扫描某一个表,MySQL会为它分配一段内存缓冲区。read_buffer_size变量控制这一缓冲区的大小。如果你认为连续扫描进行得太慢,可以通过增加该变量值以及内存缓冲区大小提高其性能。
read_buffer_size = 4M

#加速排序操作后的读数据,提高读分类行的速度。如果正对远远大于可用内存的表执行GROUP BY或ORDER BY操作,应增加read_rnd_buffer_size的值以加速排序操作后面的行读取。仍然不明白这个选项的用处……
read_rnd_buffer_size = 8M

#用于REPAIR TABLE。不明白这个选项的用处,百度上找到的设置方向也是五花八门,有128M、64M、32M等,折中选一个。
myisam_sort_buffer_size = 64M

#可以复用的保存在中的线程的数量。如果有,新的线程从缓存中取得,当断开连接的时候如果有空间,客户的线置在缓存中。如果有很多新的线程,为了提高性能可以这个变量值。通过比较 Connections 和 Threads_created 状态的变量,可以看到这个变量的作用。
thread_cache_size = 128

#查询结果缓存。第一次执行某条SELECT语句的时候,服务器记住该查询的文本内容和它返回的结果。服务器下一次碰到这个语句的时候,它不会再次执行该语句。作为代替,它直接从查询缓存中的得到结果并把结果返回给客户端。
query_cache_size = 32M

#最大并发线程数,cpu数量*2
thread_concurrency = 2

#设置超时时间,能避免长连接
wait_timeout = 120

#关闭不需要的表类型,如果你需要,就不要加上这个
skip-innodb
skip-bdb

关于mysql的优化设置及检查,这篇文章很值得一看   http://tech.itdb.cn/n/200607/27/n20060727_30398.shtml
———————————————————————————————–
Mysql的安全设置

打开/etc/my.cnf文件,修改以下设置,如果没有,可手动添加。

#取消文件系统的外部锁
skip-locking

#不进行域名反解析,注意由此带来的权限/授权问题
skip-name-resolve

#禁止MySQL中用“LOAD DATA LOCAL INFILE”命令。这个命令会利用MySQL把本地文件读到数据库中,然后用户就可以非法获取敏感信息了。网络上流传的一些攻击方法中就有用它的,它也是很多新发现的SQL Injection攻击利用的手段!
local-infile = 0

#关闭远程连接,即3306端口。这是MySQL的默认监听端口。由于此处MySQL只服务于本地脚本,所以不需要远程连接。尽管MySQL内建的安全机制很严格,但监听一个TCP端口仍然是危险的行为,因为如果MySQL程序本身有问题,那么未授权的访问完全可以绕过MySQL的内建安全机制。(你必须确定,你是否真的不需要远程连接mysql)
skip-networking

修改完my.cnf后,还需要对mysql的用户名、帐号、及默认数据库进行调整
首先先登录mysql,在终端窗口输入  /home/mysql/bin/mysql -u root -p
然后会提示输入密码,输入正确密码后,会出现mysql>提示符。

输入以下命令:
mysql>use mysql;
mysql>update user set user=”centos” where user=”root”;    (将mysql的root用户名修改成centos,防止root的密码被暴力破解)
mysql>select Host,User,Password,Select_priv,Grant_priv from user;
mysql>delete from user where user=”;                (删除user用户)
mysql>delete from user where password=”;            
(删除user用户)
mysql>delete from user where host=”;                   (删除user用户)
mysql>drop database test;          (删除默认的test数据库)
mysql>flush privileges;             (刷新mysql的缓存,让以上设置立即生效)
mysql>quit;

为了使以上优化和安全设置生效,请重启Mysql服务或Linux。

关于Mysql的安全设置,这篇文章很值得一看
http://www.unixren.com/linux/bencandy.php?fid=21&id=459
———————————————————————————————–

phpMyAdmin 2.9.x的安装与配置

phpMyAdmin是一个用PHP编写的,可以通过互联网控制和操作MySQL数据库的软件。通过phpMyAdmin可以完全对数据库进行操作,例如建立、复制/删除数据等等。

下载地址: http://www.phpmyadmin.net
目前的最新版本是 2.9.1.1
使用phpMyAdmin的先决条件:Apache(或者是Zeus、IIS)、PHP、MySql必须已经安装好,并且能够正常运行。因为phpMyAdmin是用PHP程序编写的,所以,你必须确定你的PHP可以正常连接到MySql。

下面开始安装:

1、解压下载到的文件,会得到一个目录,如 phpMyAdmin-2.9.1.1-all-languages-utf-8-only

2、将这个目录移动到你的网站根目录下
mv ./phpMyAdmin-2.9.1.1-all-languages-utf-8-only /var/www/

3、为了安全起见,建议修改目录名,这样只有你自己知道phpMyAdmin的所在位置
mv /var/www/phpMyAdmin-2.9.1.1-all-languages-utf-8-only /var/www/MyphpAdmin

4、修改phpMyAdmin的配置文件
cd /var/www/MyphpAdmin
mv config.sample.inc.php config.inc.php
config.inc.php就是配置文件,需要将config.sample.inc.php更名过来,才能生效。
kate config.inc.php

以$cfg开头的选项都是可以修改的,根据你的实际情况,参与下面的文档来修改
$cfg['blowfish_secret'] = ‘http‘; /* cookie认证的加密算法,随便填一串字符即可 */
$cfg['Servers'][$i]['auth_type'] = ‘cookie‘; /* 登录时的认证方式。本机登录的设置成config,网络远程登录的需要设置成cookie */
$cfg['Servers'][$i]['host'] = ‘localhost‘; /* 主机名,可在终端下输入uname -n查看 */
$cfg['Servers'][$i]['connect_type'] = ‘socket‘; /* 使用tcp(Mysql在远程服务器上)或socket(Mysql在本机)方式来连接 */
$cfg['Servers'][$i]['compress'] = true; /* 启用压缩以提高速度,如果访问不正常请改回false(php的版本必须高于4.3.0) */
$cfg['Servers'][$i]['extension'] = ‘mysql‘; /* 设定phpMyAdmin所支持的数据库类型 */
$cfg['Servers'][$i]['controluser'] = ”; /* Mysql的root用户名,不要填写 */
$cfg['Servers'][$i]['controlpass'] = ”; /* Mysql的root用户密码,不要填写 */
$cfg['Servers'][$i]['pmadb'] = ‘phpmyadmin‘; /* 包含连接表结构的数据库名称。不用修改 */
$cfg['Servers'][$i]['bookmarktable'] = ‘pma_bookmark‘; /* 从 2.2.0 版本开始,phpMyAdmin 允许将经常使用的查询存储在书签中。不用修改 */
$cfg['Servers'][$i]['relation'] = ‘pma_relation‘; /* 从 2.2.4 版本开始,您可以定义一个关联表,它的字段是另一个表(外部表)的主键。不用修改 */
$cfg['Servers'][$i]['table_info'] = ‘pma_table_info‘; /* 不用修改 */
$cfg['Servers'][$i]['table_coords'] = ‘pma_table_coords‘; /* 不用修改 */
$cfg['Servers'][$i]['pdf_pages'] = ‘pma_pdf_pages‘; /* 不用修改 */
$cfg['Servers'][$i]['column_info'] = ‘pma_column_info‘; /* 不用修改 */
$cfg['Servers'][$i]['history'] = ‘pma_history‘; /* 不用修改 */
$cfg['UploadDir'] = ”; /* 不用修改 */
$cfg['SaveDir'] = ”; /* 不用修改 */

5、配置完毕后,就可以在浏览器里使用了。
http://192.168.0.1/MyphpAdmin/ (注意大小写要输入正确,否则会提示找不到页面)
如果安装没有问题的话,就会出现登录对话框,输入MySql的帐号和密码就可以登陆了。

如果在登陆时出现[size=-1]session_start(): Failed to initialize storage module.
请将php.ini文件中如下两句进行修改
session.save_handler = files
session.save_path = “/tmp”    (请确认/tmp目录的读写权限)
改成这样就行了,然后重启apache。

如果遇到 #2002 – 服务器没有响应 (or the local MySQL server’s socket is not correctly configured) 这类问题

我 google 了一下,发现很多人被这个问题困扰,大家解决方法的思路都是围绕 mysql.sock。实际上,通过修改 mysql.sock 路径解决问题的可能性很小。大部分这类问题是由于 mysql 做了 ip 绑定(bind-address = 127.0.0.1)造成的。这里只需要将 $cfg['Servers'][$i]['host'] = ‘localhost’ 改为 ’127.0.0.1′ 就可以了。或者改成localhost.localdomain,这样改的依据是

也许很多朋友还没有遇到这个问题。可惜我碰到了。后来一直寻找解决的办法。目前,终于可以正常使用了。在此把配置的过程整理出来给大家参考一下。有需要的话就拿去用。
只是有点长,四五页只写mysql+vsftpd的配置过程。大家慢慢看吧。也欢迎提出疑问,如果有不合理的话,也希望能给予纠正。谢谢。

在安装系统分区时,强烈建议使用手动分区,这样做的目的是为了便于处理quota的问题。这里给个分区的建议:
/boot  100M
Swap  1024M   //很多资料都建议说是物理内存的两倍,所以,这个值可以根据各自的物理内存大小来设置
/      10240M  //这个分区一定要比所安装软件大小总和还要大,要不然不能正常安装系统,
/home  剩下的空间 //把所有的用户资料或内容都放在/home下,这样做的有一个好处是,如果系统崩溃,那么只要动用到/分区却可。

Vsftpd是目前在linux系统环境下表现最为优越的安全,稳定,快速的性能,加上Vsftpd的可读性强、易配置,受到更为广泛的应用。
Vsftpd有三种实现的形式,分别为:
1、  匿名用户形式:在默认安装的情况下,系统只提供匿名用户访问;
2、  本地用户形式:以/etc/passwd中的用户名为认证方式;
3、  虚拟用户形式:支持将用户名和口令保存在数据库文件或数据库服务器中。

相对于FTP的本地用户形式来说,虚拟用户只是FTP服务器的专有用户,虚拟用户只能访问FTP服务器所提供的资源,这大大增强系统本身的安全性。相对于匿名用户而言,虚拟用户需要用户名和密码才能获取FTP服务器中的文件,增加了对用户和下载的可管理性。对于需要提供下载服务,但又不让所有人匿名下载;既需要对下载用户进行管理,又考虑到主机安全和管理方便的FTP站点来说,虚拟用户是一种极好的解决方案。

下面将针对第三种Vsftpd的实现形式进行作详细的配置记录。

[[i] 本帖最后由 ankey 于 2007-11-28 09:16 编辑 [/i]]

ankey 2007-11-28 01:11
一:下载安装
在root目录下建个software,这样是为了把所有需要用到的软件都统一放在这里,方便管理。
Vsftp官方下载点:[url]ftp://vsftpd.beasts.org/users/cevans/vsftpd-2.0.4.tar.gz[/url] 目前最新版本已为2.05。
下载pam-mysql:[url]http://nchc.dl.sourceforge.net/sourceforge/pam-mysql/pam_mysql-0.5.tar.gz[/url] 最新版本已为0.7。

A. 开始安装vsftpd
# rpm -e vsftpd-**  //卸载原来低版本的vsftp
# cd /root/software/
# tar -zvxf vsftpd-2.0.4.tar.gz
# cd vsftpd-2.0.4
# make
把编译好的文件安装到相应目录下即可,没有相关目录请先创建。
# cp vsftpd /usr/local/sbin/vsftpd
# cp vsftpd.conf.5 /usr/local/man/man5/
# cp vsftpd.8 /usr/local/man/man8/
# cp vsftpd.conf /etc/

B. 启动mysqld服务
Mysqld可以直接使用系统自带的,只要启动起来即可。如下:
# service mysqld start/stop/restart  //启动/停止/重启mysqld
# chkconfig mysqld on           //设置为系统服务,跟随系统自动启动。

C. 安装Pam-mysql
由于是基于mysql的pam认证的虚拟用户配置,所以需要安装pam-mysql,系统默认无些服务,系统安装包里也无此软件,需要另外下载就是上述下载的安装包。
# cd /root/software/
# tar –zvxf pam_mysql-0.5.tar.gz
# cd pam_mysql
# make
# cp pam_mysql.so /lib/security

 

ankey 2007-11-28 01:12
二:服务配置

1.Vsftpd配置
配置vsftpd.conf,增加对每个虚拟用户的配置,并对每个虚拟用户详细权限进行配置。
创建/etc/vsftpd_user_conf目录,并在其下分别为虚拟用户test,test1,test2增加test,test1,test2三个配置文件。
# mkdir /etc/vsftpd_user_conf
# cd /etc/vsftpd_user_conf
# touch test test1 test2
#test,test1,test2配置文件根据需要设置相关vsftp的权限,比如test用户可以下载上传,修改,test文件内容如下:
write_enable=YES
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
anon_world_readable_only=NO  //可以浏览和下载有相关权限的文件(其他用户有可读和可执行权限)
local_root=/home/virtual/test     //锁定在相应的目录下,以防越权访问

主配置文件vsftpd.conf内容如下:
listen=YES                     //打开端口监听21
anonymous_enable=NO     //关闭匿名用户权限
local_enable=YES        //一定要yes,否则ftp登入会提示,本地用户和匿名用户都没有访问权限的提示
write_enable=NO               
anon_upload_enable=NO
anon_mkdir_write_enable=NO
anon_other_write_enable=NO     //在主配置中关闭所有的读写改权限。
guest_enable=YES
guest_username=virtual        //这两行的意思是采用虚拟用户形式
virtual_use_local_privs=YES   //虚拟用户和本地用户权限相同

user_config_dir=/etc/vsftpd_user_conf  //增加对每个虚拟用户的配置

anon_world_readable_only=YES  //不可以浏览和下载有相关权限的文件(其他用户有可读和可执行权限)
connect_from_port_20=YES
hide_ids=YES
pasv_min_port=50000
pasv_max_port=60000
dirmessage_enable=YES
xferlog_enable=YES   
xferlog_file=/var/log/vsftpd.log
xferlog_std_format=YES
xferlog_enable=YES
ls_recurse_enable=NO
ascii_download_enable=NO
async_abor_enable=YES
ftpd_banner=Welcome to lanmang.com FTP service.
one_process_model=YES
idle_session_timeout=120
data_connection_timeout=300
accept_timeout=60
connect_timeout=60
anon_max_rate=50000
max_clients=200
max_per_ip=4
check_shell=NO

2.虚拟用户配置
A.创建真实用户与虚拟用户的映射
# useradd virtual
# passwd virtual     //提示输入密码时请输123456
#必要时使用 : useradd -d /home/ftpsite -s /sbin/nologin virtual

B.创建数据库
# mysql –u root –p
Mysql>create database ftpd;
Mysql> use ftpd;
Mysql> create table user(name char(20) binary,passwd char(20) binary);
Mysql> insert into user (name,passwd) values (‘test’,'password’);
Mysql> insert into user (name,passwd) values (‘test1′,’password1′);
Mysql> insert into user (name,passwd) values (‘test2′,’password2′);
Mysql> grant select on ftpd.user to virtual@localhost identified by ’123456′;
Mysql>quit

A. 建立认证文件
# cd /etc/pam.d/
# touch ftp   //如果有就不用生成了。
# vi ftp      //内容如下:
auth required /lib/security/pam_mysql.so user=virtual passwd=123456 host=localhost db=ftpd table=user usercolumn=name passwdcolumn=passwd crypt=0
account required /lib/security/pam_mysql.so user=virtual passwd=123456 host=localhost db=ftpd table=user usercolumn=name passwdcolumn=passwd crypt=0

# 注意:
#crypt=0: 明文密码
#crypt=1: 使用crpyt()函数(对应SQL数据里的encrypt(),encrypt()随机产生salt)
#crypt=2: 使用MYSQL中的password()函数加密
#crypt=3:表示使用md5的散列方式#上面是两句配置,第一句是以auth开始的,第二句以account开始的。

 

ankey 2007-11-28 01:13
三:启动/关闭vsftpd服务
# /usr/local/sbin/vsftpd &
# vi /etc/rc.d/rc.local           //修改系统启动文件,在最后加入/usr/local/sbin/vsftpd & 作为系统服务,将会随着系统而启动。
#注:关闭服务为:killall vsftpd
#查看是否启动成功请使用netstat –ntl查看21端口是否起来。

四:配额设置
对用户做磁盘限额,限额功能是系统自带,不是vsftp功能!
对virtual用户主目录:/home/ftpsite/限制,修改/etc/fstab文件,重新启动计算机
A.编辑/etc/fstab文件,重新启动计算机,使限额功能生效
     # vi /etc/fstab
    把
LABEL=/home   /home   ext3    defaults     1 2
修改为:
LABEL=/home   /home   ext3    defaults,usrquota,grpquota     1 2
# reboot
    启动完成后:
    # cd /home
        # quotacheck –avug
        # quotaon -a
B.限额配置文件的修改
# edquota virtual //为用户virtual设置磁盘配额
          系统会自动打开配额文件,如下:
          Disk quotas for user virtual (uid 502):
          Filesystem         blocks       soft       hard     inodes     soft     hard
           /dev/sda2           424          0          0         13        0        0
#注:
#第一列是启用了配额的文件系统的名称。第二列显示了用户当前使用的块数,单位为KB。随后的两列用来设置用户在该文件系统上的软硬块限度。
inodes 列显示了用户当前使用的i节点数量。最后两列用来设置用户在该文件系统上的软硬i节点限度.硬限是用户或组群可以使用的磁盘空间的 绝对最大值。达到了该限度后,磁盘空间就不能再被用户或组群使用了。软限定义可被使用的最大磁盘空间量。和硬限不同的是,软限可以在一段时期内被超过。这段时期被称为过渡期(grace period),默认七天的超越。过渡期可以用秒钟、分钟、小时、天数、周数、或月数表示。如果以上值中的任何一个被设置为 0,那个限度就不会被设置。
C.要校验用户的配额是否被设置,我们可以使用以下命令:
# quota virtual
用以下命令显示磁盘配额使用状态:# repquota  -a

 

ankey 2007-11-28 01:13
一篇完整的vsftpd+mysql配置文档暂告一段落。
下面写一下,新添加用户的方法。
# mysql -u root -h localhost –p
mysql> use ftpd;
mysql> insert into user (name,passwd) values (‘test’,'password’);
mysql> quit
# cd /etc/vsftpd_user_conf
# touch test
# vi test
write_enable=YES
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
anon_world_readable_only=NO
local_root=/home/virtual/test

# cd /home/virtual/
# mkdir test
# chown virtual:virtual test
chmod 700 test

CentOS Apache配置详解

要想在linux上实现网页服务器(www)需要Apache这个服务器软件,不过Apache仅能提供最基本的静态网站数据而已,想要实现动态网站的话,最好还是要PHP与MySQL的支持,所以下面我们将会以LAMP(linux+Apache+MySQL+PHP)作为安装与设置的介绍。

LAMP所需软件与其结构
httpd mysql mysql-Server php php-devel php-mysql
可以用rpm包安装,或者直接用yum安装
#yum install httpd mysql-server php php-devel php-mysql
先来了解一下apache 2.0这个版本的相关结构,这样才能知道如何处理我们的网页数据
/etc/httpd/conf/httpd.conf:最主要的配置文件,不过很多其他的distribution都将这个文件拆成数个小文件,分别管理不同的参数。但是最主要配置文件还是以这个文件名为主。
/etc/httpd/conf.d/*.conf:这个事CentOS的特色之一,如果你不想修改原始配置文件httpd.conf的话,那么可以将你自己的额外参数独立出来,而启动apache时,这个文件就会被读入到主要配置文件。
/usr/lib/httpd/modules:apache支持很多的模块,所以您想要使用的模块默认都放置在此目录
/var/www/html:这里是CentOS默认的“首页”所在目录。
/var/www/error:如果因为主机设置错误,或者是浏览器端要求的数据错误,在浏览器上出现的错误信息就已这个目录的默认信息为主。
/var/www/icons:提供apache的一些小图标
/var/www/cgi-bin :默认给一些可执行的CGI程序放置的目录
/var/log/httpd:默认apache的日志文件都放在这里,对于流量大的网站来说,这个目录要很小心,因为这个文件很容易变的很大,您需要足够的空间哦
/usr/sbin/apachectl:这是Apache的主要执行文件,这个执行文件其实是shell script,它可以主动检测系统上的一些设置值,好让您启动Apache时更简单
/usr/sbin/httpd:这是主要的apache的二进制文件
/usr/bin/htpasswd:当您想登陆某些网页时,需要输入账号与密码。那么Apache本身就提供一个最基本的密码保护方式。该密码的产生就是通过这个命令实现的

至于MySQL方面,您需要知道的几个重要目录与文件有以下几个:
/etc/my.cnf:这是Mysql的配置文件,包括您想要进行mysql数据库的最佳化,或者是正对mysql进行一些额外的参数指定,都可以在这个文件里实现
/usr/lib/mysql:这个目录是MySQL数据库放置的位置,当启动任何MySQL的服务器时,请务必记得在备份时,将此目录完整的备份下来。

另外,在PHP方面,应该了解以下几个文件。
/usr/lib/httpd/modules/libphp4.so:PHP提供给apache使用的模块,这个关系我们能否在apache网页上面设计php程序语言的最重要文件
/etc/httpd/conf.d/php.conf:你要不要手动将该模块写入Httpd.conf中呢?不需要,因为系统已经主动将php设置参数写入到这个文件中了,而这个文件会在apache重新启动时被读入。
/etc/php.ini:这是PHP的主要配置文件,包括PHP能不能允许用户上传文件,能不能允许某些低安全性的标志等,都在这个配置文件中设置。
/etc/php.d/mysql.ini /usr/lib/php4/mysql.so:PHP能否可以支持MySQL接口就看这两个文件了。这两个文件是由php-mysql软件提供的
/usr/bin/phpize /usr/include/php:如果您以后想要安装类似PHP加速器可以让浏览速度加快的话,那么这个文件与目录就需要存在,否则加速器软件没法用。

httpd.conf的基本设置
首先,你需要在/etc/hosts内需要有个一个完整的主机名,否则在重启apache服务时,会提示找不到完整的主机名。
httpd.conf的基本设置是这样的:
<设置项目>
      次设置项目内的相关参数
      。。。。
</设置项目>
例如,你想要针对首页/var/www/html提供额外的功能,那么可以进行如下设置:
<Directory “/var/www/html”>
   Options Indexes
   ……
</Directory>

针对主机环境的设置项目
#vi /etc/httpd/conf/httpd.conf
ServerTokens OS
# 这个项目在告诉客户端WWW服务器的版本和操作系统,不需要改编它
#如果你不想告诉太多的主机信息,将这个项目的OS改成Minor

ServerRoot “/etc/httpd”
#这个是设置文件的最顶层目录,通常使用绝对路径,下面某些数据设置使用相对路径时
#就是与这个目录设置值有关的下层目录,不需要更改它
ServerRoot
设定Apache 安装的绝对路径
TimeOut
设定 服务器接收至完成的最长等待时间
KeepAlive
设定服务器是否开启连续请求功能,真实服务器一般都要开启
Port
设定http服务的默认端口。
User/Group
设定 服务器程序的执行者与属组,这个一般是apache

下面我们就针对Apache做几个实验
1:我们测试把默认网站目录改到root家目录下
新建/root/website目录
#mkdir -p /root/website
#echo “website page” >> /root/website/index.html
#vi /etc/httpd/conf/httpd.conf
找到 DocumentRoot “/var/www/html” 这一段   //apache的根目录
把/var/www/html 这个目录改到 /root/website
在找到 <Directory “/var/www/html”> //定义apache /var/www/html这个区域
把 /var/www/html改成/root/website
这样我们就把apahce的默认路径改掉了
然后重启服务
#service httpd restart  
//这里在你重启服务的时候,可能会报错,说找不到目录,这个主要是由于selinux导致的
那怎么解决呢?有2个办法,关掉selinux  
#setenforce 0
或者更改/root/website这个文件的selinux属性,让它匹配httpd这个服务器的要求
怎么改?我们可以复制/var/www/html这个目录的selinux属性
#chcon -R –reference /var/www/html /root/website
然后在重启服务,之后你就看到它没有报错了
不过你去访问localhost的时候,会发现访问拒绝 这是为什么呢?主要是因为你的/root的权限是750,ahache这个用户没有权限访问,你需要更改掉权限,可以这样改
#chmod -R 755 /root
然后去访问 发现正常了

2:基于名称的虚拟主机
需要两个域名解析到你的服务器,对应关系是
/var/www/server             server.example.com
/var/www/client                client.example.com
当访问这两个域名时,可以分别显示出不同文件里面主页的内容
#echo “server page” >> /var/www/server/index.html
#echo “client page” >> /var/www/client/index.html
然后我们编辑一个配置文件
#vi /etc/httpd/conf.d/virtual.conf //记住conf.d里面的内容也是apache的配置文件
添加如下内容:
NameVirtualHost 192.168.76.133:80

<VirtualHost 192.168.76.133:80>
ServerName service.example.com
DocumentRoot /var/www/server
</VirtualHost>

<VirtualHost 192.168.76.133:80>
ServerName client.example.com
DocumentRoot /var/www/client
</VirtualHost>
#service httpd restart
这样基于名称的虚拟主机就配置好了
如果你没有DNS你可以再你的机器上hosts文件里加记录 linux在/etc/hosts这个文件 windows在C:\windows\system32\drivers\etc\hosts文件
加上这两行
192.168.76.133    server.example.com
192.168.76.133    client.example.com
这样你在去测试,就会发现访问不同的域名显示不同的内容了 这样基于名称的虚拟主机就配置好了!

3:基于IP地址的虚拟主机
先添加一个临时网卡
#ifconfig eth0:0 192.168.76.132 //临时使用,重启后就会消失
然后便捷virtual.conf文件
#vi /etc/httpd/conf.d/virtual.conf
把内容修改为
#NameVirtualHost 192.168.76.133:80

<VirtualHost 192.168.76.133:80>
ServerName service.example.com
DocumentRoot /var/www/server
</VirtualHost>

<VirtualHost 192.168.76.132:80>
ServerName client.example.com
DocumentRoot /var/www/client
</VirtualHost>
让后你在用ip访问,发现也能显示不同的内容,或者你编辑hosts文件,用域名访问也没问题
这样基于IP地址的虚拟主机也成功了!

4:别名
在/etc/httpd/conf/httpd.conf里加入
Alias /test “/root/website/”    // 别名 这样你用192.168.76.133/test访问 也会显示192.168.76.133的页面
这个地方需要注意的就是/test 还是/test/ 这个是用区别的 你用/test 那么你访问的时候只能用192.168.76.133/test访问   如果你用/test/ 那么192.168.76.133/test/访问,而/test将不会放你访问
忘了这里你的先把/etc/httpd/conf.d目录里面刚刚设置的虚拟目录注释掉 不然没法访问,是因为做了虚拟目录,而httpd.conf里面的设置就无法访问 当然可以用localhost来访问,其他的访问都不行

5:实现网页的资源下载
首先添加别名
#vi /etc/httpd/conf/httpd.conf
在Alias /test “/root/website/” 后面加入
Alias /down “/var/ftp/pub”
让后对/var/ftp/pub区域设置参数
<Directory “/var/ftp/pub”>
    Options Indexes MultiViews
    AllowOverride None
    Order allow,deny
    Allow from all
</Directory>
在Options 加入 MultiViews   //没有index时自动列出目录文档
然后重启服务,这样http://192.168.76.133/down/里面就可以列出/var/ftp/pub里面的文件了,试着点一个另存为,是否可以下载? 呵呵 成功!

6:.htpasswd的实现
#vi /etc/httpd/conf/httpd.conf
我们针对刚刚做的/var/ftp/pub来做
加入如下信息
Alias /down “/var/ftp/pub/”
<Directory “/var/ftp/pub”>
    Options Indexes MultiViews
    AllowOverride AuthConfig
    Order allow,deny
    Allow from all
</Directory>
<Directory “/var/ftp/pub”>
AuthType Basic
AuthName “this is test”
AuthUserFile /etc/httpd/htpasswd
Require User test
</Directory>
然后重启httpd服务,
让后生成.htpasswd用户密码
htpasswd -c /etc/httpd/htpasswd test
让后去访问192.168.76.133/down会需要密码
这样就成功了

Powered by WordPress | Theme: Motion by 85ideas.