CentOS 操作系统是商业版Red Hat Enterprise Linux(RHEL)的免费版,是架构 LAMP 的理想操作系统,稳定性非常好,它主要用于服务器而不是桌面环境。CentOS 的安装应该比较轻松,因为可以进行语言选择,英文不好的就中文吧,下面主要介绍几个需要注意的步骤。

此文从网上转载而来,根据实际使用情况已经做过无数次修订。

一、CentOS 5.5 操作系统安装

1. 硬盘分区

在硬盘分区步骤中,我们有三个选项:删除硬盘所有分区、删除Linux分区、自定义安装。我们推荐使用 LVM+自定义分区大小 的方式进行来硬盘分区, 勾选“检验和修改分区方案”,进入下一步。系统已经构建了 LVM ,只要在这一步骤中调整分区大小就可以了,当然可以根据实际情况来进行划分,推荐的分区方案)

2. 网络配置

配置网卡IP, 网关以及DNS等,确保网络畅通。

注:请在配置时留意网卡编号,因为一般服务器都配有多块网卡。

3. 安装模式的选择

将系统默认的勾选掉,采取最小化方式安装。当然你可以选择 Server 或其他模式。Server模式系统一般会帮你安装好Apache, MySQL等等软件,但是我们还需要更新版本。

4. 检查错误信息

安装结束后,我们进行一下检查工作,检查有无系统级错误信息

shell> more /var/log/messages  # 检查硬件配置是否有错误信息
 
shell> dmesg  # 检查网卡设置是否正确
 
shell> ifconfig  # 检查网络是否正常
 
shell> ping

5. 配置系统默认的启动服务

setup 是 RedHat 系列里面内置的一个图形化配置工具,在里面可以进行一些系统设置,如网络配置,防火墙配置以及系统启动服务配置等。

(1) 配置系统服务

shell> setup

系统安装后默认会加载一些服务,有些服务并是我们不需要的,这里我们只勾选以下服务: anacron,crond,cpuspeed,iptables,irqbalance,messagebus,microcode_ctl,network,rawdevices,readahead_early,readahead_later,smartd,sshd,syslog,vsftpd,xinetd,yum-updatesd。如果需要以后还可以通过 chkconfig 指令添加。

(2) 配置防火墙

在 Firewall Configuration 选项中,进行防火墙配置,首先启动防火墙,关闭 SELINUX,然后放开HTTP80, SSH22, FTP21 等常用端口。

SELINUX 的禁用需要重新启动才能生效。

(3) 配置 SSH 服务

shell> vi /etc/ssh/sshd_config
PermitRootLogin no  # 禁止root登录,根据实际情况配置
Protocol 2  # 仅使用SSH2协议
ServerKeyBits 1024  # 使用1024bit加密
PermitEmptyPasswords no  # 禁止空密码

# 启动SSH服务,或者使用 service sshd start

shell> /etc/init.d/sshd start

SSH远程连接中文乱码的解决:

修改 /etc/sysconfig/i18n

  LANG="en_US.UTF-8"
  LANGUAGE="zh_CN.GB18030:zh_CN.GB2312:zh_CN"
  SUPPORTED="zh_CN.UTF-8:zh_CN:zh:en_US.UTF-8:en_US:en"
  SYSFONT="latarcyrheb-sun16"

LANGUAGE这一行可以不要,是用来指定应用程序所用的字符集的,服务器一般都不用桌面,这个事实上是没必要的 关键在第三行,指定支持中文字符集

关于中文乱码的补充(2012/06/01)

系统安装的时候最好是选择中文语言支持,如果没有,那么

yum install fonts-chinese
yum install fonts-ISO8859-2
fc-cache -fv

参考几篇文章,好好领会一下字符集:

http://www.cnblogs.com/xiaochaohuashengmi/archive/2011/10/12/2209532.html

http://blog.hackroad.com/read.php/514.htm

