整合nginx,tomcat,mysql的安装与配置
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了整合nginx,tomcat,mysql的安装与配置相关的知识,希望对你有一定的参考价值。
linux下nginx+tomcat+mysql整合的安装与配置维护
安装Tomcat和JDK
上传apache-tomcat-6.0.18.tar.gz和jdk-6u12-linux-i586.bin至/usr/local
执行如下命令安装tomcat #cd /usr/local #tar zxvf apache-tomcat-6.0.18.tar.gz
解压完成后将apache-tomcat-6.0.18重命名为tomcat
执行如下命令安装JDK:
设置权限chmod 777 jdk-1_6_0_14-linux-i586-rpm.bin
#./jdk-6u12-linux-i586.bin
配置环境变量
编辑/etc下的profile文件加上如下内容
JAVA_HOME="/usr/local/jdk1.6.0_12"
CLASS_PATH="$JAVA_HOME/lib:$JAVA_HOME/jre/lib"
PATH=".:$PATH:$JAVA_HOME/bin "
CATALINA_HOME="/usr/local/tomcat"
export JAVA_HOME CATALINA_HOME
启动tomcat并输入http://localhost:8080如果看到猫的页面即tomcat和jdk安装成功
新建文件目录/home/www为网站存放目录设置server.xml文件在Host name="localhost"处将appBase=的指向路径改为/home/www/web
工程网站路径为:/home/www/web
访问控制
vi /etc/sysconfig/iptables 添加
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 8079 -j ACCEPT
安装Nginx
上传nginx-0.7.63.tar.gz至/usr/local
执行如下命令解压nginx
#cd /usr/local
#tar zxvf nginx-0.7.63.tar.gz
编译安装nginx
#cd nginx-0.7.63
#./configure --with-http_stub_status_module --with-http_ssl_module #启动server状态页和https模块
执行完后会提示一个错误说缺少PCRE library 这个是HTTP Rewrite 模块也即是url静态化的包可上传pcre-7.9.tar.gz输入如下命令安装
tar zxvf pcre-7.9.tar.gz
#cd pcre-7.9
#./configure
#make
#make install
安装pcre成功后继续安装nginx
#cd nginx-0.7.63
#./configure
#make
#make install
安装pcre需要安装更新gcc,命令yum install gcc
nginx安装成功后的安装目录为/usr/local/nginx
安装时会出现报错
错误提示./configure: error: the HTTP cache module requires md5 functions
from OpenSSL library. You can either disable the module by using
--without-http-cache option, or install the OpenSSL library into the system,
or build the OpenSSL library statically from the source with nginx by using
--with-http_ssl_module --with-openssl=<path> options.
解决办法yum -y install pcre-devel openssl openssl-devel
在conf文件夹中新建proxy.conf用于配置一些代理参数内容如下
#!nginx (-)
# proxy.conf
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr; #获取真实ip
#proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; #获取代理者的真实ip
client_max_body_size 10m;
client_body_buffer_size 128k;
proxy_connect_timeout 90;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_buffer_size 4k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;
编辑安装目录下conf文件夹中的nginx.conf输入如下内容
user www www;
worker_processes 8;
error_log /usr/local/nginx/logs/nginx_error.log crit;
pid /usr/local/nginx/nginx.pid;
#Specifies the value for maximum file descriptors that can be opened by this process.
worker_rlimit_nofile 65535;
events
{
use epoll;
worker_connections 65535;
}
http
{
include mime.types;
default_type application/octet-stream;
charset utf-8;
server_names_hash_bucket_size 128;
client_header_buffer_size 32k;
large_client_header_buffers 4 32k;
client_max_body_size 300m;
sendfile on;
tcp_nopush on;
keepalive_timeout 60;
tcp_nodelay on;
client_body_buffer_size 512k;
proxy_connect_timeout 5;
proxy_read_timeout 60;
proxy_send_timeout 5;
proxy_buffer_size 16k;
proxy_buffers 4 64k;
proxy_busy_buffers_size 128k;
proxy_temp_file_write_size 128k;
gzip on;
gzip_min_length 1k;
gzip_buffers 4 16k;
gzip_http_version 1.1;
gzip_comp_level 2;
gzip_types text/plain application/x-javascript text/css application/xml;
gzip_vary on;
upstream tomcat_server {
server 127.0.0.1:8080;
}
server
{
listen 80;
server_name www.yourdomain.com;
index index.html index.htm index.jsp default.jsp index.do default.do;
root /data0/htdocs/www;
if (-d $request_filename)
{
rewrite ^/(.*)([^/])$ http://$host/$1$2/ permanent;
}
location ~ \.(jsp|jspx|do)?$ {
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_pass http://tomcat_server;
}
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
{
expires 30d;
}
location ~ .*\.(js|css)?$
{
expires 1h;
}
access_log off;
}
}
修改/usr/local/nginx/conf/nginx.conf配置文件后请执行以下命令检查配置文件是否正确
#/usr/local/nginx/sbin/nginx -t
如果屏幕显示以下两行信息说明配置文件正确
the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
the configuration file /usr/local/nginx/conf/nginx.conf was tested successfully
如果提示unknown host则可在服务器上执行ping www.baidu.com如果也是同样提示unknown host则有两种可能
a、服务器没有设置DNS服务器地址查看/etc/resolv.conf下是否设置若无则加上
b、防火墙拦截
Nginx与tomcat维护命令
Nginx
启动nginx的命令
#/usr/local/nginx/sbin/nginx
这时输入以下命令查看Nginx主进程号
停止nginx的命令
#/usr/local/nginx/sbin/nginx -s stop
在不停止Nginx服务的情况下平滑变更Nginx配置
a、修改/usr/local/nginx/conf/nginx.conf配置文件后请执行以下命令检查配置文件是否正确
/usr/local/nginx/sbin/nginx –t
如果屏幕显示以下两行信息说明配置文件正确
the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
the configuration file /usr/local/nginx/conf/nginx.conf was tested successfully
b、这时输入以下命令查看Nginx主进程号
ps -ef | grep "nginx: master process" | grep -v "grep" | awk -F ‘ ‘ ‘{print $2}‘
屏幕显示的即为Nginx主进程号例如
6302
这时执行以下命令即可使修改过的Nginx配置文件生效
kill -HUP 6302
或者无需这么麻烦找到Nginx的Pid文件
kill -HUP `cat /usr/local/nginx/nginx.pid`
nginx启动好后启动tomcat此时输入http://主机ip地址即可看到“My web!”
三、其他
stub_status
语法: stub_status on
默认值: None
作用域: location
创建一个 location 区域启用 stub_status
"stub status" 模块返回的状态信息跟 mathopd‘s 的状态信息很相似. 返回的状态信息如下
Active connections: 291
server accepts handled requests
16630948 16630948 31070465
Reading: 6 Writing: 179 Waiting: 106
active connections -- 对后端发起的活动连接数
server accepts handled requests -- nginx 总共处理了 16630948 个连接, 成功创建 16630948 次握手 (证明中间没有失败的), 总共处理了 31070465 个请求 (平均每次握手处理了 1.8个数据请求)
reading -- nginx 读取到客户端的Header信息数
writing -- nginx 返回给客户端的Header信息数
waiting -- 开启 keep-alive 的情况下这个值等于 active - (reading + writing)意思就是Nginx说已经处理完正在等候下一次请求指令的驻留连接
Tomcat维护命令
Tomcat假死自动定时重起脚本
脚本代码
#!/bin/sh
export JAVA_HOME=/usr/local/jdk/
pid=`ps auxww|grep tomcat|grep -v grep|awk ‘{print $2}‘`
echo $pid
if [ -n "$pid" ];
then
{
echo "==========tomcat is start============"
‘/usr/java/tomcat/bin/shutdown.sh‘
sleep 5
‘/usr/java/tomcat/bin/shutdown.sh‘
sleep 15
pid=`ps auxww|grep tomcat|grep -v grep|awk ‘{print $2}‘`
if [ -n "$pid" ];
then
{
echo "======to kill the tomcat pid $pid========"
kill $pid
sleep 3
}
fi
echo "==========start tomcat============"
‘/usr/java/tomcat/bin/startup.sh‘
}
else
{
echo "==========tomcat is stop=====start======="
‘/usr/java/tomcat/bin/startup.sh‘
}
fi
将tomcat路径指向正确利用crontab进行轮循调用
Mysql安装
安装相关库文件
yum install bison gcc gcc-c++ autoconf automake zlib* libxml* ncurses-devel libtool-ltdl-devel*
安装wget/ntsysv/patch/make
yum install wget
yum install ntsysv
yum install patch
yum install make
编译安装 MySQL
tar zxvf mysql-5.1.57.tar.gz && cd mysql-5.1.57
./configure --prefix=/usr/local/webserver/mysql/ --enable-assembler --with-extra-charsets=complex --enable-thread-safe-client --with-big-tables --with-readline --with-ssl --with-embedded-server --enable-local-infile
make && make install && cd ..
创建mysql用户组创建数据库、日志等存储目录并赋予权限
mkdir -p /data/mysqldata
mkdir -p /data/mysqldata/database
mkdir -p /data/mysqldata/log
mkdir -p /data/mysqldata/pid
groupadd mysql
useradd -g mysql -d /data/mysqldata/database -s /sbin/nologin mysql
chgrp -R mysql /usr/local/webserver/mysql/.
chown -R root:mysql /usr/local/webserver/mysql/*
chown -R mysql:mysql /data/mysqldata/*
修改/etc/my.cnf文件参数参数适用于大于2G内存服务器
[client]
port = 3306
socket = /tmp/mysql.sock
[mysqld]
user = mysql
port = 3306
socket = /tmp/mysql.sock
basedir = /usr/local/webserver/mysql
datadir = /data/mysqldata/database
log-error = /data/mysqldata/log/mysql_error.log
pid-file = /data/mysqldata/pid/mysql.pid
skip-external-locking
skip-name-resolve
back_log = 500
key_buffer_size = 256M
max_allowed_packet = 32M
thread_stack = 192K
table_cache = 256
sort_buffer_size = 4M
read_buffer_size = 4M
join_buffer_size = 4M
read_rnd_buffer_size = 8M
myisam_sort_buffer_size = 64M
thread_cache = 128
thread_cache_size = 10
query_cache_size = 32M
tmp_table_size = 128M
max_connections = 5000
wait_timeout = 60
max_connect_errors = 6000
expire_logs_days = 30
server-id = 1
[mysqldump]
quick
max_allowed_packet = 32M
[mysql]
no-auto-rehash
初始化MySQL服务 /usr/local/webserver/mysql/bin/mysql_install_db --basedir=/usr/local/webserver/mysql --datadir=/data/mysqldata/database --user=mysql
启动MySQL服务/usr/local/webserver/mysql/bin/mysqld_safe --user=mysql & 启动服务/usr/local/webserver/mysql/bin/mysqladmin -u root -p shutdown 停止服务
修改root密码/usr/local/webserver/mysql/bin/mysqladmin -u root password ‘yourpassword’
Mysql维护
# cp support-files/mysql.server /etc/init.d/mysql
# chmod 755 /etc/init.d/mysql // 给 mysql 这个文件赋予“执行”权限
# chkconfig --add mysql // 加入到开机自动运行
# service mysql restart // 重新启动 MySQL
授权操作
改表法。可能是你的帐号不允许从远程登陆只能在localhost。这个时候只要在localhost的那台电脑登入mysql后更改 “mysql” 数据库里的 “user” 表里的 “host” 项从“localhost”改称“%”
代码
mysql -u root -pvmwaremysql>use mysql;
mysql>update user set host = ‘%’ where user = ‘root’;
mysql>select host, user from user;
mysql>FLUSH PRIVILEGES
2. 授权法。例如你想myuser使用mypassword从任何主机连接到mysql服务器的话。
代码GRANT ALL PRIVILEGES ON *.* TO ‘myuser’@‘%’ IDENTIFIED BY ‘mypassword’ WITH GRANT OPTION;
如果你想允许用户myuser从ip为192.168.1.6的主机连接到mysql服务器并使用mypassword作为密码GRANT ALL PRIVILEGES ON *.* TO ‘root’ @ ‘192.168.0.141’ IDENTIFIED BY ‘root’ WITH GRANT OPTION;
MySQL(root用户)密码重置
1、首先停止正在运行的MySQL进程
Linux下,运行 killall -TERM mysqld
2、以安全模式启动MySQL
Linux下运行 /usr/local/mysql/bin/mysqld_safe --skip-grant-tables &
3、完成以后就可以不用密码进入MySQL了
Linux下运行 /usr/local/mysql/bin/mysql -u root -p 进入
4、更改密码
>use mysql
>update user set password=password("新密码") where user="root";
>flush privileges;
自动数据备份
mysql_databasename_backup.sh内容
#!/bin/bash
extdir=‘/home/mysql/backup/‘;
extbase=‘auto_databasename_‘`date ‘+%F‘`;echo $extbase;
extfile=‘auto_databasename_‘`date ‘+%F‘`‘.sql‘;echo $extfile;
echo "开始备份数据..."
cd $extdir
mysqldump --opt databasename -u username -ppassword | gzip > $extdir$extfile.gz
#删除以往多少天的数据
echo "删除本地7天前的备份数据..."
old_file=‘auto_databasename_‘`date ‘+%F‘ --date=‘7 days ago‘`‘.*‘
echo $old_file
rm –rf $extdir$old_file
利用crontab进行轮循使用
数据表的碎片整理
数据量大并且经常修改每周或都每月进行
手动命令optimize table table_name
自动整理碎片脚本
Shell脚本代码
#!/bin/sh
mysql_user=root
mysql_pass=root
time_log=/opt/time
databases=/opt/databases
/usr/local/mysql/bin/mysql -u$mysql_user -p$mysql_pass -e "show databases" | grep -v "Database" > /opt/databases
sed -i "s/information_schema//" $databases
sed -i "s/mysql//" $databases
sed -i "s/test//" $databases
databases1=$(cat /opt/databases)
for i in $databases1
do
echo "database $i starting"
tables=$(/usr/local/mysql/bin/mysql $i -u$mysql_user -p$mysql_pass -e "show tables" | grep -v "Tables" > /opt/$i)
tablelist=$(cat /opt/$i)
echo "optimize database $i starting" >> $time_log
echo "$i start at $(date +[%Y/%m/%d/%H:%M:%S])" >> $time_log
for list in $tablelist
do
echo $list
/usr/local/mysql/bin/mysql $i -u$mysql_user -p$mysql_pass -e "optimize table $list"
done
echo "$i end at $(date +[%Y/%m/%d/%H:%M:%S])" >> $time_log
echo >> $time_log
done
附MYSQL命令合集
还原一个数据库:mysql -h localhost -u root -p123456 www
备份一个数据库:mysqldump -h localhost -u root -p123456 www > d:\www2008-2-26.sql
其中WWW为数据库名
以下是在程序中进行测试
$command = “mysqldump –opt -h $dbhost -u $dbuser -p $dbpass $dbname | gzip > $backupFile”;
$command=”mysqldump -h localhost -u root -p123456 guestbook > guestbook2-29.sql”;
system($command);
echo “success”;
备份MySQL数据库的命令
mysqldump -hhostname -uusername -ppassword databasename > backupfile.sql
备份MySQL数据库为带删除表的格式能够让该备份覆盖已有数据库而不需要手动删除原有数据库。
mysqldump -–add-drop-table -uusername -ppassword databasename > backupfile.sql
直接将MySQL数据库压缩备份
mysqldump -hhostname -uusername -ppassword databasename | gzip > backupfile.sql.gz
备份MySQL数据库某个(些)表
mysqldump -hhostname -uusername -ppassword databasename specific_table1 specific_table2 > backupfile.sql
同时备份多个MySQL数据库
mysqldump -hhostname -uusername -ppassword –databases databasename1 databasename2 databasename3 > multibackupfile.sql
仅仅备份数据库结构
mysqldump –no-data –databases databasename1 databasename2 databasename3 > structurebackupfile.sql
备份服务器上所有数据库
mysqldump –all-databases > allbackupfile.sql
还原MySQL数据库的命令
mysql -hhostname -uusername -ppassword databasename < backupfile.sql
还原压缩的MySQL数据库
gunzip < backupfile.sql.gz | mysql -uusername -ppassword databasename
将数据库转移到新服务器
mysqldump -uusername -ppassword databasename | mysql –host=*.*.*.* -C databasename
几个常用用例
1.导出整个数据库
mysqldump -u 用户名 -p 数据库名 > 导出的文件名
mysqldump -u root -p dataname >dataname.sql
这个时候会提示要你输入root用户名的密码,输入密码后dataname数据库就成功备份在mysql/bin/目录中.
2.导出一个表
mysqldump -u 用户名 -p 数据库名 表名> 导出的文件名
mysqldump -u root -p dataname users> dataname_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
mysqldump支持下列选项
–add-locks
在每个表导出之前增加LOCK TABLES并且之后UNLOCK TABLE。(为了使得更快地插入到MySQL)。
–add-drop-table
在每个create语句之前增加一个drop table。
–allow-keywords
允许创建是关键词的列名字。这由表名前缀于每个列名做到。
-c, –complete-insert
使用完整的insert语句(用列名字)。
-C, –compress
如果客户和服务器均支持压缩压缩两者间所有的信息。
–delayed
用INSERT DELAYED命令插入行。
-e, –extended-insert
使用全新多行INSERT语法。给出更紧缩并且更快的 以上是关于整合nginx,tomcat,mysql的安装与配置的主要内容,如果未能解决你的问题,请参考以下文章