Tag: MySQL

Phpize简介

Posted by – 2009-09-08

phpize 是属于 php-devel 中的东西,主要是设定 php 外挂模块的一些设定

例如你的php不支持mysql, mbstring,openssl等

实例应用:
#环境php5.3.0, 不支持mysql扩展
#假如php的源码包在/usr/local/src/php-5.3.0
#php安装目录是/usr/local/php

cd /usr/local/src/php-5.3.0/ext/mysql
/usr/local/php/bin/phpize
./configure --with-php-config=/usr/local/php/bin/php-config
make
make install

#这个时候你会看到mysql.so被拷贝到某个目录, 把mysql.so拷贝到你的extension_dir指向的路径, 在php.ini里增加extension=mysql.so
#重启web服务器, 看一下phpinfo, 或者/usr/local/php/bin/php -m,应该支持mysql了, 完毕!

#注意: 在执行/usr/local/php/bin/phpize的时候可能会提示某些错误, 例如:Cannot find autoconf, 那就根据错误提示把相关的软件安装, RHEL系列使用yum -y install autoconf,Debian系的是apt-get install autoconf就可以了

#所以安装 php-devel 相关套件就会有 phpize 可以使用 (档案预设存放于 /usr/bin/phpize )
#phpize 命令是用来准备 PHP 外挂模块的编译环境的。下面例子中,外挂模块的源程序位于 extname 目录中:
cd extname
phpize
./configure (注一)
make
make install
#成功的安装将建立 extname.so 并放置于 PHP 的外挂模块目录中 (预设存放于 /usr/lib/php/modules/ 内) 。
#需要调整 php.ini,加入 extension=extname.so 这一行之后才能使用此外挂模块。

注一:
如在执行 ./configure 时出现 not find --with-php-config 时,
可重下以下指令,因 --with-php-config 预设在 /usr/bin/php-config 可找到
./configure --with-php-config=/usr/bin/php-config
需要调整 php.ini,加入 extension=extname.so 这一行之后才能使用此扩展库。

注二:
如在安装openssl支持时出现类似:
Make sure that you run phpize in the top level source directory of the module
可能是没有config.m4文件,复制一下即可
cp config0.m4 config.m4

参考了hao32的文章,在此表示感谢
网址:http://www.hao32.com/webserver/313.html

Debian+nginx+mediawiki的rewrite问题

Posted by – 2009-09-08

环境是Debian+nginx0.7.61+php5.3.0+mysql5.1.37
一、保证mediawiki目录下的LocalSettings.php文件中没有对做url重写的相关没配置,也就是注释或删除下边这个参数
#----------------------------引用文字-开始----------------------------
#$wgArticlePath = "/$1";
#----------------------------引用文字-结束----------------------------

二、在nginx的vhost.conf进行rewrite的配置
#----------------------------引用文字-开始----------------------------
location / {
index index.html index.htm index.php;
root /www/wwwroot/chengyongxu.cn;
rewrite ^/wiki/index.php/([^?]*)(?:\?(.*))? /wiki/index.php?title=$1&$2;
}
#----------------------------引用文字-结束----------------------------
#上边只加了一条规则,这样就可以通过访问
http://chengyongxu.cn/wiki/index.php/阿贾克斯
来访问到
http://chengyongxu.cn/wiki/index.php?title=阿贾克斯

三、如果要做rewrite,一定要保证同类的链接的一致性
不能阿贾克斯的链接是:
http://chengyongxu.cn/wiki/index.php/阿贾克斯
而类似的巴塞罗那的链接是:
http://chengyongxu.cn/index.php/巴塞罗那

Nagios搭建监控服务器

Posted by – 2009-08-11

####################################
#nagios_configuration
#Author:楚霏
#Date: 2009-3-19
#Update:2009-8-11
#Env: Centos 5.3 x86_64
#感谢Sery兄的帮助
####################################

一、准备工作
####################################
环境:Centos 5.3 x86_64
所需软件:
nagios-3.1.?.tar.gz
nagios-plugins-1.4.13.tar.gz
nrpe-2.12.tar.gz
httpd-2.2.??.tar.gz
gcc
glibc
glibc-common
gd
gd-devel
fetion20080910047-lin64.tar.gz
library64_linux.tar.gz
libstdc++-4.3.0-8.x86_64.rpm
####################################

####################################
#下载相关软件
cd /usr/local/src/
wget http://osdn.dl.sourceforge.net/sourceforge/nagios/nagios-3.1.2.tar.gz
wget http://osdn.dl.sourceforge.net/sourceforge/nagiosplug/nagios-plugins-1.4.13.tar.gz
wget http://jaist.dl.sourceforge.net/sourceforge/nagios/nrpe-2.12.tar.gz
wget ftp://mirror.switch.ch/pool/2/mirror/fedora/linux/releases/9/Fedora/x86_64/os/Packages/libstdc++-4.3.0-8.x86_64.rpm
wget http://www.it-adv.net/fetion/downng/fetion20090406003-linux.tar.gz
wget http://www.it-adv.net/fetion/downng/library_linux.tar.gz
####################################

二、环境介绍
####################################
两台机器全是Centos 5.3 x86_64
主监控机IP=10.0.0.52
被监控机IP=10.0.0.166
主监控机上运行nagios的用户名是nagios,这个用户隶属于nagios组和运行apache的用户组

主监控机需要安装nagios,nagios-plugins,nrpe,fetion
被监控机只需要安装nagios-plugins,nrpe

支持PHP和GD的WEB环境并不是nagios必需的,主要是为了在web上看到监控状态,而nagios所带的html需要php+gd的支持

所有增减主机增减服务器操作均在主监控机上配置
主监控机上的nagios.cfg是总的配置文件,配置各个部分的配置文件的位置等信息
####################################

三、安装配置
####################################
(1)在主监控机上安装apache+php+gd的web环境,推荐编译安装,不再赘述,本处方便起见用yum装了
yum -y install gcc glibc glibc-common gd gd-devel httpd php php-gd libpng
####################################

####################################
(2)在主监控机上安装Nagios
#创建相关的用户和组
useradd -m nagios
groupadd nagcmd && usermod -a -G nagcmd nagios

#下边这条命令是使nagios用户也隶属于运行web服务器的组
usermod -a -G nagcmd apache

cd /usr/local/src/
tar xvf nagios-3.1.?.tar.gz ; cd nagios-3.1.?

#可以先看一下编译帮助
./configure --help
./configure --prefix=/usr/local/nagios --with-command-group=nagcmd
make all

#第一步执行make install安装主要的程序、CGI及HTML文件
#第二步执行make install-init的步骤,它的作用是把nagios做成一个运行脚本,使nagios随系统开机启动
#第三步执行make install-commandmode 给外部命令访问nagios配置文件的权限
#第四步执行make install-config 把配置文件的例子复制到nagios的安装目录
make install
make install-init
make install-commandmode
make install-config

#验证程序是否被正确安装上文指定的安装路径(这里是/usr/local/nagios),看是否存在etc、bin、sbin、share、var这五个目录。
#bin 执行程序所在目录,这个目录只有一个文件nagios
#etc 配置文件位置,初始安装完后,只有几个*.cfg-sample文件
#sbin Nagios Cgi文件所在目录,也就是执行外部命令所需文件所在的目录
#share Nagios网页文件所在的目录
#var Nagios日志文件、spid 等文件所在的目录
ls /usr/local/nagios
####################################

####################################
(3)配置WEB接口
#相当于httpd.conf中加了