http://space.itpub.net/8102208/viewspace-626646

6. 修改时区 配置时间同步

http://www.crsay.com/network/centos-ntp-time-sync.html

7. 配置 yum 源

(1) 配置网易镜像网站的yum源。(注:这步是非必须的,只是视地域情况而定,选择较快的源)

# 获取网易Centos5源配置文件

shell> cd /etc/yum.repos.d
shell> mv CentOS-Base.repo  CentOS-Base.repo.bak
shell> wget http://mirrors.163.com/.help/CentOS5-Base-163.repo
shell> mv CentOS5-Base-163.repo CentOS-Base.repo

# 生成缓存

yum makecache

两个备选的源

搜狐源:山东联通 http://mirrors.sohu.com/help/centos.html
网易源:杭州电信 http://mirrors.163.com/.help/centos.html

访问这两个页面,找到repo地址,下载回来,然后运行yum makecache生成缓存

(2) 定义非官方yum库

有时官方提供的软件是当前的稳定版本,而不是最新版本,因此我们需要一些非官方yum源,如下面我们定义一个非官方yum库用来更新 PHP版本至5.2.14。

shell> rpm --import http://www.jasonlitka.com/media/RPM-GPG-KEY-jlitka
shell> vi /etc/yum.repos.d/utterramblings.repo

内容为:

[utterramblings]
name=Jason's Utter Ramblings Repo
baseurl=http://www.jasonlitka.com/media/EL$releasever/$basearch/
enabled=1
gpgcheck=1
gpgkey=http://www.jasonlitka.com/media/RPM-GPG-KEY-jlitka

(3) 关闭yum fastestmirror 功能

shell> vi /etc/yum/pluginconf.d/fastestmirror.conf
enabled=0

(4) 更新系统软件库

shell>yum update

# 安装后通过以下指令查看当前系统已安装包版本信息

shell> yum list installed | grep mysql
shell> rpm -qa | grep mysql

8. 准备工作

操作系统已经安装好了,我们就来进行一些准备工作,譬如创建网站目录,日志目录等。然后安装服务器的相关软件。

(1) 创建网站目录和日志目录

shell> mkdir -p /www/mysql  # MySQL数据库文件
shell> mkdir -p /www/htdocs  # 网站主目录
shell> mkdir -p /var/log/php  # PHP日志目录
shell> mkdir -p /var/log/mysql  # MySQL日志目录

(2) 改变MySQL属主和用户组

shell> chown -R mysql:mysql /www/mysql
shell> chown -R mysql:mysql /var/log/mysql

(3) 改变网站目录属主和用户组

shell> chown -R www:www /www/htdocs
shell> chown -R www:www /var/log/php

注:如果 mysql 等用户不存在,则需要事先通过 useradd 指令创建。这里我们创建的 www 用户和用户组,用于 Apache/Nginx 守护进程。

shell> useradd -s /sbin/nologin -M mysql
shell> useradd -s /sbin/nologin -M www

二、服务器软件的安装与配置

1. yum 安装 Apache + PHP + MySQL

yum -y install gcc gcc-c++ autoconf make aclocal libtool expat-devel libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel  glibc glibc-devel httpd httpd-devel php php-devel mysql mysql-server mysql-devel libevent libevent-devel ImageMagick ImageMagick-devel php-mysql mod_ssl mod_perl mod_auth_mysql php-mcrypt php-gd php-xml php-mcrypt php-mbstring php-ldap php-pear php-xmlrpc php-pecl-memcache mysql-connector-odbc libdbi-dbd-mysql
yum -y install bzip2 bzip2-devel ncurses ncurses-devel libxml2 libxml2-devel  zlib zlib-devel glib2 glib2-devel  curl curl-devel e2fsprogs e2fsprogs-devel krb5 krb5-devel libidn libidn-devel openssl openssl-devel openldap openldap-devel nss_ldap openldap-clients openldap-servers ntp rar

