LNMP

操作系统版本

uname -a
Linux CentOS 2.6.32-358.el6.x86_64 #1 SMP Fri Feb 22 00:31:26 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux

软件包版本

php-5.5.5.tar.bz2
mysql-5.5.3-m3.tar.gz
nginx-1.4.3.tar.gz




安装前的准备

确保系统安装了以下软件:
gcc GNU 编译器集合
autoconf 一个用于生成可以自动地配置软件源码包的shell脚本的工具
libjpeg libjpeg-devel 开源库,JPEG编解码功能实现 libpng libpng-devel 开源库,支持对 PNG 图形文件的创建、读写等操作
freetype freetype-devel 开源的、高质量的且可移植的字体引擎,它提供统一的接口来访问多种字体格式文件libxml2 libxml2-devel 一个xml c语言版的解析器
zlib zlib-devel 数据压缩库
glibc glibc-devel  GNU的libc (C运行库)
glib2 glib2-devel 集成了很多方便的系统函数,GTK+的基础库
bzip2 bzip2-devel 一个基于Burrows-Wheeler 变换的无损压缩软件
curl curl-devel 利用URL语法在命令行方式下工作的开源文件传输工具
e2fsprogs e2fsprogs-devel 包含了诸如创建、修复、配置、调试ext2/3/4文件系统的标准工具
krb5-libs krb5-devel Kerberos协议库
libidn libidn-devel 是一款通过IETF国际域名(IDN)实施字符串预处理、Punycode 和 IDNA规格定义的工具它用于国际化的字符串(如域名标签,用户名和密码),以增加字符串输入和字符串比较的工作。openssl openssl-devel 开源SSL实现
openldap openldap-devel nss_ldap openldap-clients openldap-servers 开源LDAP的实现

3 ibmcrypt 加密算法扩展库。支持DES, 3DES, RIJNDAEL, Twofish, IDEA, GOST, CAST-256, ARCFOUR, SERPENT, SAFER+等算法

eAccelerator 开源php加速器,优化和动态内容缓存,提高了php脚本的缓存性能。


Nginx安装

Nginx需要的库
pcre 轻量级正则表达式库

wget http://blog.s135.com/soft/linux/nginx_php/pcre/pcre-8.10.tar.gz

安装后会报错ibtool: line 990: g++: command not found 

yum install gcc-c++

libtool: link: unsupported hardcode properties
libtool: link: See the libtool documentation for more information.
libtool: link: Fatal configurationerror.

--------------------------------------------------------------