#----------------------------引用文字-开始----------------------------
# Load config files from the config directory "/etc/httpd/conf.d".
Include conf.d/*.conf
#----------------------------引用文字-结束----------------------------

#然后在新建的/安装路径/httpd/conf.d/下新建了一个文件,内容是:

#----------------------------引用文字-开始----------------------------
# SAMPLE CONFIG SNIPPETS FOR APACHE WEB SERVER
# Last Modified: 11-26-2005
#
# This file contains examples of entries that need
# to be incorporated into your Apache web server
# configuration file. Customize the paths, etc. as
# needed to fit your system.

ScriptAlias /nagios/cgi-bin "/usr/local/nagios/sbin"


# SSLRequireSSL
AuthType Basic
Options ExecCGI
AllowOverride None
Order allow,deny
Allow from all
# Order deny,allow
# Deny from all
# Allow from 127.0.0.1
AuthName "Nagios Access"
AuthUserFile /usr/local/nagios/etc/htpasswd.users
Require valid-user

Alias /nagios "/usr/local/nagios/share"


# SSLRequireSSL
AuthType Basic
Options None
AllowOverride None
Order allow,deny
Allow from all
# Order deny,allow
# Deny from all
# Allow from 127.0.0.1
AuthName "Nagios Access"
AuthUserFile /usr/local/nagios/etc/htpasswd.users
Require valid-user

#----------------------------引用文字-结束----------------------------

#yum安装的apache,可用下面命令来实现
make install-webconf
#生成验证用户,
htpasswd -c /usr/local/nagios/etc/htpasswd.users nagiosadmin
#在httpd.conf中的DirectoryIndex中加上index.php
#apache其它配置此处不再赘述
service httpd start
####################################

####################################
(4)安装Nagios Plugins
cd /usr/local/src/
tar xvf nagios-plugins-1.4.??.tar.gz && cd nagios-plugins-1.4.??
./configure --with-nagios-user=nagios --with-nagios-group=nagios
make
make install
####################################

####################################
(5)把Nagios增加为服务器并试运行
chkconfig --add nagios
chkconfig --level 3 nagios on

#测试一下配置文件
/usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg

#保证nagios用户有权限运行插件
chown -R nagios:nagios /usr/local/nagios/libexec/

#如果没有错误,启动
service nagios start
####################################

####################################
(6)Nagios配置文件简介
#主配置文件nagios.cfg

#日志文件
#格式:log_file=
#例如:
#log_file=/usr/local/nagios/var/nagios.log

#对象的配置文件
#格式:cfg_file=
#例如:
#cfg_file=/usr/local/nagios/etc/objects/contacts.cfg
#cfg_file=/usr/local/nagios/etc/objects/contactgroups.cfg

#对象的配置目录
#格式:cfg_dir =
#例如:
#cfg_dir=/usr/local/nagios/etc/switches

#Nagios用户
#格式:nagios_user=
#例如:
#nagios_user = nagios

#配置文件cgi.cfg,它是控制相关cgi脚本的

#objects(对象)是所有可监控和通知的要素。
#下边包含的配置文件主要包括
#hosts.cfg定义被监控主机
#hostgroups.cfg定义被监控主机组
#services.cfg定义服务
#servicegroups.cfg定义服务组
#contacts.cfg定义联系人
#contactgroups.cfg定义联系人组
#timeperiods.cfg定义时间期限-如24x7全天候的监测
#commands.cfg定义命令
#servicedependency定义服务依赖
#serviceescalation定义服务扩展
#hostdependency定义主机依赖
#hostescalation定义主机扩展
####################################

####################################
(7)修改配置文件
cd /usr/local/nagios/etc/
cp nagios.cfg nagios.cfg.chushibak
vi nagios.cfg
#把下面部分

#----------------------------引用文字-开始----------------------------
cfg_file=/usr/local/nagios/etc/objects/commands.cfg
cfg_file=/usr/local/nagios/etc/objects/contacts.cfg
cfg_file=/usr/local/nagios/etc/objects/timeperiods.cfg
cfg_file=/usr/local/nagios/etc/objects/templates.cfg

# Definitions for monitoring the local (Linux) host
cfg_file=/usr/local/nagios/etc/objects/localhost.cfg
#----------------------------引用文字-结束----------------------------

#修改为
#----------------------------引用文字-开始----------------------------
cfg_file=/usr/local/nagios/etc/objects/contacts.cfg
cfg_file=/usr/local/nagios/etc/objects/contactgroups.cfg

cfg_file=/usr/local/nagios/etc/objects/services.cfg
cfg_file=/usr/local/nagios/etc/objects/servicegroups.cfg

cfg_file=/usr/local/nagios/etc/objects/commands.cfg
cfg_file=/usr/local/nagios/etc/objects/timeperiods.cfg
cfg_file=/usr/local/nagios/etc/objects/templates.cfg

# Definitions for monitoring the local (Linux) host
cfg_file=/usr/local/nagios/etc/objects/hosts.cfg
cfg_file=/usr/local/nagios/etc/objects/hostgroups.cfg
#----------------------------引用文字-结束----------------------------

####################################

####################################
(8)创建和修改对象配置文件
cd /usr/local/nagios/etc/objects
mkdir bak
mv contacts.cfg ./bak/
mv localhost.cfg ./bak/

cat << EOF >> hosts.cfg
#----------------------------引用文字-开始----------------------------

define host{
host_name 10.0.0.52
alias 10.0.0.52
address 10.0.0.52
max_check_attempts 5
#check_interval 1
#retry_interval 1
check_period 24x7
contact_groups sa_groups
notification_interval 30
#first_notification_delay #
notification_period 24x7
notification_options d,u,r
}

define host{
host_name 10.0.0.166
alias 10.0.0.166
address 10.0.0.166
max_check_attempts 5
#check_interval 1
#retry_interval 1
check_period 24x7
contact_groups sa_groups
notification_interval 30
#first_notification_delay #
notification_period 24x7
notification_options d,u,r
}
EOF
#----------------------------引用文字-结束----------------------------

cat << EOF >> hostgroups.cfg
#----------------------------引用文字-开始----------------------------
define hostgroup{
hostgroup_name all_hosts
alias all_hosts
members 10.0.0.52,10.0.0.166
#notes note_string
#notes_url url
#action_url url
}
define hostgroup{
hostgroup_name http_hosts
alias http_hosts
members 10.0.0.166
#notes note_string
#notes_url url
#action_url url
}
EOF
#----------------------------引用文字-结束----------------------------

cat << EOF >> contacts.cfg
#----------------------------引用文字-开始----------------------------
define contact{
contact_name cheng
alias sa_cheng
host_notifications_enabled 1 [0/1]
service_notifications_enabled 1 [0/1]
host_notification_period 24x7
service_notification_period 24x7
host_notification_options d,u,r
service_notification_options w,u,c,r
host_notification_commands notify-service-by-email,notify-service-by-sms
service_notification_commands notify-host-by-email,notify-host-by-sms
email yxcx@yahoo.cn
pager 13712345678
can_submit_commands 1 [0/1]
#retain_status_information [0/1]
#retain_nonstatus_information [0/1]
}
EOF
#----------------------------引用文字-结束----------------------------

cat << EOF >> contactgroups.cfg
#----------------------------引用文字-开始----------------------------
define contactgroup{
contactgroup_name sa_groups
alias sa_groups
members cheng
#contactgroup_members contactgroups
}
EOF
#----------------------------引用文字-结束----------------------------

#下边检查调用的命令(check_command),在命令配置文件中定义或在nrpe配置文件中要有定义
#最大重试次数(max_check_attempts),一般设置为3-4次比较好,这样不会因为太敏感而发生误报,一丢包就发短信太崩溃了吧
#检查间隔(check_interval)和重试检查间隔(retry_interval)的单位是分钟,不同的检查项目酌情修改
#通知间隔(notification_interval)指探测到故障以后,每隔多少分钟发送一次报警信息。
#状态级别:
#d=send notifications on a DOWN state宕
#w=send notifications on a WARNING state警告状态
#c=send notifications on a CRITICAL state严重状态、临界状态
#u=send notifications on an UNREACHABLE or UNKNOWN state找不到、不可达
#r=send notifications on recoveries (OK state)OK状态
#f=send notifications when the host or service starts and stops flapping
#s=send notifications when scheduled downtime starts and ends

cat << EOF >> services.cfg
#----------------------------引用文字-开始----------------------------

#monitor hosts
define service{
host_name 10.0.0.166
service_description check_ftp
check_command check_ftp
max_check_attempts 3
check_interval 10
retry_interval 5
check_period 24x7
notification_interval 30
notification_period 24x7
notification_options w,u,c
#contacts contacts(*)
contact_groups sa_groups
}
EOF
#----------------------------引用文字-结束----------------------------

cat << EOF >> servicegroups.cfg
#----------------------------引用文字-开始----------------------------
#monitor all_hosts
define service{
hostgroup_name all_hosts
service_description check_host-alive
check_command check_ping
max_check_attempts 5
check_interval 3
retry_interval 1
check_period 24x7
notification_interval 30
notification_period 24x7
notification_options w,u,c
#contacts contacts(*)
contact_groups sa_groups
}
define service{
hostgroup_name all_hosts
service_description check_df
check_command check_nrpe!check_df
max_check_attempts 4
check_interval 1440
retry_interval 5
check_period 24x7
notification_interval 1440
notification_period 24x7
notification_options w,u,c
#contacts contacts(*)
contact_groups sa_groups
}
define service{
hostgroup_name all_hosts
service_description check_load
check_command check_nrpe!check_load
max_check_attempts 5
check_interval 5
retry_interval 5
check_period 24x7
notification_interval 30
notification_period 24x7
notification_options w,u,c
#contacts contacts(*)
contact_groups sa_groups
}
define service{
hostgroup_name all_hosts
service_description check_zombie_procs
check_command check_nrpe!check_zombie_procs
max_check_attempts 5
check_interval 5
retry_interval 5
check_period 24x7
notification_interval 30
notification_period 24x7
notification_options w,u,c
#contacts contacts(*)
contact_groups sa_groups
}
define service{
hostgroup_name all_hosts
service_description check_total_procs
check_command check_nrpe!check_total_procs
max_check_attempts 5
check_interval 5
retry_interval 5
check_period 24x7
notification_interval 30
notification_period 24x7
notification_options w,u,c
#contacts contacts(*)
contact_groups sa_groups
}
define service{
hostgroup_name all_hosts
service_description check_ssh
check_command check_ssh
max_check_attempts 3
check_interval 60
retry_interval 5
check_period 24x7
notification_interval 60
notification_period 24x7
notification_options w,u,c
#contacts contacts(*)
contact_groups sa_groups
}

#monitor http_hosts
define service{
hostgroup_name http_hosts
service_description check_http
check_command check_http
max_check_attempts 4
check_interval 3
retry_interval 1
check_period 24x7
notification_interval 30
notification_period 24x7
notification_options w,u,c
#contacts contacts(*)
contact_groups sa_groups
}
EOF
#----------------------------引用文字-结束----------------------------

####################################

####################################
(7)主监控机安装nrpe
cd /usr/local/src/
tar xvf nrpe-2.??.tar.gz && cd nrpe-2.??
./configure --prefix=/usr/local/nrpe

#编译结束后在屏幕打印出相关的一些系统信息
#----------------------------引用文字-开始----------------------------
General Options:
-------------------------
NRPE port: 5666
NRPE user: nagios
NRPE group: nagios
Nagios user: nagios
Nagios group: nagios
#----------------------------引用文字-结束----------------------------
make
make install

#复制几个插件以便nrpe正常工作
cp /usr/local/nrpe/libexec/check_nrpe /usr/local/nagios/libexec/
cp /usr/local/nagios/libexec/check_disk /usr/local/nrpe/libexec/
cp /usr/local/nagios/libexec/check_load /usr/local/nrpe/libexec/
cp /usr/local/nagios/libexec/check_ping /usr/local/nrpe/libexec/
cp /usr/local/nagios/libexec/check_procs /usr/local/nrpe/libexec/
chown -R nagios:nagios /usr/local/nrpe/libexec/

#在/usr/local/nagios/etc/objects/commands.cfg中适当位置加入下面内容,我加在check_ssh和check_dhcp中间了
vi /usr/local/nagios/etc/objects/commands.cfg
#----------------------------引用文字-开始----------------------------
# 'check_nrpe' command definition
define command{
command_name check_nrpe
command_line $USER1$/check_nrpe -H $HOSTADDRESS$ -c $ARG1$
}
#----------------------------引用文字-结束----------------------------
####################################

####################################
(8)配置nrpe
mkdir /usr/local/nrpe/etc
cp sample-config/nrpe.cfg /usr/local/nrpe/etc/

#修改下边的几个选项
#server_address=按实际情况修改
#allowed_hosts=允许被哪些机器监控
#----------------------------引用文字-开始----------------------------
server_address=127.0.0.1
allowed_hosts=127.0.0.1
#----------------------------引用文字-结束----------------------------

#命令部分根据实际情况调整,比如硬盘,此处我注释了check_hda1命令,改为全部硬盘
#----------------------------引用文字-开始----------------------------
#command[check_hda1]=/usr/local/nrpe/libexec/check_disk -w 20% -c 10% -p /dev/hda1
command[check_df]=/usr/local/nrpe/libexec/check_disk -w 20% -c 10%
#----------------------------引用文字-结束----------------------------

#把nrpe增加为服务
cp init-script /etc/init.d/nrpe
chmod 755 /etc/init.d/nrpe
chkconfig --add nrpe
chkconfig --level 3 nrpe on
####################################

####################################
(9)安装飞信机器人
cd /usr/local/src/
rpm -Uvh libstdc++-4.3.0-8.x86_64.rpm
tar xvf fetion20090406003-linux.tar.gz
tar xvf library_linux.tar.gz
mv install ../sms
mv libACE* /usr/local/lib64/
mv libcrypto.so.0.9.8 /usr/local/lib64/
mv libssl.so.0.9.8 /usr/local/lib64/
echo "/usr/local/lib64/" >> /etc/ld.so.conf
ldconfig
chown -R nagios:nagios /usr/local/sms
chmod 755 /usr/local/sms/fetion

#最好能切换到nagios发短信测试一下
su nagios
#13744444444发短信所用的手机号
#jiubugaosuni为13744444444密码
#13712345678改为你自己的手机号
/usr/local/sms/fetion --mobile=13744444444 --pwd=jiubugaosuni --to=13712345678 --msg-utf8=test
#别忘了回到root用户
exit

#加入短信报警的命令,我加在email部分下边了
vi commands.cfg
#----------------------------引用文字-开始----------------------------
# 'notify-host-by-sms' command definition
define command{
command_name notify-host-by-sms
command_line /usr/local/sms/fetion --mobile=13744444444 --pwd=jiubugaosuni --to=$CONTACTPAGER$ --msg-utf8="$NOTIFICATIONTYPE$ $HOSTNAME$ $SERVICEDESC$ is $SERVICESTATE$ info: $SERVICEOUTPUT$"
}
# 'notify-service-by-sms' command definition
define command{
command_name notify-service-by-sms
command_line /usr/local/sms/fetion --mobile=13744444444 --pwd=jiubugaosuni --to=$CONTACTPAGER$ --msg-utf8="$NOTIFICATIONTYPE$: $HOSTALIAS$/$SERVICEDESC$ is $SERVICESTATE$"
}
#----------------------------引用文字-结束----------------------------

#修改contacts.cfg和contactgroups.cfg相关信息,主要是手机号
####################################

####################################
(10)重启nagios服务,验证对主监控机本身的监控情况
#测试一下配置文件,看是否有错误输出
/usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg
service nagios restart
#用浏览器打开http://ip/nagios/看一下情况
####################################

####################################
(11)在被监控机上安装nagios-plugins和nrpe
useradd -m nagios
cd /usr/local/src/
tar xvf nagios-plugins-1.4.13.tar.gz
cd nagios-plugins-1.4.13
./configure --with-nagios-user=nagios --with-nagios-group=nagios
make
make install
cd ../
tar xvf nrpe-2.12.tar.gz
cd nrpe-2.12
./configure
make
make install
mkdir /usr/local/nagios/etc/
cp sample-config/nrpe.cfg /usr/local/nagios/etc/

#修改/usr/local/nagios/etc/nrpe.cfg下边的几个选项
#server_address=按实际情况修改
#allowed_hosts=允许被哪些机器监控
#----------------------------引用文字-开始----------------------------
server_address=10.0.0.166
allowed_hosts=127.0.0.1,10.0.0.52,10.0.0.166
#----------------------------引用文字-结束----------------------------
#命令部分根据实际情况调整,比如硬盘,此处我注释了check_hda1命令,改为全部硬盘
#----------------------------引用文字-开始----------------------------
#command[check_hda1]=/usr/local/nrpe/libexec/check_disk -w 20% -c 10% -p /dev/hda1
command[check_df]=/usr/local/nrpe/libexec/check_disk -w 20% -c 10%
#----------------------------引用文字-结束----------------------------
cp init-script /etc/init.d/nrpe
chmod 755 /etc/init.d/nrpe
chkconfig --add nrpe
chkconfig --level 3 nrpe on
####################################

####################################
(12)如何添加一台被监控机
#步骤:
#a.保证被监控机已经正确安装nagios-plugins和nrpe
#b.在hosts.cfg定义这台被监控机。把主机定义这部分复制粘贴后稍做修改即可
#c.在hostgroups.cfg定义这台机器应该属于哪些组
#d.需要监控的服务未在servicegroups被定义时在services.cfg中定义
####################################

####################################
(13)监控一台mysql服务器需注意
#编译nagios-plugins时需要加上--with-mysql=/usr/local/mysql(你的mysql安装路径)
#./configure --with-mysql=/usr/local/mysql --with-nagios-user=nagios --with-nagios-group=nagios
#在被监控机上做相关操作
#实际是以一个只有查询权限的用户nrpe来查询一个空数据库nrpe。功能等于mysqladmin -u 用户 --password='密码' status -i 2
mysql -p
#----------------------------引用文字-开始----------------------------
mysql> create database nrpe;
mysql> grant select on nrpe.* to nrpe@localhost identified by 'password' with grant option;
mysql> grant select on nrpe.* to nrpe@主监控机ip identified by 'password' with grant option;
#----------------------------引用文字-结束----------------------------
#试运行,会输出mysql运行情况
/usr/local/nagios/libexec/check_mysql -u nrpe -d nrpe
#在监控机所在的服务器上试运行(需要mysql_client)
/usr/local/nagios/libexec/check_mysql -H 10.0.0.166 -u nrpe -d nrpe
####################################

####################################
(14)监控一台web服务器时,可以采用nrpe来监控
#在主监控机的services.cfg中如需调用check_http命令的改为调用check_nrpe!check_http
#在被监控机中的nrpe.cfg中加下条
#----------------------------引用文字-开始----------------------------
command[check_http]=/usr/local/nagios/libexec/check_http -H www.chengyongxu.com -u /index.php
#----------------------------引用文字-结束----------------------------
#也就是说访问这台web服务器上的一个页面,这个页面正常说明web服务正常

用mysqlslap进行mysql压力测试

Posted by – 2009-05-05

MySQL5.1自带了一个压力测试工具mysqlslap.
关于它的选项手册上介绍的很详细,--help也可看到。
我解释一下一些常用的选项。
这里要注意的几个选项:
--concurrency代表并发数量,多个可以用逗号隔开,当然你也可以用自己的分隔符隔开,这个时候要用到--delimiter开关。
--engines代表要测试的引擎,可以有多个,用分隔符隔开。
--iterations代表要运行这些测试多少次。
--auto-generate-sql 代表用系统自己生成的SQL脚本来测试。
--auto-generate-sql-load-type 代表要测试的是读还是写还是两者混合的(read,write,update,mixed)
--number-of-queries 代表总共要运行多少次查询。每个客户运行的查询数量可以用查询总数/并发数来计算。比如倒数第二个结果2=200/100。
--debug-info 代表要额外输出CPU以及内存的相关信息。
--number-int-cols 代表示例表中的INTEGER类型的属性有几个。
--number-char-cols 意思同上。
--create-schema 代表自己定义的模式(在MySQL中也就是库)。
--query 代表自己的SQL脚本。
--only-print 如果只想打印看看SQL语句是什么,可以用这个选项。

现在来看一些我测试的例子。

1、用自带的SQL脚本来测试。
MySQL版本为5.1.34
[root@CentOS ~]# mysqlslap --defaults-file=/etc/my.cnf --concurrency=50,100,200 --iterations=1 --number-int-cols=4 --number-char-cols=35 --auto-generate-sql --auto-generate-sql-add-autoincrement --auto-generate-sql-load-type=mixed --engine=myisam,innodb --number-of-queries=200 --debug-info -uroot -p123456 -S/tmp/mysql.sock
Benchmark
Running for engine myisam
Average number of seconds to run all queries: 0.147 seconds
Minimum number of seconds to run all queries: 0.147 seconds
Maximum number of seconds to run all queries: 0.147 seconds
Number of clients running queries: 50
Average number of queries per client: 4

Benchmark
Running for engine myisam
Average number of seconds to run all queries: 0.201 seconds
Minimum number of seconds to run all queries: 0.201 seconds
Maximum number of seconds to run all queries: 0.201 seconds
Number of clients running queries: 100
Average number of queries per client: 2

Benchmark
Running for engine myisam
Average number of seconds to run all queries: 0.272 seconds
Minimum number of seconds to run all queries: 0.272 seconds
Maximum number of seconds to run all queries: 0.272 seconds
Number of clients running queries: 200
Average number of queries per client: 1

Benchmark
Running for engine innodb
Average number of seconds to run all queries: 0.349 seconds
Minimum number of seconds to run all queries: 0.349 seconds
Maximum number of seconds to run all queries: 0.349 seconds
Number of clients running queries: 50
Average number of queries per client: 4

Benchmark
Running for engine innodb
Average number of seconds to run all queries: 0.397 seconds
Minimum number of seconds to run all queries: 0.397 seconds
Maximum number of seconds to run all queries: 0.397 seconds
Number of clients running queries: 100
Average number of queries per client: 2

Benchmark
Running for engine innodb
Average number of seconds to run all queries: 0.618 seconds
Minimum number of seconds to run all queries: 0.618 seconds
Maximum number of seconds to run all queries: 0.618 seconds
Number of clients running queries: 200
Average number of queries per client: 1

User time 0.04, System time 1.20
Maximum resident set size 0, Integral resident set size 0
Non-physical pagefaults 4602, Physical pagefaults 0, Swaps 0
Blocks in 0 out 0, Messages in 0 out 0, Signals 0
Voluntary context switches 2785, Involuntary context switches 7146

pure-ftpd+mysql认证+pma

Posted by – 2009-03-12

#########################
#pure-ftpd+mysql认证+pma#
#Author: 楚霏 #
#Date: 2009-3-11 #
#Env: Centos 5.2 x86_64 #
#########################
#教程写的是很简单,但配置过程倍受折磨。请转载时加上本页链接,谢谢
#http://www.chengyongxu.com/blog/pure-ftpdmysql认证pma/
一. 准备工作:
环境:Centos 5.2 x86_64
所需软件:
mysql-5.1.32-linux-x86_64-icc-glibc23.tar.gz
pure-ftpd-1.0.21.tar.gz
phpMyAdmin-3.1.3-all-languages.tar.gz
####################################
下载相关软件
cd /usr/local/src
wget http://download.pureftpd.org/pub/pure-ftpd/releases/pure-ftpd-1.0.21.tar.gz
下面这两个软件下载后上传至服务器
#http://dev.mysql.com/get/Downloads/MySQL-5.1/mysql-5.1.32-linux-x86_64-icc-glibc23.tar.gz/from/pick#mirrors
mysql-5.1.32-linux-x86_64-icc-glibc23.tar.gz

#http://www.phpmyadmin.net/home_page/index.php
phpMyAdmin-3.1.3-all-languages.tar.gz
####################################
二、安装过程
(1)MySQL服务的安装
#如果系统中已经有web+php+mysql环境,此步请跳过
cd /usr/local/src
tar zxvf mysql-5.1.32-linux-x86_64-icc-glibc23.tar.gz
mv mysql-5.1.32-linux-x86_64-icc-glibc23 /usr/local/
ln -s /usr/local/mysql-5.1.32-linux-x86_64-icc-glibc23 /usr/local/mysql
useradd mysql -M
chown -R mysql:root /usr/local/mysql/
cp /usr/local/mysql/support-files/my-large.cnf /etc/my.cnf
vi /etc/my.cnf
----------------- my.cnf说明 -------------------
务必指定datadir的位置, 一般是/var/lib/mysql
------------------------------------------------
cd /usr/local/mysql
./scripts/mysql_install_db --user=mysql
cp ./support-files/mysql.server /etc/rc.d/init.d/mysqld
chmod 755 /etc/rc.d/init.d/mysqld
chkconfig --add mysqld
chkconfig --level 3 mysqld on
chown -R mysql:mysql /var/lib/mysql
cd /usr/local/mysql/bin
for i in *; do ln -s /usr/local/mysql/bin/$i /usr/bin/$i; done
(2)pure-ftpd安装
#如果不进行下边这步刚编译时会出现configure: error: Your MySQL client libraries aren't properly installed错误
echo "/usr/local/mysql/lib/" >> /etc/ld.so.conf && ldconfig
cd /usr/local/src && tar xvf pure-ftpd-1.0.21.tar.gz && cd pure-ftpd-1.0.21
./configure --prefix=/usr/local/pureftpd --with-mysql --with-mysql-lib-dir=/usr/local/mysql --with-paranoidmsg --with-uploadscript --with-cookie --with-virtualchroot --with-virtualhosts --with-virtualroot --with-diraliases --with-quotas --with-sysquotas --with-ratios --with-ftpwho --with-throttling --with-puredb --with-shadow --with-pam --with-peruserlimits --with-language=simplified-chinese --with-altlog --with-iplogging --with-largefile
make && make install
make install-strip
(3)增加用户和组
#不增加用户会出现530 login authentication failed错误
groupadd ftpgroup
useradd ftpuser -g ftpgroup -d /www/wwwroot/ -s /sbin/nologin
chown -R ftpuser:ftpgroup /www/wwwroot
(3)配置
mkdir /usr/local/pureftpd/etc
cp configuration-file/pure-ftpd.conf !$/
cp pureftpd-mysql.conf /usr/local/pureftpd/etc/
vi /usr/local/pureftpd/etc/pure-ftpd.conf
#修改以下选项
##########################################
65c65
DisplayDotFiles yes ---> DisplayDotFiles no
77c77
NoAnonymous no ---> NoAnonymous yes
116c116
# MySQLConfigFile /etc/pureftpd-mysql.conf ---> MySQLConfigFile /usr/local/pureftpd/etc/pureftpd-mysql.conf
246c246
AllowUserFXP no ---> AllowUserFXP yes
324c324
#NoChmod yes ---> NoChmod yes
336c336
#CreateHomeDir yes ---> CreateHomeDir yes
429c429
# IPV4Only yes ---> IPV4Only yes
##########################################
vi /usr/local/pureftpd/etc/pureftpd-mysql.conf
#修改以下选项
##########################################
27c27
MYSQLUser root---> MYSQLUser pureftpd
32c32
MYSQLPassword rootpw ---> MYSQLPassword (yourpasswd)
45c45
MYSQLCrypt cleartext ---> MYSQLCrypt md5
##########################################
(4)启动
cp configuration-file/pure-config.pl /usr/local/pureftpd/sbin/
chmod 755 /usr/local/pureftpd/sbin/pure-config.pl
cp contrib/redhat.init /etc/init.d/pureftpd
chmod 755 /etc/init.d/pureftpd
chkconfig --add pureftpd
chkconfig --level 3 pureftpd on
#修改/etc/init.d/pureftpd,根据实际情况改一下相关路径
vi /etc/init.d/pureftpd
#----------------------------引用文字-开始----------------------------
#!/bin/bash
#
# Startup script for the pure-ftpd FTP Server $Revision: 1.3 $
#
# chkconfig: 2345 85 15
# description: Pure-FTPd is an FTP server daemon based upon Troll-FTPd
# processname: pure-ftpd
# pidfile: /var/run/pure-ftpd.pid
# config: /etc/pure-ftpd.conf

# Source function library.
. /etc/rc.d/init.d/functions

RETVAL=0

# Path to the pure-ftp binaries.
prog=pure-config.pl
fullpath=/usr/local/pureftpd/sbin/$prog
pureftpwho=/usr/local/pureftpd/sbin/pure-ftpwho

start() {
echo -n tiny_mce_markerquot;Starting $prog: "
$fullpath /usr/local/pureftpd/etc/pure-ftpd.conf --daemonize
RETVAL=$?
[ $RETVAL = 0 ] && touch /var/lock/subsys/$prog
echo
}
stop() {
echo -n tiny_mce_markerquot;Stopping $prog: "
kill $(cat /var/run/pure-ftpd.pid)
RETVAL=$?
[ $RETVAL = 0 ] && rm -f /var/lock/subsys/$prog
echo
}

# See how we were called.
case "$1" in
start)
start
;;
stop)
stop
;;
restart)
stop
start
;;
condrestart)
if [ -f /var/lock/subsys/$prog ] ; then
stop
# avoid race
sleep 3
start
fi
;;
status)
status $prog
RETVAL=$?
if [ -f $pureftpwho ] && [ $RETVAL -eq 0 ] ; then
$pureftpwho
fi
;;
*)
echo tiny_mce_markerquot;Usage: $prog {start|stop|restart|condrestart|status}"
RETVAL=1
esac
exit $RETVAL
#----------------------------引用文字-结束----------------------------
(5)mysql里建库、增加用户、授权
mysql -p
mysql> create database pureftpd;
mysql> grant all on pureftpd.* to pureftpd@localhost identified by 'yourpasswd' with grant option;
mysql> use pureftpd;
mysql> CREATE TABLE IF NOT EXISTS `users` ( `id` int(11) NOT NULL auto_increment, `user` varchar(16) NOT NULL, `password` varchar(64) NOT NULL, `uid` varchar(11) NOT NULL, `gid` varchar(11) NOT NULL, `dir` varchar(128) NOT NULL, `quotasize` varchar(5) NOT NULL, `quotafiles` varchar(11) NOT NULL, `ulbandwidth` varchar(5) NOT NULL, `dlbandwidth` varchar(5) NOT NULL, `ulratio` varchar(6) NOT NULL, `dlratio` varchar(6) NOT NULL, `comment` tinytext NOT NULL, `ipaccess` varchar(15) NOT NULL, `status` enum('0','1') default NULL, `create_date` datetime NOT NULL, `modify_date` datetime NOT NULL, PRIMARY KEY (`id`,`user`) ) ENGINE=MyISAM DEFAULT CHARSET=gbk AUTO_INCREMENT=1;
(6)用pma管理pureftpd
#进入你的网站目录
cd /www/wwwroot/
tar xvf /usr/local/src/phpMyAdmin-3.?.?-all-languages.tar.gz
#把pma目录改的尽可能的难以猜解,我这里就先用简单的了
mv phpMyAdmin* pma
cd pma && mv config.sample.inc.php config.inc.php
#更改登录认证信息,一般为你mysql的root用户密码
vi config.inc.php
#登录pma
http://yoursite/pma
#新增用户时记得password的数据类型要和你pureftpd-mysql.conf中MYSQLCrypt的设置一致,我设的是md5
(7)启动服务,验证登录
service pureftpd start
ftp 127.0.0.1
#----------------------------引用文字-开始----------------------------
Connected to 127.0.0.1.
220---------- 欢迎来到 Pure-FTPd ----------
220-您是第 1 个使用者,最多可达 50 个连接
220-现在本地时间是 17:44。服务器端口: 21。
220-这是私人系统 - 不开放匿名登录
220 在 15 分钟内没有活动,您被会断线。
500 安全扩充项未实施
500 安全扩充项未实施
KERBEROS_V4 rejected as an authentication type
Name (127.0.0.1:root): test1
331 使用者 test1 OK. 需要密码.
Password:
230-使用者 test1 有以下组的权限:: 502
230-这个服务器支持FXP传输
230 OK. 目前限制的目录是 /
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
227 Entering Passive Mode (127,0,0,1,93,176)
150 接受数据连接
drwxr-xr-x 3 501 501 4096 Jan 16 23:10 wwwroot
226-Options: -l
226 总共 1 符合
ftp>
#----------------------------引用文字-结束----------------------------

#完成

MySQL服务的安装_innodb

Posted by – 2009-03-04

########################
#MySQL服务的安装_innodb#
########################
cd /usr/local/src
tar zxvf mysql-5.1.30-linux-x86_64-icc-glibc23.tar.gz
mv mysql-5.1.30-linux-x86_64-icc-glibc23 /usr/local/
ln -s /usr/local/mysql-5.1.30-linux-x86_64-icc-glibc23 /usr/local/mysql
useradd mysql -M
chown -R mysql:root /usr/local/mysql/
cp /usr/local/mysql/support-files/my-large.cnf /etc/my.cnf
vi /etc/my.cnf
----------------- my.cnf说明 -------------------
务必指定datadir的位置, 一般是/var/lib/mysql
------------------------------------------------
cd /usr/local/mysql
./scripts/mysql_install_db --user=mysql
cp ./support-files/mysql.server /etc/rc.d/init.d/mysqld
chmod 755 /etc/rc.d/init.d/mysqld
chkconfig --add mysqld
chkconfig --level 3 mysqld on
chown -R mysql:mysql /var/lib/mysql
cd /usr/local/mysql/bin
for i in *; do ln -s /usr/local/mysql/bin/$i /usr/bin/$i; done
#编辑/etc/my.cnf,加上下句,这样除了已建好的系统表,接下来建的表就是innodb引擎的了
default_table_type = innodb
#启动服务
service mysqld start

Mysql备份脚本

Posted by – 2009-02-25

#!/bin/sh

#########################################
# Prim@Hosting Backup工具
# v2.0
# ValueOf.com
#########################################
EMAIL=0
#########################################
# 配置区
# the backup dir
BACKUP_BASE_DIR="/www/users/backup"

# 备份哪些?
WEB=0
EMAIL=0
DNS=0
MYSQL=1
CONTROL=1

# 测试模式?
testmode=0

# 本参数如设置为1,则打包压缩/www/users/目录时候,
# 将会把每个站点单独生成一个对应的tgz压缩文件
# 本参数如果为0,则/www/users/下所有站点将打包成为一个users.tar.gz的大文件
# 为了便于下载备份和解压缩备份文件,本参数默认设置为1
user_seperate=1

# 本参数如设置为1,则打包压缩/var/lib/mysql/目录时候,
# 将会把每个数据库单独生成一个对应的tgz压缩文件
# 本参数如果为0,则/var/lib/mysql/目录打包成为一个mysql.tar.gz的大文件
# 本参数默认设置为0
mysql_seperate=1

# 保留多少份旧的备份?
# 即除了当前最新的这个备份之外,还保留几个备份,最少为0个,默认为1
# 如果设为0,则只保留一个备份,每次备份的时候都会把以前的备份删除
max_old_backup=7

#########################################
# 以下的配置如果不明白最好不要改
#########################################
# 备份数据目录
WEB_DATA_DIR="/www/users"
EMAIL_DATA_DIR="/var/vmail"
DNS_DATA_DIR="/var/named"
CONTROL_DATA_DIR="/www/prima"
GENCOMSITE_DATA_DIR="/www/prima/htdocs/apps/GenComSite/sitepage /www/prima/htdocs/apps/GenComSite/upload"
COUNTER_DATA_DIR="/var/Counter"
system=`uname -a`
case "$system" in
Linux*) MYSQL_DATA_DIR="/var/lib/mysql" ;;
FreeBSD*) MYSQL_DATA_DIR="/var/db/mysql" ;;
*) MYSQL_DATA_DIR="/var/lib/mysql" ;;
esac

# 备份配置目录/文件位置
PRIMA_ETC_DIR="/usr/prima/etc"
PRIMA_CONF_FILE="$PRIMA_ETC_DIR/prima.conf"
POSTFIX_CONF_DIR="/usr/prima/postfix/conf"
FRONTPAGE_DIR="/usr/local/frontpage"
NAMED_CONF="/etc/named.conf"
RESIN_CONF="/usr/local/resin/host.conf"
TOMCAT_CONF="/var/tomcat4/conf/server.xml"
PHPMYADMIN_CONF="/www/prima/htdocs/apps/phpMyAdmin/config.inc.php"

# tar 参数
TAR_FLAG="zp"

#########################################
# 配置结束
# 下面的程序请不要改动
#########################################
# my functions
backup_list()
{
if [ -z "$1" ] || [ -z "$2" ] ; then
echo "backup_list() usage: backup_list data_to_backup backup_dir"
return 1
fi

list=$1
backup_dir=$2
for name in $list
do
echo
echo "do backup for $name"

prefix=`dirname $name`
self=`basename $name`
if [ -z "$prefix" ] || [ -z "$self" ] ; then
echo "Warning: can not fetch prefix/self for data $name, skip."
continue
fi

if [ -d "$name" ] ; then
cd $prefix
if [ "$testmode" = 1 ] ; then
cmd="tar $TAR_FLAG -c -f $backup_dir/$self.tar.gz $self"
echo $cmd
else
tar $TAR_FLAG -c -f $backup_dir/$self.tar.gz $self
fi
else
if [ -f "$name" ] ; then
if [ "$testmode" = 1 ] ; then
#cmd="cp -p $name $backup_dir/$self"
cmd="tar $TAR_FLAG -c -f $backup_dir/$self.tar.gz $name"
echo $cmd
else
#cp -p $name $backup_dir/$self
tar $TAR_FLAG -c -f $backup_dir/$self.tar.gz $name 2> /dev/null
fi
else
echo "Warning: data $name is not a dir or file, skip."
fi
fi

done

return 0
}

# function to clean old backup
clean_old_backup()
{
count=0
for name in `ls $BACKUP_BASE_DIR|grep -E '[0-9]{6,6}\-[0-9]{6,6}' | sort -r`
do
count=$((count+1))
if [ $count -gt $max_old_backup ] ; then
echo -n "Cleaning old backup: $name... "
if [ "$testmode" = 1 ] ; then
echo -n "rm -fr $BACKUP_BASE_DIR/$name"
else
if [ "$BACKUP_BASE_DIR/$name" = "/" ] ; then
echo "No rm -fr /!"
exit 1
fi
rm -fr $BACKUP_BASE_DIR/$name
fi
echo " Done."
else
echo "Keeping old backup: $name"
fi
done
}

# main process

echo "prima backup util"
datestr=`date '+%Y%m%d-%H%M%S'`
echo "date: $datestr"
echo

# clean old backup
clean_old_backup

# fetch data and config to be backuped
data_to_backup=""
user_to_backup=""
mysql_to_backup=""

if [ "$CONTROL" = "1" ] ; then
data_to_backup="$data_to_backup $CONTROL_DATA_DIR"
fi

if [ "$WEB" = "1" ] ; then
if [ "$user_seperate" = "1" ] ; then
user_dirs=`ls $WEB_DATA_DIR`
for x in $user_dirs;
do
x="$WEB_DATA_DIR/$x"
if [ -d $x ] ; then
user_to_backup="$user_to_backup $x"
fi
done
else
data=`grep ^home_base $PRIMA_CONF_FILE | awk -F '=' '{print $2}' 2>/dev/null`
if [ -z "$data" ] ; then
data=$WEB_DATA_DIR
fi
data_to_backup="$data_to_backup $data"
fi
fi
if [ "$EMAIL" = "1" ] ; then
data=`grep ^mail_space_base $PRIMA_CONF_FILE | awk -F '=' '{print $2}' 2>/dev/null`
if [ -z "$data" ] ; then
data=$EMAIL_DATA_DIR
fi
data_to_backup="$data_to_backup $data"
fi
if [ "$DNS" = "1" ] ; then
data=`grep ^zonefile_base $PRIMA_CONF_FILE | awk -F '=' '{print $2}' 2>/dev/null`
if [ -z "$data" ] ; then
data=$DNS_DATA_DIR
fi
data_to_backup="$data_to_backup $data"
fi
if [ "$MYSQL" = "1" ] ; then
if [ "$mysql_seperate" = "1" ] ; then
mysql_dirs=`ls $MYSQL_DATA_DIR`
for x in $mysql_dirs;
do
x="$MYSQL_DATA_DIR/$x"
if [ -d $x ] ; then
mysql_to_backup="$mysql_to_backup $x"
fi
done
else
data_to_backup="$data_to_backup $MYSQL_DATA_DIR"
fi
fi
data=`grep ^app_names $PRIMA_CONF_FILE | grep GenComSite 2>/dev/null`
if [ ! -z "$data" ] ; then
data=$GENCOMSITE_DATA_DIR
fi
data_to_backup="$data_to_backup $data"

data=`grep ^app_names $PRIMA_CONF_FILE | grep CounterConfig 2>/dev/null`
if [ ! -z "$data" ] ; then
data=$COUNTER_DATA_DIR
fi
data_to_backup="$data_to_backup $data"

echo
echo "data_to_backup: $data_to_backup"
echo
if [ "$user_seperate" = "1" ] ; then
echo
echo "user_to_backup: $user_to_backup"
echo
fi
if [ "$mysql_seperate" = "1" ] ; then
echo
echo "mysql_to_backup: $mysql_to_backup"
echo
fi

conf_to_backup=""
if [ "$WEB" = "1" ] || [ "$EMAIL" = "1" ] || [ "$DNS" = "1" ] || [ "$MYSQL" = "1" ] ; then
conf_to_backup="$conf_to_backup $PRIMA_ETC_DIR"
fi
if [ "$WEB" = "1" ] ; then
resin=`grep ^use_mod_caucho $PRIMA_CONF_FILE | awk -F '=' '{print $2}' 2>/dev/null`
if [ -z "$resin" ] ; then
conf_to_backup="$conf_to_backup $RESIN_CONF"
fi
tomcat=`grep ^use_mod_jk $PRIMA_CONF_FILE | awk -F '=' '{print $2}' 2>/dev/null`
# if [ -z "$tomcat" ] ; then
# conf_to_backup="$conf_to_backup $TOMCAT_CONF"
# fi
fi
if [ "$EMAIL" = "1" ] ; then
conf_to_backup="$conf_to_backup $POSTFIX_CONF_DIR"
fi
if [ "$DNS" = "1" ] ; then
data=`grep ^named_conf $PRIMA_CONF_FILE | awk -F '=' '{print $2}' 2>/dev/null`
if [ -z "$data" ] ; then
data=$NAMED_CONF
fi
conf_to_backup="$conf_to_backup $data"
fi
if [ "$MYSQL" = "1" ] ; then
conf_to_backup="$conf_to_backup $PHPMYADMIN_CONF"
fi

echo
echo "conf_to_backup: $conf_to_backup"
echo

# create backup dir
if [ ! -d "$BACKUP_BASE_DIR" ] ; then
echo "Warning: backup base dir $BACKUP_BASE_DIR does not exist."
echo "I will create one for you."
fi

base_dir="$BACKUP_BASE_DIR/$datestr"
mkdir -p -m 700 $base_dir
if [ $? != 0 ] ; then
echo "Error: backup dir $base_dir create failed."
exit 1
fi

umask 066

# backup data
data_backup_dir="$base_dir/data"
mkdir -p -m 700 $data_backup_dir

backup_list "$data_to_backup" $data_backup_dir

# backup conf
conf_backup_dir="$base_dir/data/conf"
mkdir -p -m 700 $conf_backup_dir

backup_list "$conf_to_backup" $conf_backup_dir

#backup user_site
if [ "$user_seperate" = "1" ] ; then
user_backup_dir="$base_dir/data/users"
mkdir -p -m 700 $user_backup_dir
backup_list "$user_to_backup" $user_backup_dir
fi

#backup mysql
if [ "$mysql_seperate" = "1" ] ; then
mysql_backup_dir="$base_dir/data/mysql"
mkdir -p -m 700 $mysql_backup_dir
backup_list "$mysql_to_backup" $mysql_backup_dir
fi

Mysql grant 授权

Posted by – 2009-02-24

这条语句老是忘,也老是忘了做笔记,这次终于想起记了。

mysql> grant all privileges on databasename.* to databaseuser@ip_address identified by 'databasepassword' with grant option;

这是让用户databaseuser在ip_address位置对数据库databasename拥有所有权限,用户databaseuser的密码是databasepassword

mysql> grant select,insert,update,create,drop on databasename.* to databaseuser@ip_address identified by 'databasepassword';

也可以让权限细化一些

nginx+mysql+php配置

Posted by – 2009-01-19

#########################
# Nginx Configuration #########
# Author: hao32#############
# Update: 楚霏##############
# Date: 2009-1-19###########
# Env: Centos 5.2 x86_64#####
######################
一. 分区完毕后, 关闭selinux等不必要的服务等等, 重启下系统:
相关文件
/etc/selinux/config    selinux配置文件
chkconfig    管理服务
dmesg    查看系统是否有报错等信息
###########################################################

二. 配置加速yum
cd /etc/yum.repos.d
cp CentOS-Base.repo--  CentOS-Base.repo.bak
vi CentOS-Base.repo
加入内容如下:
#----------------------------引用文字-开始----------------------------
[base]
name=CentOS-5 - Base
baseurl=http://centos.ustc.edu.cn/centos/5/os/$basearch/
gpgcheck=1
gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-5

#released updates
[update]
name=CentOS-5 - Updates
baseurl=http://centos.ustc.edu.cn/centos/5/updates/$basearch/
gpgcheck=1
gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-5

#packages used/produced in the build but not released
[addons]
name=CentOS-5 - Addons
baseurl=http://centos.ustc.edu.cn/centos/5/addons/$basearch/
gpgcheck=1
gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-5
#additional packages that may be useful
[extras]
name=CentOS-5 - Extras
baseurl=http://centos.ustc.edu.cn/centos/5/extras/$basearch/
gpgcheck=1
gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-5

#additional packages that extend functionality of existing packages
[centosplus]
name=CentOS-5 - Plus
baseurl=http://centos.ustc.edu.cn/centos/5/centosplus/$basearch/
gpgcheck=1
enabled=0
gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-5

#contrib - packages by Centos Users
[contrib]
name=CentOS-5 - Contrib
baseurl=http://centos.ustc.edu.cn/centos/5/contrib/$basearch/
gpgcheck=1
enabled=0
gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-5

#packages in testing
[testing]
name=CentOS-5 - Testing
baseurl=http://centos.ustc.edu.cn/centos/5/testing/$basearch/
gpgcheck=1
enabled=0
gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-5
#----------------------------引用文字-结束----------------------------
###########################################################

三. 准备工作:
yum -y update
安装如下软件包:
yum install -y wget at ntp sysstat vim-enhanced gcc gcc-c++ flex bison autoconf automake bzip2-devel ncurses-devel libjpeg-devel libpng-devel libtiff-devel freetype-devel pam-devel curl curl-devel patch make libtool gettext-devel mlocate zlib zlib-devel compat-libstdc* libxml2 libxml2-devel openssl-devel e2fsprogs-devel krb5-devel libidn-devel *g77
###########################################################

四. 准备如下软件包(尽量都去官方站点去下载最新的release):
gd-2.0.35.tar.gz
pcre-7.8.tar.gz
libmcrypt-2.5.8.tar.bz2
libxml2-2.7.2.tar.gz
php-5.2.8-fpm-0.5.10.diff.gz
php-5.2.8.tar.bz2
mysql-5.1.30-linux-x86_64-icc-glibc23.tar.gz
nginx-0.6.34.tar.gz
eaccelerator-0.9.5.3.tar.bz2
ZendOptimizer-3.3.3-linux-glibc23-x86_64.tar.gz
###########################################################

cd /usr/local/src
wget http://www.libgd.org/releases/gd-2.0.35.tar.gz
wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-7.8.tar.gz
wget ftp://xmlsoft.org/libxml2/libxml2-2.7.2.tar.gz
wget http://php-fpm.anight.org/downloads/head/php-5.2.8-fpm-0.5.10.diff.gz
wget http://sysoev.ru/nginx/nginx-0.6.34.tar.gz
wget http://downloads.phpchina.com/zend/optimizer/3.3.3/ZendOptimizer-3.3.3-linux-glibc23-x86_64.tar.gz
wget http://bart.eaccelerator.net/source/0.9.5.3/eaccelerator-0.9.5.3.tar.bz2
下面几个软件下载后上传至服务器
#http://www.php.net/get/php-5.2.8.tar.bz2/from/a/mirror
php-5.2.8.tar.bz2

#http://nchc.dl.sourceforge.net/sourceforge/mcrypt/
#http://sourceforge.net/project/showfiles.php?group_id=87941&package_id=91774&release_id=487459
libmcrypt-2.5.8.tar.bz2

#http://dev.mysql.com/get/Downloads/MySQL-5.1/mysql-5.1.30-linux-x86_64-icc-glibc23.tar.gz/from/pick#mirrors
mysql-5.1.30-linux-x86_64-icc-glibc23.tar.gz
###########################################################

五. 开始安装过程:
tar jxvf php-5.2.8.tar.bz2
gzip -cd php-5.2.8-fpm-0.5.10.diff.gz | patch -d php-5.2.8 -p1
#编译 php 增加此参数 --enable-fpm
(1)安装GD库和PHP支持相关的库
tar xvf gd-2.0.3?.tar.gz; cd gd-2.0.3?/
./configure --prefix=/usr/local/gd2
make
make install
(2) LibXML2
cd /usr/local/src
tar zxvf libxml2-2.7.2.tar.gz; cd libxml2-2.7.2
./configure --prefix=/usr/local/libxml2
make
make install
(3) LibMcrypt
cd /usr/local/src
tar xjvf libmcrypt-2.5.8.tar.bz2; cd libmcrypt-2.5.8
./configure --prefix=/usr/local/libmcrypt
make
make install
(4) MySQL服务的安装
cd /usr/local/src
tar zxvf mysql-5.1.30-linux-x86_64-icc-glibc23.tar.gz
mv mysql-5.1.30-linux-x86_64-icc-glibc23 /usr/local/
ln -s /usr/local/mysql-5.1.30-linux-x86_64-icc-glibc23 /usr/local/mysql
useradd mysql -M
chown -R mysql:root /usr/local/mysql/
cp /usr/local/mysql/support-files/my-large.cnf /etc/my.cnf
vi /etc/my.cnf
----------------- my.cnf说明 -------------------
务必指定datadir的位置, 一般是/var/lib/mysql
------------------------------------------------
cd /usr/local/mysql
./scripts/mysql_install_db --user=mysql
cp ./support-files/mysql.server /etc/rc.d/init.d/mysqld
chmod 755 /etc/rc.d/init.d/mysqld
chkconfig --add mysqld
chkconfig --level 3 mysqld on
chown -R mysql:mysql /var/lib/mysql
cd /usr/local/mysql/bin
for i in *; do ln -s /usr/local/mysql/bin/$i /usr/bin/$i; done
(5) 编译PHP(fastcgi模式)
cd /usr/local/src/php-5.2.8
./configure --prefix=/usr/local/php-fcgi --enable-fastcgi --enable-fpm --enable-discard-path --enable-force-cgi-redirect --with-config-file-path=/usr/local/php-fcgi/etc --enable-zend-multibyte --with-mysql=/usr/local/mysql --with-libxml-dir=/usr/local/libxml2 --with-gd=/usr/local/gd2 --with-jpeg-dir --with-png-dir --with-bz2 --with-freetype-dir --with-iconv-dir --with-zlib-dir --with-curl --with-mcrypt=/usr/local/libmcrypt --enable-sysvsem --enable-inline-optimization --enable-soap --enable-gd-native-ttf --enable-ftp --enable-mbstring --enable-exif --disable-debug --disable-ipv6
make
make install
cp php.ini-dist /usr/local/php-fcgi/etc/php.ini
(6) 安装ZendOptimizer
cd /usr/local/src; tar zxvf ZendOptimizer-3.3.?-linux-glibc23-x86_64.tar.gz
cd ZendOptimizer-3.3.?-linux-glibc23-x86_64; ./install
----------------- 安装ZendOptimizer说明 ------------------
基本上是一直回车, 值得注意一点的是:
当您看到要选择php的路径时就写:
/usr/local/php-fcgi/etc
看到Are you using Apache Web server?
选NO
-----------------------------------------------------------
(7) 安装eaccelerator
cd ../ ;tar jxvf eaccelerator-0.9.?.?.tar.bz2
cd eaccelerator-0.9.?.?
/usr/local/php-fcgi/bin/phpize
./configure --enable-eaccelerator=shared --with-php-config=/usr/local/php-fcgi/bin/php-config
make
make install
mkdir /tmp/eaccelerator && chmod 777 /tmp/eaccelerator && touch /var/log/eaccelerator_log && mkdir /usr/local/php-fcgi/ext
mv /usr/local/php-fcgi/lib/php/extensions/no-debug-non-zts-20060613/eaccelerator.so /usr/local/php-fcgi/ext/

(8) 编辑php.ini
mv /usr/local/php-fcgi/etc/php.ini /usr/local/php-fcgi/etc/php.ini.chushibak
#把extension_dir = "./" 修改成: extension_dir = "/usr/local/php-fcgi/ext/"
sed 's/extension_dir = "./"/extension_dir = "/usr/local/php-fcgi/ext/"/g' /usr/local/php-fcgi/etc/php.ini.chushibak >>/usr/local/php-fcgi/etc/php.ini
cat <<EOF>>/usr/local/php-fcgi/etc/php.ini
#----------------------------引用文字-开始----------------------------
extension=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.log_file = "/var/log/eaccelerator_log"
eaccelerator.filter=""
eaccelerator.shm_max="0"
eaccelerator.shm_ttl="0"
eaccelerator.shm_prune_period="0"
eaccelerator.shm_only="0"
eaccelerator.compress="1"
eaccelerator.compress_level="9"
EOF
#----------------------------引用文字-结束----------------------------
(7) 创建nginx运行用户和虚拟主机目录
groupadd www -g 78 ; useradd -u 78 -g www www -M
mkdir -p /www/wwwroot/test.com
chown  www:www /www/wwwroot
(8) nginx的安装与配置
安装Nginx所需的pcre库:
tar xvf pcre-7.8.tar.gz ; cd pcre-7.8/
./configure
make && make install
安装Nginx:
cd /usr/local/src ; tar xvf nginx-0.6.3?.tar.gz ; cd nginx-0.6.3?
./configure --prefix=/usr/local/nginx --sbin-path=/usr/local/nginx/sbin/nginx --conf-path=/usr/local/nginx/conf/nginx.conf --error-log-path=/usr/local/nginx/logs/error.log  --http-log-path=/usr/local/nginx/logs/access.log --pid-path=/usr/local/nginx/var/nginx.pid --lock-path=/usr/local/nginx/var/nginx.lock --without-select_module --without-poll_module --with-http_realip_module --with-http_sub_module   --with-http_gzip_static_module --with-http_stub_status_module --without-http_ssi_module --without-http_userid_module --without-http_geo_module --without-http_memcached_module --without-http_map_module --without-mail_pop3_module --without-mail_imap_module --without-mail_smtp_module
make && make install
cd /usr/local/nginx/conf/ ; cp nginx.conf nginx.conf.bak
vi nginx.conf
加入以下内容(事例):
#----------------------------引用文字-开始----------------------------
daemon on;
user www www;
worker_rlimit_nofile 8192;
worker_processes 4;
error_log logs/error.log error;
#pid var/nginx.pid;
lock_file var/nginx.lock;
events {
worker_connections  4096;
use epoll;
multi_accept on;
}
http {
include       mime.types;
default_type  application/octet-stream;
server_names_hash_max_size 512;
server_names_hash_bucket_size 128;
sendfile       off;
tcp_nopush     off;
tcp_nodelay    on;
keepalive_timeout  3;
client_max_body_size  2m;
client_header_timeout 30;
client_body_timeout   30;
send_timeout          30;
fastcgi_connect_timeout 300;
fastcgi_send_timeout    300;
fastcgi_read_timeout    300;
client_header_buffer_size    1k;
large_client_header_buffers  4 4k;
gzip_static on;
gzip_min_length  1024;
gzip_buffers     4 8k;
gzip_http_version 1.1;
gzip_comp_level 1;
gzip_types text/plain text/css application/x-javascript text/xml application/xml application/xml+rss text/javascript;
log_format main '$remote_addr - $remote_user [$time_local] $request '
'"$status" $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log logs/access.log combined;
# include virtual host config
include vhosts/test.com;
}
#----------------------------引用文字-结束----------------------------
mkdir vhost
vi test.com
添加如下内容(事例):
#----------------------------引用文字-开始----------------------------
server {
listen       80;
server_name test.com www.test.com;
access_log  logs/test.com-access.log combined buffer=32k;
error_log   logs/test.com-error.log crit;
location / {
index           index.html index.htm index.php;
root            /www/wwwroot/test.com;
}
location ~ .php$ {
include fastcgi_params;
fastcgi_pass  unix:/tmp/php-fcgi.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /www/wwwroot/test.com$fastcgi_script_name;
}

}
#----------------------------引用文字-结束----------------------------

编辑fpm配置文件:
vi /usr/local/php-fcgi/etc/php-fpm.conf
加入如下内容:
#----------------------------引用文字-开始----------------------------
<?xml version="1.0" ?>
<configuration>
<section name="global_options">
<value name="pid_file">/usr/local/php-fcgi/logs/php-fpm.pid</value>
<value name="error_log">/usr/local/php-fcgi/logs/php-fpm.log</value>
<value name="log_level">notice</value>
<value name="emergency_restart_threshold">10</value>
<value name="emergency_restart_interval">1m</value>
<value name="process_control_timeout">5s</value>
<value name="daemonize">yes</value>
</section>
<workers>
<section name="pool">
<value name="name">default</value>
<value name="listen_address">/tmp/php-fcgi.sock</value>
<value name="listen_options">
<value name="backlog">-1</value>
<value name="owner">www</value>
<value name="group">www</value>
<value name="mode">0666</value>
</value>.
<value name="php_defines">
<!--            <value name="sendmail_path">/usr/sbin/sendmail -t -i</value>            -->
<!--            <value name="display_errors">0</value>                                                          -->
</value>
<value name="user">www</value>
<value name="group">www</value>
<value name="pm">
<value name="style">static</value>
<value name="max_children">100</value>
<value name="apache_like">
<value name="StartServers">20</value>
<value name="MinSpareServers">5</value>
<value name="MaxSpareServers">35</value>
</value>
</value>
<value name="request_terminate_timeout">31s</value>
<value name="request_slowlog_timeout">0s</value>
<value name="slowlog">logs/slow.log</value>
<value name="rlimit_files">4096</value>
<value name="rlimit_core">0</value>
<value name="chroot"></value>
<value name="chdir"></value>
<value name="catch_workers_output">yes</value>
<value name="max_requests">500</value>
<value name="allowed_clients">127.0.0.1</value>
<value name="environment">
<value name="HOSTNAME">$HOSTNAME</value>
<value name="PATH">/usr/local/bin:/usr/bin:/bin</value>
<value name="TMP">/tmp</value>
<value name="TMPDIR">/tmp</value>
<value name="TEMP">/tmp</value>
<value name="OSTYPE">$OSTYPE</value>
<value name="MACHTYPE">$MACHTYPE</value>
<value name="MALLOC_CHECK_">2</value>
</value>
</section>
</workers>
</configuration>
#----------------------------引用文字-结束----------------------------
创建nginx的启动脚本:
vi /etc/init.d/nginx
#----------------------------引用文字-开始----------------------------
#! /bin/bash
#
# nginx          Start/Stop the nginx daemon.
#
# chkconfig: 2345 90 60
# description: nginx
# processname: nginx
# config: /usr/local/nginx/conf/nginx.conf
# pidfile: /usr/local/nginx/logs/nginx.pid

# Source function library.
. /etc/init.d/functions

# Nginx Settings
NGX_PID_FILE='/usr/local/nginx/var/nginx.pid'
NGX_PROC='/usr/local/nginx/sbin/nginx'
NGX_LOCK_FILE='/var/lock/subsys/nginx'
PHP_FPM='/usr/local/php-fcgi/sbin/php-fpm'

# Progran name
prog="nginx"

start() {
ulimit -HSn 65536
echo -n $"Starting $prog: "
if [ -e $NGX_LOCK_FILE ]; then
if [ -e $NGX_PID_FILE ] && [ -e /proc/`cat $NGX_PID_FILE` ]; then
echo -n $"cannot start $prog: nginx is already running."
failure $"cannot start $prog: nginx is already running."
echo
return 1
fi
fi
$NGX_PROC
RETVAL=$?
[ $RETVAL -eq 0 ] && success $"$prog start" || failure $"$prog start"
[ $RETVAL -eq 0 ] && touch $NGX_LOCK_FILE
echo

#php-fpm
$PHP_FPM start
return $RETVAL
}

stop() {
echo -n $"Stopping $prog: "
if [ ! -e $NGX_LOCK_FILE ] || [ ! -e $NGX_PID_FILE ]; then
echo -n $"cannot stop $prog: nginx is not running."
failure $"cannot stop $prog: nginx is not running."
echo
return 1
fi
PID=`cat $NGX_PID_FILE`
if checkpid $PID 2>&1; then
# TERM first, then KILL if not dead
kill -TERM $PID >/dev/null 2>&1
usleep 100000
if checkpid $PID && sleep 1 && checkpid $PID && sleep 3 && checkpid $PID; then
kill -KILL $PID >/dev/null 2>&1
usleep 100000
fi
fi
checkpid $PID
RETVAL=$((! $?))
[ $RETVAL -eq 0 ] && success $"$prog shutdown" || failure $"$prog shutdown"
[ $RETVAL -eq 0 ] && rm -f $NGX_LOCK_FILE;
echo

#php-fpm
$PHP_FPM stop
return $RETVAL
}

status() {
status $prog
}

restart() {
stop
start
}

reload() {
echo -n $"Reloading $prog: "
if [ ! -e $NGX_LOCK_FILE ] || [ ! -e $NGX_PID_FILE ]; then
echo -n $"cannot reload $prog: nginx is not running."
failure $"cannot reload $prog: nginx is not running."
echo
return 1
fi
kill -HUP `cat $NGX_PID_FILE` >/dev/null 2>&1
RETVAL=$?
[ $RETVAL -eq 0 ] && success $"$prog reload" || failure $"$prog reload"
echo
return $RETVAL
}

case "$1" in
start)
start
;;
stop)
stop
;;
restart)
restart
;;
reload)
reload
;;
status)
status
;;
condrestart)
[ -f $NGX_LOCK_FILE ] && restart || :
;;
configtest)
$NGX_PROC -t
;;
*)
echo $"Usage: $0 {start|stop|status|reload|restart|condrestart|configtest}"
exit 1
esac
#----------------------------引用文字-结束----------------------------
chmod 755 /etc/init.d/nginx
chkconfig --add nginx
chkconfig --level 3 nginx on
启动nginx:
service nginx start
启动mysql:
service mysqld restart

设定mysql的root密码
mysql> update mysql.user set password=PASSWORD('新密码') where User='root';
mysql> flush privileges;
mysql> quit