在安装过程中,我们看到使用了上述我们的非官方源进行更新,通过这种方式安装的软件版本分别为:Apache 2.2.15 , MySQL 5.1.50 , PHP 5.2.14(截止到2010-09-16)。如果不是请检查 utterramblings.repo 源的配置是否正确。

2. MySQL启动与基本配置

系统已经默认安装好了 MySQL 数据库,我们来稍作配置后然后启动它,因为初次启动会安装数据库文件,所以要对my.cnf里的配置进行一些修改,尤其是数据库文件存放位置。

# 复制一个样本,/usr/share/mysql 目录下有好多样本,请自主选择

shell> cp /usr/share/mysql/my-medium.cnf /etc/my.cnf

修改配置文件,我们稍作修改

# 注:是在原有my.cnf基础上进行修改,没有的选项添加


  shell> vi /etc/my.cnf  

  [client]
  port = 3306
  socket = /var/lib/mysql/mysql.sock
  default-character-set = utf8
  [mysqld]
  user = mysql
  datadir = /www/mysql
  log-error = /var/log/mysql/mysql_error.log
  log-bin=/var/log/mysql/mysql-bin
  character-set-server = utf8

启动 MySQL,或者使用 service mysqld start ,系统会提示安装数据库,然后启动成功。否则请查看由 log-error 配置项定义的错误信息。

shell> /etc/init.d/mysqld start

MySQL 初始安装启动后是可以用匿名空密码登陆的,我们需要删除匿名用户,更改root账户密码


  shell> mysql
  mysql> UPDATE mysql.user SET password = PASSWORD('mypassword') WHERE user = 'root';
  mysql> DELETE FROM mysql.user WHERE user = '';
  mysql> FLUSH PRIVILEGES;

# 查看MySQL 支持插件情况 注:这种方式安装的MySQL 默认支持 InnoDB, 查看该值后面是否为 YES

mysql> SHOW VARIABLES LIKE '%have%';

# 查看MySQL 字符集,应该都是 utf8

mysql> SHOW VARIABLES LIKE '%char%';

Mysql的配置文件根据不同的配置要细细琢磨,认真配置

官方的性能检测脚本: http://www.day32.com/MySQL/

3. Apache配置与启动

终于进入到Web服务器环节了,现在对 Apache 的配置文件稍作修改,检查 Apache和PHP 是否可以正常运行。

# 备份一下,以防杯具发生。。。

shell> cp /etc/httpd/conf/httpd.conf /etc/httpd/conf/httpd.conf.bak
shell> vi /etc/httpd/conf/httpd.conf
  ServerTokens OS  # 设为 Prod 出现错误页时不显示操作系统名称
  ServerSignature Off  # 设为 Off 错误页中不显示Apache版本
  ServerAdmin root@localhost  # 将管理员邮箱设置为自己常用的邮箱 
  ServerName www.example.com:80  # 根据实际情况修改,端口号为80
  DocumentRoot "/www/htdocs"  # 修改为默认网站主目录

# 启动Apache服务,或使用 service httpd start, 检查是否正常运行

shell>/etc/init.d/httpd start

4. PHP 的运行检查

PHP5.1以上版本记得修改时区设置,不然时间老是要手动+8,如果webserve是Nginx有时还会导致502错误。

设置php.ini,在php.ini中找到data.timezone= 去掉它前面的;号,然后设置为:

data.timezone="asia/shanghai";

检查PHP的运行状况

shell> vi /www/htdocs/phpinfo.php

输入以下内容:

<?php
phpinfo();
?>

浏览器访问phpinfo.php的url地址,出现PHP信息页面,这说明我们的 Apache 和 PHP 都可以运行正常。

5. 添加 Apache与 MySQL 服务为开机自启动

shell> chkconfig httpd on
shell> chkconfig mysqld on

6. 修改 PHP 配置文件并安装 Zend Optimizer 扩展