/usr/bin/ld: .libs/pcrecpp.o: relocation R_X86_64_32S against `.bss'can not be used when making a shared object; recompile with -fPIC
.libs/pcrecpp.o:could not read symbols: Bad value

./configure --disable-shared --with-pic 

libevent 一个事件触发的网络库,跨平台,内部使用select、epoll、kqueue等系统调用管理事件机制,Ngnix使用epoll调度,下载地址http://libevent.org/






MySQL

所需要的软件包:
ncurses ncurses-devel 终端字符控制

MySQL编译安装

解压源码包

tar zxvf mysql-5.5.3-m3.tar.gz
cd mysql-5.5.3-m3

添加账户和组

/usr/sbin/groupadd mysql
/usr/sbin/useradd -g mysql mysql

1采用configure方式编译 

./configure
--prefix=/usr/local/webserver/mysql/ \  
--enable-assembler \  /*--enable-assembler选项的功能是使用一些字符函数的汇编版本。字符处理较多的业务能带来显著的性能提升。*/ 新版移除了此功能
--with-extra-charsets=complex \
--enable-thread-safe-client \   cmake中永远是thread-safe,所以不需要此选项
--with-big-tables \  cmake无此项,默认是大表
--with-readline \     要采用rpm方式安装ncurses 
--with-ssl \     要采用rpm方式安装openssl 
--with-embedded-server \ 嵌入式服务器
--enable-local-infile \   /* 允许服务器端执行LOAD DATA LOCAL命令, LOAD DATA命令可以将服务器上的一个文本文件的内容插入到一个表中,LOCAL关键字可以让mysql从客户端的文本文件中读取内容 */
--with-plugins=partition,innobase,myisam,mrg 各种存储引擎、分区功能
make && make install


 2 采用cmake安装方式
在mysql5.5版本后默认采用此方式替代以前的configure方式编译,cmake效率更高、跨平台并且适合大型软件工程
采用cmake编译需要安装这些包cmake、bison、gcc-c++
编译选项查看命令

cmake . -LH 
#或者
ccmake .

编译 

cmake -DCMAKE_INSTALL_PREFIX=/usr/local/webserver/mysql/  
-DWITH_READLINE=1  
-DWITH_SSL=system  
-DWITH_EMBEDDED_SERVER=1  
-DENABLED_LOCAL_INFILE=1  
   -DWITH_INNOBASE_STORAGE_ENGINE=1  
-DWITH_PARTITION_STORAGE_ENGINE=1   
-DSYSCONFDIR=/data/mysql/my.cnf    
  注意:可用引擎有   ARCHIVE     BLACKHOLE     EXAMPLE     FEDERATED     INNOBASE    (   InnoDB   ),    NDBCLUSTER   (   NDB   ),    PARTITION    (partitioning support), and    PERFSCHEMA     ,强制安装的引擎有   MyISAM     MERGE     MEMORY   , and    CSV  

一些默认值

-DEXTRA_CHARSETS=all
 -DCMAKE_INSTALL_PREFIX=/usr/local/mysql
 -DSYSCONFDIR=/etc
 -DMYSQL_UNIX_ADDR=/tmp/mysqld.sock
 -DMYSQL_TCP_PORT=3306 

参考
http://dev.mysql.com/doc/refman/5.5/en/source-configuration-options.html
http://blog.csdn.net/seteor/article/details/7249513
http://blog.163.com/lgh_2002/blog/static/4401752620119194214580/
若编译过程中产生错误:

mysqld.cc:5180: error: invalid conversion from ‘size_socket*’ to ‘socklen_t*’

执行make clean && rm -f CMakeCache.txt 再次编译即可
编译完成后进行安装

make && make install

MySQL配置
chmod +w /usr/local/webserver/mysql #添加写权限
chown -R mysql:mysql /usr/local/webserver/mysql #改变mysql目录的属组和属主为mysql
mkdir -p /data/mysql/{data,binlog,relaylog}  #创建数据库存放目录
chown -R mysql:mysql /data/mysql/ #改变属主为mysql 
#定义数据路径,初始化授权表,用mysql账户启动服务
/usr/local/webserver/mysql/bin/mysql_install_db --basedir=/usr/local/webserver/mysql --datadir=/data/mysql/data --user=mysql

如果有提示

WARNING: The host '' could not be looked up with resolveip. This probably means that your libc libraries are not 100 % compatible with this binary MySQL version. The MySQL daemon, mysqld, should work normally with the exception that host name resolving will not work. This means that you should use IP addresses instead of hostnames when specifying MySQL privileges !

说明libc库和当前版本的mysql二进制代码不是100%兼容,授权的时候不能使用域名只能用ip,如grant * on root@ IP

#创建my.cnf配置文件
vi /data/mysql/my.cnf 或者cp support-files/my-medium.cnf /data/mysql/my.cnf

内容如下:

[client]
character-set-server = utf8
port    = 3306
socket  = /tmp/mysql.sock

[mysqld]
character-set-server = utf8
replicate-ignore-db = mysql
replicate-ignore-db = test
replicate-ignore-db = information_schema
user    = mysql
port    = 3306
socket  = /tmp/mysql.sock
basedir = /usr/local/webserver/mysql
datadir = /data/mysql/data
log-error =  /data/mysql /mysql_error.log
pid-file = /data/mysql/mysql.pid
open_files_limit    = 10240
back_log = 600
max_connections = 5000
max_connect_errors = 6000
table_cache = 614
external-locking = FALSE
max_allowed_packet = 32M
sort_buffer_size = 1M
join_buffer_size = 1M
thread_cache_size = 300
#thread_concurrency = 8
query_cache_size = 512M
query_cache_limit = 2M
query_cache_min_res_unit = 2k
default-storage-engine = MyISAM
thread_stack = 192K
transaction_isolation = READ-COMMITTED
tmp_table_size = 246M
max_heap_table_size = 246M
long_query_time = 3
log-slave-updates
log-bin = /data/mysql/binlog/binlog
binlog_cache_size = 4M
binlog_format = MIXED
max_binlog_cache_size = 8M
max_binlog_size = 1G
relay-log-index = /data/mysql/relaylog/relaylog
relay-log-info-file = /data/mysql /relaylog/relaylog
relay-log = /data/mysql/relaylog/relaylog
expire_logs_days = 30
key_buffer_size = 256M
read_buffer_size = 1M
read_rnd_buffer_size = 16M
bulk_insert_buffer_size = 64M
myisam_sort_buffer_size = 128M
myisam_max_sort_file_size = 10G
myisam_repair_threads = 1
myisam_recover


interactive_timeout = 120
wait_timeout = 120


skip-name-resolve
#master-connect-retry = 10
slave-skip-errors = 1032,1062,126,1114,1146,1048,1396


#master-host     =   192.168.1.2
#master-user     =   username
#master-password =   password
#master-port     =  3306


server-id = 1


innodb_additional_mem_pool_size = 16M
innodb_buffer_pool_size = 512M
innodb_data_file_path = ibdata1:256M:autoextend
innodb_file_io_threads = 4
innodb_thread_concurrency = 8
innodb_flush_log_at_trx_commit = 2
innodb_log_buffer_size = 16M
innodb_log_file_size = 128M
innodb_log_files_in_group = 3
innodb_max_dirty_pages_pct = 90
innodb_lock_wait_timeout = 120
innodb_file_per_table = 0

#log-slow-queries = /data/mysql/slow.log
#long_query_time = 10


[mysqldump]
quick
max_allowed_packet = 32M 

注意:若my.cnf有空格或有不能识别的权限,mysql.err会报错 [ERROR]/usr/mysql/sbin/mysqld: unknown option '--'
编写启动脚本

vi /data/mysql/mysqlshell

内容如下:

#!/bin/sh

mysql_port=3306
mysql_username="admin"
mysql_password="12345678"  #这里的密码是后面做赋权时候创建的,提前写在这里

function_start_mysql()
{
    printf "Starting MySQL...\n"
    /usr/local/webserver/mysql/bin/mysqld_safe --defaults-file=/data/mysql/my.cnf 2>&1 > /dev/null &
}

function_stop_mysql()
{
    printf "Stoping MySQL...\n"
    /usr/local/webserver/mysql/bin/mysqladmin -u ${mysql_username} -p${mysql_password} -S /tmp/mysql.sock shutdown
}

function_restart_mysql()
{
    printf "Restarting MySQL...\n"
    function_stop_mysql
    sleep 5
    function_start_mysql
}

function_kill_mysql()
{
    kill -9 $(ps -ef | grep 'bin/mysqld_safe' | grep ${mysql_port} | awk '{printf $2}')
    kill -9 $(ps -ef | grep 'libexec/mysqld' | grep ${mysql_port} | awk '{printf $2}')
}

if [ "$1" = "start" ]; then
    function_start_mysql
elif [ "$1" = "stop" ]; then
    function_stop_mysql
elif [ "$1" = "restart" ]; then
function_restart_mysql
elif [ "$1" = "kill" ]; then
function_kill_mysql
else
    printf "Usage: /data/mysql/mysqlshell {start|stop|restart|kill}\n"
fi

脚本增加执行权限

chmod +x /data/mysql/mysqlshell

启动数据库并以root登录 

/data/mysql/mysqlshell start
/usr/local/webserver/mysql/bin/mysql -u root -p -S /tmp/mysql.sock #(提示输入密码时直接回车)

若提示执行脚本mysqlshell stop参数出现如下错误信息:

Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)
Check that mysqld is running and that the socket: '/tmp/mysql.sock' exists!

是因为Redhat/CentOS Linux每天会用tmpwatch命令检查并删除/tmp下超过240小时未访问过的文件和目录,我们可以不使用UNIX套接字,使用TCP登录,将脚本中function_stop_mysql()这段修改为

/usr/local/webserver/mysql/bin/mysqladmin -u ${mysql_username} -p${mysql_password} -h 127.0.0.1

或者给/tmp加上保护位防止被删除 

chomd +t /tmp

再或者修改socket的路径,修改my.cnf如下所示并重启mysql服务 

[mysqld]
socket=/yourpath/mysql.sock
[client]
socket=/yourpath/mysql.sock

登录到mysql,提示符变为"SQL>"后创建一个具有root权限的账户 (密码要与脚本mysqlshell中的" mysql_password="这项 一致) 

GRANT ALL PRIVILEGES ON *.* TO 'admin'@'localhost' IDENTIFIED BY '12345678';
GRANT ALL PRIVILEGES ON *.* TO 'admin'@'127.0.0.1' IDENTIFIED BY '12345678';

查看Mysql运行状态

netstat -lnpt    #观察是否有3306端口的进程
ps aux |grep mysql

php安装

–enable-sockets    –with-snmp

./configure --prefix=/usr/local/webserver/php \
--with-config-file-path=/usr/local/webserver/php/etc \
--with-mysql=/usr/local/webserver/mysql \
--with-mysqli=/usr/local/webserver/mysql/bin/mysql_config --with-iconv-dir=/usr/local --with-freetype-dir --with-jpeg-dir --with-png-dir --with-zlib --with-libxml-dir=/usr --enable-xml --disable-rpath --enable-discard-path --enable-safe-mode --enable-bcmath --enable-shmop --enable-sysvsem --enable-inline-optimization --with-curl --with-curlwrappers --enable-mbregex --enable-fastcgi --enable-fpm --enable-force-cgi-redirect --enable-mbstring --with-mcrypt --with-gd --enable-gd-native-ttf --with-openssl --with-mhash --enable-pcntl --enable-sockets --with-ldap --with-ldap-sasl --with-xmlrpc --enable-zip --enable-soap






转载于:https://my.oschina.net/u/1267672/blog/180345

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值