shell> vi /etc/php.ini

  short_open_tag = On
  output_buffering = 4096
  max_execution_time = 600 
  post_max_size = 32M
  allow_url_fopen = On
  open_basedir = /www/htdocs/
  upload_max_filesize = 32M
  log_errors = On
  error_reporting = E_ALL & ~E_NOTICE | E_STRICT
  display_errors = Off
  error_log = /var/log/php/php_error.log
  magic_quotes_gpc = Off

下载相应 Zend Optimizer 扩展,分别对应32位和64位:

shell> wget http://cracada.googlecode.com/files/ZendOptimizer-3.3.9-linux-glibc23-i386.tar.gz
shell> wget http://cracada.googlecode.com/files/ZendOptimizer-3.3.9-linux-glibc23-x86_64.tar.gz
shell> tar xvzf ZendOptimizer-3.3.9-linux-glibc23-i386.tar.gz

# 注:如果是64位操作系统,则路径为:/usr/lib64/php/modules

shell> cp ZendOptimizer-3.3.9-linux-glibc23-i386/data/5_2_x_comp/ZendOptimizer.so /usr/lib/php/modules/ZendOptimizer.so

修改php.ini 在其中加上,这种方式不需要更改extension_dir

shell> vi /etc/php.ini
extension = ZendOptimizer.so

我更喜欢用下面这种方法

[Zend]
zend_extension="/usr/lib/php/modules/ZendOptimizer.so"
zend_optimizer.enable_loader = 1
zend_optimizer.optimization_level=0
zend_optimizer.disable_licensing=0  

重启 Apache 后生效。

7. 修改 PHP 配置文件并安装 eAccelerator 扩展

首先下载eAccelerator,官网好像下载不了了,提供一个备用地址:

wget http://cracada.googlecode.com/files/eaccelerator-0.9.6.1.tar.bz2

开始安装

tar jxvf eaccelerator-0.9.6.1.tar.bz2 &&cd eaccelerator-0.9.6.1/
/usr/local/php/bin/phpize
./configure --enable-eaccelerator=shared --with-php-config=/usr/local/php/bin/php-config
make && make install&& cd ../

修改PHP.INI

shell> vi /etc/php.ini
[eaccelerator]
zend_extension="/usr/lib/php/modules/eaccelerator.so"
eaccelerator.shm_size="16"
eaccelerator.cache_dir="/tmp/eaccelerator"
eaccelerator.enable="1"
eaccelerator.optimizer="1"
eaccelerator.check_mtime="1"
eaccelerator.debug="0"
eaccelerator.filter=""
eaccelerator.shm_max="0"
eaccelerator.shm_ttl="3600"
eaccelerator.shm_prune_period="3600"
eaccelerator.shm_only="0"
eaccelerator.compress="1"
eaccelerator.compress_level="9"

注意把这段添加到上一节提到的[Zend]的前面

三、配置SSI与日志轮询

配置Apache服务器端包含

编辑 Apache 的配置文件:

shell> vi /etc/httpd/conf/httpd.conf

查看是否包含以下两行,并且去掉行前注释:

  AddType text/html .shtml
  AddOutputFilter INCLUDES .shtml

找到 Options Indexes FollowSymLinks 此行,修改成:

Options Indexes FollowSymLinks Includes

配置Apache日志轮询

Linux下运行的Web服务器Apache,默认日志文件是不分割的,一个整文件既不易于管理,也不易于分析统计。安装cronolog后,可以将日志文件按时间分割,易于管理和分析。

后期可以使用Awstats进行分析,参见Awstats分析Apache/IIS的日志安装配置

开启自定义.htaccess支持

默认情况下,apache已经开启Rewrite支持,我们还需要打开支持自定义.htaccess。

vim /etc/httpd/conf/httpd.conf

找到

<Directory />
Options FollowSymLinks
AllowOverride All
</Directory>

将AllowOverride None修改为AllowOverride All

四、安装 程序

1. 配置 Apache 虚拟主机

shell> mkdir -p /www/htdocs/crsay.com
shell> mkdir -p /etc/httpd/conf/vhosts
shell> vi /etc/httpd/conf/httpd.conf

找到 # NameVirtualHost *:80,去掉此行注释,然后添加包含vhosts的conf(当然也可以直接写在httpd.conf,不过分离出来便于管理和识别)

NameVirtualHost *:80
Include vhosts/*.conf

然后在文件最后添加我们虚拟主机 www.crsay.com 的配置信息:

shell> vi /etc/httpd/conf/vhosts/crsay.com.conf
<VirtualHost *:80>
ServerAdmin cracada@gmail.com
DocumentRoot /www/htdocs/crsay.com
ServerName crsay.com
ServerAlias www.crsay.com
ErrorLog "|/usr/local/sbin/cronolog /www/log/apache/crsay.com_error_log.%Y%m%d"
CustomLog "|/usr/local/sbin/cronolog /www/log/apache/crsay.com_access_log.%Y%m%d" combined
#Alias /vdir "/www/htdocs/www.crsay.com/truedir"
#ScriptAlias /cgi-bin/ "/www/htdocs/crsay.com/truecgidir"
 
#<Directory "/www/htdocs/crsay.com/truecgidir">
#    Options Indexes
#    AllowOverride AuthConfig
#    Order allow,deny
#    Allow from all
#</Directory>
</VirtualHost>

上面配置文件有一部分是不需要,是用来配置域名别名,虚拟目录等作用的

重新启动 Apache 服务。可以向/www/htdocs/crsay.com目录丢个文件,测试下虚拟主机是否工作正常。

2. 上传网站程序文件

上传至安装目录/www/htdocs/crsay.com目录下,然后我们更改一下网站目录的属主和属组。

shell> chown -R www:www /www/htdocs/crsay.com

3. 打开浏览器运行

http://www.crsay.com

4. 创建 MySQL 数据库

shell> mysql -uroot -p

mysql> create database demo;  # 创建 demo 数据库( 注:为什么没指定字符集,因为我们已经在配置文件默认设置设置为 utf8 了)
mysql> GRANT ALL PRIVILEGES ON demo.* TO 'demo'@'localhost' IDENTIFIED BY 'mydatabase';  # 创建 demo 数据库的账户
mysql> FLUSH PRIVILEGES;

五、其他常用服务的定制

1、Logwatch配置

如果系统有安装可用的Sendmail可以用默认的sendmail,如果没有的话也可以配置msmtp用来为logwatch发送邮件:

参见: CentOS下使用MUTT发送邮件

2、phpMyAdmin安装配置

访问 http://www.phpmyadmin.net/home_page/downloads.php下载phpMyAdmin

解压缩,上传到web目录,在pma目录下建立config文件夹,设置权限为777

然后浏览器中运行pma/setup/创建新的主机

保存,下载配置文件,将该文件上传到pma目录,权限644,删除或更名config文件夹即可。

3、Pureftpd安装配置

参见:

PureFTPD源码编译安装与配置

PureFTPD源码编译安装与MYSQL支持

六、服务器安全及优化配置

1. Apache 和PHP 安全配置

(1) 禁止解析PHP

这种方法适合新部署的服务器,具体作法是在 httpd.conf 中不加载 PHP 解析,而把 AddType 配置项放到虚拟主机配置文件中。例如:

shell> vi /etc/httpd/conf.d/php.conf # 取消默认PHP解析,即注释 AddType 相关项

这样在需要加载 PHP 解析虚拟主机配置中加入:

  AddHandler php5-script .php
  AddType text/html .php

已经使用的服务器怎么办呢,依然可以使用以下方法禁止虚拟主机执行动态 PHP 。

在Apache虚拟主机配置文件中Directory部分添加:

     php_flag engine off

(2) 禁用 PHP 的敏感函数:

很多木马程序和服务器攻击都是利用PHP内置的敏感函数,因此需要在配置文件中禁用这些敏感函数,以下列出一些函数,可以根据实际情况配置:

  disable_functions =shell_exec,passthru,popen,system

(3) 限定 PHP 脚本的操作路径,在虚拟主机配置中加入以下片段:

php_admin_value open_basedir "/www/htdocs/demo:/tmp"
注:/tmp为系统临时文件存放路径,如果不带这个,可能会导致上传操作不能进行,如果你修改了PHP上传的临时存放目录,需要在这里做相应修改。

2. MySQL的安全配置

(1) 数据目录和数据文件的安全性

设置MySQL数据目录为700,即只有启动数据库的用户可以读写数据库文件,保证了本地数据文件的安全。

shell> chmod 700 /www/mysql

设置MySQL日志目录为770,即只有数据库用户和组成员可以查看

shell> chmod 770 /var/log/mysql

(2) 本地日志文件安全性

有些用户在本地登陆或备份数据库的时候为了图方便,有时会在命令行参数里直接带了数据库的密码,如:

shell> mysql -uroot –ptest
shell> mysqldump -uroot -ptest test > test.sql

这些命令会被shell记录在历史文件里,比如bash会写入用户目录的 .bash_history 文件,如果这些文件不慎被读,那么数据库的密码就会泄漏。所以我们在shell登陆及备份的时候不要在-p后直接加密码,而是在提示后再输入数据库密码。 另外用户本地登陆数据库后执行的 SQL 命令也会被 MySQL 记录在用户目录的 .mysql_history 文件里。如果数据库用户用SQL语句修改了数据库密码,也会因 .mysql_history 文件而泄漏。所以必要时我们可以这样做:

shell> rm ~/.bash_history ~/.mysql_history
shell> ln -s /dev/null ~/.bash_history
shell> ln -s /dev/null ~/.mysql_history

建议执行,非常必要!

3. Apache 的优化配置

(1) prefork 参数调整

通过 httpd –l 指令,我们可以查看 Apache 运行模式为 prefork ,所以我们可以修改其最大连接数来响应更多的用户,当然配置选项需要根据你服务器的是情况来考虑:

     StartServers       8
     MinSpareServers    5
     MaxSpareServers   20
     ServerLimit      256
     MaxClients       256
     MaxRequestsPerChild  4000

进程数的硬性限制由 MaxClients 指定。尽管一个进程能够处理许多相继的请求,Apache 还是会取消连接数超过 4,000 以后的进程,这降低了内存泄漏的风险。

如果 MaxClients 过高,那么所有客户机都将体验到糟糕的服务,因为 Web 服务器会试图换出一个进程,以使另一个进程能够运行。而设得过低意味着可能会不必要地拒绝服务。

如果 MaxClients 的值超过 256,必须将 ServerLimit 也设为同样的数值。

(2) 开启gzip压缩

gzip功能可以在消耗一点点CPU使用率的情况下,大幅减少网页在传输过程中的带宽,因为我们是通过yum安装,所以会自动开启,你可以通过检查httpd.conf配置文件,确认是否加载:

LoadModule deflate_module modules/mod_deflate.so

接下来我们来配置一下gzip,找到httpd.conf中的mod_deflate.c部分,如果没有请自行添加,从而实现对一般网页中会用到的html、xml、php、css、js等格式进行压缩传输:

  DeflateCompressionLevel 6
  AddOutputFilterByType DEFLATE text/html text/plain text/xml application/x-httpd-php
  AddOutputFilter DEFLATE js css

DeflateCompressionLevel是压缩等级,范围为1-9,压缩级别越高对服务器的压力越大,可以根据实际情况调整这个平衡系数。

重启Apache后生效。

(3) 设置Apache的Expires功能

Expires 模块允许Apache通过配置文件控制HTTP的"Expires"和"Cache-Control"头内容,这些HTTP头向客户端表明了文档的有效性和持久性。如果有缓存,文档就可以从缓存(除非已经过期)而不是从服务器读取。接着,客户端考察缓存中的副本,看看是否过期或者失效,以决定是否必须从服务器获得更新。我们通过yum安装默认会开启,通过检查httpd.conf配置文件,确认是否加载:

LoadModule expires_module modules/mod_expires.so

接下来我们对expires模块进行一下配置,找到mod_deflate.c部分,如果不存在请自行添加:


        ExpiresActive On
        ExpiresByType image/gif A2592000
        ExpiresByType image/jpeg A2592000
        ExpiresByType image/png A2592000
        ExpiresByType image/x-icon A2592000
        ExpiresByType application/x-javascript A604800
        ExpiresByType text/css A604800

4 MySQL参数优化

在对MySQL进行参数优化时,应该适时关注运行期间各项变量值情况进行调节。如:

mysql> SHOW STATUS LIKE ‘qcache%’

(1) 查询缓存

MySQL有一个特性称为查询缓存,它将(后面会用到的)查询结果保存在内存中。在很多情况下,这会极大地提高性能。不过查询缓存在默认情况下是禁用的。可以将 query_cache_size 添加到 /etc/my.conf 中。

# Qcache_hits / Qcache_inserts >> 2:1
query_cache_size = 32-128Mb

(2) 索引缓冲区

索引缓冲区要配置的几个最重要的变量是key_buffer_size、innodb_buffer_pool_size、innodb_log_file_size。

# Key_read_requests / Key_reads >= 99%
key_buffer_size = 25-33% 物理内存大小 (MyISAM)

# Innodb_buffer_pool_read_requests / Innodb_buffer_pool_reads >= 99%
innodb_buffer_pool_size = 80%物理内存大小 (InnoDB)
innodb_log_file_size = 32-128Mb

key_buffer_size只对MyISAM表起作用

key_buffer_size指定索引缓冲区的大小,它决定索引处理的速度,尤其是索引读的速度。一般我们设为16M,实际上稍微大一点的站点 这个数字是远远不够的,通过检查状态值Key_read_requests和Key_reads,可以知道key_buffer_size设置是否合理。比例key_reads / key_read_requests应该尽可能的低,至少是1:100,1:1000更好(上述状态值可以使用SHOW STATUS LIKE ‘key_read%’获得)

(3) 表缓存

每个表都可以表示为磁盘上的一个文件,必须先打开,后读取。为了加快从文件中读取数据的过程,MySQL 对这些打开文件进行了缓存,其最大数目由table_cache 指定。

# Open_tables <= table_cache ,避免Opened_tables增长过快
table_cache = 64-2048

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

(4) 线程缓存

每次 MySQL需要创建一个新线程时,Threads_create都会增加。如果这个数字在运行期间快速增加,就应该尝试增大线程缓存。

thread_cache_size = 8-128

(5) Sort缓冲区

如果 sort_merge_passes 很大,就表示需要注意增加 sort_buffer_size。

sort_buffer_size = 2-16M

(6) 临时表缓存

每次使用临时表都会增大 Created_tmp_tables;基于磁盘的表也会增大 Created_tmp_disk_tables。长时间观察 Created_tmp_disk_tables会显示所创建的磁盘表的比率,您可以确定该项设置的效率。

max_heap_table_size = 16-256M
tmp_table_size = 32-512M

(7) 慢查询

执行时间超过给定时间范围的查询就称为慢查询,将这些慢查询记录到适当命名的慢查询日志中。方便以后查看这个日志来确定应用程序中有哪些部分需要进一步调查。

log_slow_queries = /New/Path/slow_query.log
long_query_time = 3
log_queries_not_using_indexes = 1

.End.