服务器升级之二 mysql 5.5.9、php 5.3.6RC 编译安装 

接上一篇。

刚搞完前端,就开始折腾后端。主要就是个 php 和 mysql.正好前一段时间的那个php没有版本信息的问题还未解决,今天索性办了.

先mysql,后php。这是惯例.
mysql 5.5.9 http://mirror.services.wisc.edu/mysql/D ... 5.9.tar.gz

下载源码包,解压,进入目录
我的cmake参数:
[[email protected] mysql-5.5.9]# cmake . \
> -DCMAKE_BUILD_TYPE:STRING=Release \
> -DCMAKE_INSTALL_PREFIX:PATH=/usr/local/mysql \
> -DCMAKE_USE_RELATIVE_PATHS:BOOL=OFF \
> -DCOMMUNITY_BUILD:BOOL=ON \
> -DENABLED_PROFILING:BOOL=ON \
> -DENABLE_DEBUG_SYNC:BOOL=OFF \
> -DINSTALL_BINDIR:STRING=bin \
> -DINSTALL_DOCDIR:STRING=docs \
> -DINSTALL_DOCREADMEDIR:STRING=docs \
> -DINSTALL_INCLUDEDIR:STRING=include \
> -DINSTALL_INFODIR:STRING=docs \
> -DINSTALL_LAYOUT:STRING=STANDALONE \
> -DINSTALL_LIBDIR:STRING=lib \
> -DINSTALL_MANDIR:STRING=man \
> -DINSTALL_MYSQLDATADIR:STRING=data \
> -DINSTALL_MYSQLSHAREDIR:STRING=share \
> -DINSTALL_MYSQLTESTDIR:STRING=test \
> -DINSTALL_PLUGINDIR:STRING=lib/plugin \
> -DINSTALL_SBINDIR:STRING=sbin \
> -DINSTALL_SCRIPTDIR:STRING=scripts \
> -DINSTALL_SHAREDIR:STRING=share \
> -DINSTALL_SQLBENCHDIR:STRING=sql \
> -DINSTALL_SUPPORTFILESDIR:STRING=support-files \
> -DMYSQL_DATADIR:PATH=/var/run/mysql/data \
> -DSYSCONFDIR:PATH=/etc/sysconfig/mysql \
> -DWITHOUT_SERVER:BOOL=OFF \
> -DWITH_EMBEDDED_SERVER:BOOL=OFF \
> -DWITH_EXTRA_CHARSETS:STRING=all \
> -DWITH_INNOBASE_STORAGE_ENGINE:BOOL=OFF \
> -DWITH_LIBEDIT:BOOL=ON \
> -DWITH_READLINE:BOOL=OFF \
> -DWITH_SSL:STRING=no \
> -DWITH_UNIT_TESTS:BOOL=OFF \
> -DWITH_ZLIB:STRING=bundled

检查依赖,没有问题.接下来 make && make install.
话说cmake 的 INSTALL_XXXDIR 均使用相对路径,确是很蛋疼.

注:初次编译前最好查看下帮助
[[email protected] mysql-5.5.9]# cmake . -LAH

或者 http://forge.mysql.com/wiki/CMake

安装完成后,将备份的配置文件 my.cnf 复制到 /etc/sysconfig/mysql/ 下.
恢复数据库.先初始化.

运行
[[email protected] bin]# ../scripts/mysql_install_db --basedir=/usr/local/mysql --datadir=/var/run/mysql --user=mysql
重建系统表。

./mysqld_safe & 启动数据库,报错.

[[email protected] ~]# cat /var/run/mysql/PowerPC.err |grep ERROR
110223 6:24:16 [ERROR] Unknown/unsupported storage engine: InnoDB
110223 6:24:16 [ERROR] Aborting
110223 6:25:13 [ERROR] Unknown/unsupported storage engine: InnoDB
110223 6:25:13 [ERROR] Aborting
110223 6:33:18 [ERROR] /usr/local/mysql/bin/mysqld: unknown variable 'innodb_data_home_dir=/var/run/mysql/'
110223 6:33:18 [ERROR] Aborting
110223 6:34:14 [ERROR] /usr/local/mysql/bin/mysqld: unknown variable 'innodb_buffer_pool_size=10M'
110223 6:34:14 [ERROR] Aborting


原来是innodb 的原因,由于mysql 5.5.x 默认启用innodb,而我这次的版本又没有把它编译进来。故而报错.

解决办法:删掉/注释掉配置文件里关于 innodb的部分,并加入
default-storage-engine          = MyISAM

即可.

再次启动mysql,正常.

导入之前备份出去的sql文件,
mysql -u root -p < xxx.sql
刷新权限表即可.

mysql 安装完成.

接下来是php.
php 5.3.6rc1 http://downloads.php.net/johannes/php-5.3.6RC1.tar.bz2

这次选择的是最新的rc版.解压,进入目录
我的configure:
[[email protected] php-5.3.6RC1]# ./configure \
> --prefix=/usr/local/php \
> --exec-prefix=/usr/local \
> --sysconfdir=/etc/sysconfig/php \
> --localstatedir=/var/run \
> --disable-cli \
> --enable-fpm \
> --with-fpm-user=http \
> --with-fpm-group=web \
> --with-config-file-path=/etc/sysconfig/php \
> --disable-ipv6 \
> --with-zlib \
> --with-bz2 \
> --with-curl \
> --enable-exif \
> --with-gd \
> --with-mhash \
> --enable-mbstring \
> --with-mcrypt \
> --with-mysql=/usr/local/mysql \
> --with-mysql-sock=/tmp \
> --with-mysqli=/usr/local/mysql/bin/mysql_config \
> --with-xmlrpc \
> --enable-zip \
> --without-pear

检查依赖,一切OK。然后就 make && make install.
一段时间后,php 也搞定了.再把备份的配置文件恢复一下。由于eAccelerator 插件与之前的老版本php一起被删掉了,故而在php.ini 里先注释掉其部分。

一切都做好后,服务器升级便结束了.
[ ] ( 1230 次浏览 ) 永久链接 ( 3 / 1438 )
服务器升级之一 varnish 2.1.5、nginx 0.9.5 编译安装 

最近回家过年,回来后发现之前vps里面跑的很多软件都发布了新的版本,于是便打算安装跟进,陆续的停掉了一切服务,开始动手(先手动删除掉所有要更新软件的旧版本的文件,并备份)。

先是前段吧,
varnish 2.1.5 http://repo.varnish-cache.org/source/va ... 1.5.tar.gz

下载源码包,解压进入目录,
我的configure:
[[email protected] varnish-2.1.5]# ./configure \
> --prefix=/usr/local/varnish \
> --exec-prefix=/usr/local \
> --sysconfdir=/etc/sysconfig \
> --localstatedir=/var/run \
> --disable-largefile

检查依赖,有警告.

configure: WARNING: rst2man not found – not building man pages
configure: WARNING: won't look for sendfile() on i686-pc-linux-gnu


前一个,yum install python-docutils 解决。
后一个,直接无视.

make distclean,再次检查,没有问题。

接下来 make && make install.安装完成,并用备份的配置文件替换自动生成的。

varnish 完成,然后是
nginx 0.9.5 http://nginx.org/download/nginx-0.9.5.tar.gz

下载源码包,解压,进入目录
我的configure:
[[email protected] nginx-0.9.5]# ./configure \
> --prefix=/usr/local/nginx \
> --sbin-path=/usr/local/sbin/nginx \
> --conf-path=/etc/sysconfig/nginx/nginx.conf \
> --error-log-path=/var/log/nginx/error.log \
> --pid-path=/var/run/nginx/nginx.pid \
> --lock-path=/var/run/nginx/nginx.lock \
> --user=http \
> --group=web \
> --without-http_ssi_module \
> --without-http_auth_basic_module \
> --without-http_fastcgi_module \
> --without-http_uwsgi_module \
> --without-http_scgi_module \
> --http-log-path=/var/log/nginx/access.log \
> --http-client-body-temp-path=/tmp/nginx/request.tmp \
> --http-proxy-temp-path=/tmp/nginx/proxy.tmp \
> --without-mail_pop3_module \
> --without-mail_imap_module \
> --without-mail_smtp_module

检查依赖,没有任何问题.

目录结构和编译简介:
Configuration summary
+ using system PCRE library
+ OpenSSL library is not used
+ md5: using system crypto library
+ sha1 library is not used
+ using system zlib library

nginx path prefix: "/usr/local/nginx"
nginx binary file: "/usr/local/sbin/nginx"
nginx configuration prefix: "/etc/sysconfig/nginx"
nginx configuration file: "/etc/sysconfig/nginx/nginx.conf"
nginx pid file: "/var/run/nginx/nginx.pid"
nginx error log file: "/var/log/nginx/error.log"
nginx http access log file: "/var/log/nginx/access.log"
nginx http client request body temporary files: "/tmp/nginx/request.tmp"
nginx http proxy temporary files: "/tmp/nginx/proxy.tmp"

确认一下,都没错。
make && make install,编译安装.
完成后,用备份的配置文件替换掉新的即可。

nginx 也完成了.

hiawatha 没有新版本问世,不过上次安装的时候,有些目录错掉了。今天索性也重新安装下。

这次的configure:
[[email protected] hiawatha-7.4]# ./configure \
> --prefix=/usr/local/hiawatha \
> --exec-prefix=/usr/local \
> --sysconfdir=/etc/sysconfig \ (主要改的地方)
> --localstatedir=/var \ (主要改的地方)
> --disable-largefile \
> --disable-ipv6 \
> --disable-monitor \
> --disable-ssl

make && make install.
安装完成.
同样用备份的配置文件恢复下,就可以运行了。
[ ] ( 1293 次浏览 ) 永久链接 ( 3 / 1706 )
VPS 内存之优化 

最近VPS的内存的确很吃紧,在浏览网站的时候很能看出来.后台升级一个插件居然能导致 php "out of memery" 囧阿,看来不得不有所行动了..

登录vps shell,top 了一下,我靠,509k free.彻底杯具了.

按照内存占用排列,varnishd 以14% 雄踞第一,其后就是10个php-fpm 进程,平均0.8% - 1% 左右,再者就是 mysqld,也很惊人.

一个个来吧,本来我不太喜欢手动指定内存的大小,一般采用默认。

先缓存服务器 varnish,仔细阅读了 varnishd 启动参数手册(http://www.varnish-cache.org/docs/2.1/reference/varnishd.html),不看不知道,看了吓一条.

默认日志文件大小 shmlogsize 居然是500MB,我擦~ 还有默认后置服务器缓存体积居然是磁盘空闲大小的50%,不能这样浪费吧~

经过修改后,生成了适合本人实际情况的启动命令:

/usr/local/sbin/varnishd \
-a :80,:81,:82 \
-f /etc/sysconfig/varnish/varnish/default.vcl \
-i Power_Cache \
-l 10m \
-s file,/tmp/varnish,500m \
-w 1,3 \
-u cache \
-g web


接下来 php-fpm,像我这样的vps,php-fpm 开10个真是太浪费了。5个应该差不多.
修改php-fpm.conf,如下

; Default Value: min_spare_servers + (max_spare_servers - min_spare_servers) / 2
pm.start_servers = 4
; The desired minimum number of idle server processes.
pm.min_spare_servers = 1
; The desired maximum number of idle server processes.
pm.max_spare_servers = 10


至于mysql,我用的5.5.8 版本默认启用了innodb,而默认的缓冲池居然是几百Mb,这个必须要改,如下

# Uncomment the following if you are using InnoDB tables

# You can set .._buffer_pool_size up to 50 - 80 %
# of RAM but beware of setting memory usage too high
innodb_buffer_pool_size = 16M


这些改好后,重启以上服务.

再看看内存使用情况,

[[email protected] ~]# ps -e v |grep -e php -e varnish -e mysql
1693 ? Ss 0:00 0 8989 55434 2996 0.5 php-fpm: master process (/etc/sysconfig/php/php-fpm.conf)

1696 ? S 0:02 4 8989 60814 21572 4.1 php-fpm: pool www

1697 ? S 0:01 3 8989 61034 25276 4.8 php-fpm: pool www

6043 ? S 0:01 1 8989 61282 22080 4.2 php-fpm: pool www

6077 ? S 0:01 1 8989 61234 22264 4.2 php-fpm: pool www

14066 ? Ss 0:00 0 387 85440 924 0.1 varnishd -a :80,:81,:82 -f default.vcl -i Power_Cache -l 10m -s file,/tmp/varnish,500m -w 1,3 -u cache

14067 ? Sl 0:00 3 387 680640 2572 0.4 varnishd -a :80,:81,:82 -f default.vcl -i Power_Cache -l 10m -s file,/tmp/varnish,500m -w 1,3 -u cache

15545 ? S 0:00 0 691 3008 1336 0.2 /bin/sh /usr/local/mysql/bin/mysqld_safe --user=mysql

15816 ? Sl 0:46 17 8747 200940 30464 5.8 /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/var/run/mysql --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=/var/run/mysql/PowerPC.err --pid-file=/var/run/mysql/PowerPC.pid --socket=/tmp/mysql.sock --port=3306


再top 一下,
Mem: 524800k total, 418784k used, 106016k free, 0k buffers

情绪稳定.恩~
[ ] ( 1488 次浏览 ) 永久链接 ( 3 / 1543 )
编译安装 MySQL 5.5.8 GA 通过 

自从编译 MySQL 5.5.6 及 5.5.7 两个RC 一直通不过,我就转投了 MySQL 5.1.x 稳定分支.不过就在前几天,MySQL 5.5.x 分支居然GA了. 一直对5.5.x 没有信心的我于是便想再尝试一下。

火速下载了源码包(http://mysql.mirrors.pair.com/Downloads/MySQL-5.5/mysql-5.5.8.tar.gz),解压,进入目录.

值得注意的是,MySQL 5.5.8 GA 及以上使用了 CMake 编译,动手之前最好阅读下源码包下的 README 和 INSTALL-SOURCE.关于CMake 用法,可以参见:http://forge.mysql.com/wiki/CMake

我的编译参数:
[[email protected] mysql-5.5.8]# cmake . \
> -DCMAKE_BUILD_TYPE:STRING=Release \
> -DCMAKE_INSTALL_PREFIX:PATH=/usr/local/mysql \
> -DCOMMUNITY_BUILD:BOOL=ON \
> -DENABLED_PROFILING:BOOL=ON \
> -DENABLE_DEBUG_SYNC:BOOL=OFF \
> -DINSTALL_LAYOUT:STRING=STANDALONE \
> -DMYSQL_DATADIR:PATH=/var/run/mysql \
> -DMYSQL_MAINTAINER_MODE:BOOL=OFF \
> -DWITH_EMBEDDED_SERVER:BOOL=ON \
> -DWITH_EXTRA_CHARSETS:STRING=all \
> -DWITH_SSL:STRING=bundled \
> -DWITH_UNIT_TESTS:BOOL=OFF \
> -DWITH_ZLIB:STRING=bundled \
> -LH


查看更多参数:cmake . -LAH # H为打印说明开关符、A为打印所有开关符

乍用cmake 替代 autotools,很多人会很不习惯。MySQL也有此考虑,可以使用 ./cmake/configure.pl 生成 configure.


生成makefile文件,没有问题的话,就直接make 编译.耐心等待即可,且有进度(%)显示.

编译完成后,make install 安装到指定目录.

按照之前的打算,使用mysql_install_db 回复数据库就OK了。
可是我错了,运行完
/usr/local/mysql/scripts/mysql_install_db --basedir=/usr/local/mysql --datadir=/var/run/mysql --user=mysql
后,报错了~~

[ERROR] Incorrect definition of table mysql.proc: expected column 'comment' at position 15 to have type text, found type char(64).


搜索了一下,擦~居然是个bug(参见:http://bugs.mysql.com/bug.php?id=52444),很多像我一下从MySQL 5.1.x 升级到 5.5.x 的用户都遇到了,该patch 已经提交了,不过修复可能要在下一个版本才能好。

无奈,只好再试试其他办法了。按照MySQL 5.5 手册的说法,

mysqld --user=mysql --skip-grant-tables & #启动mysql
mysql_upgrade #数据库升级


虽然期间有过error 出现,不过好在结果还是OK的.
试着下启动MySQL, mysqld_safe --user=mysql & ,查询、删除都没有问题。
至此,MySQL 5.5.8 安装算是完成了.

兴高采烈的准备重启服务器的服务,
service myservice stop && service myservice start.

打开网站,503!!!

ps -e 查看进程,php-fpm 没有起来……

迅速的手动启动,杯具了~

[[email protected] mysql-5.5.8]# php-fpm
php-fpm: /usr/local/mysql/lib/libmysqlclient.so.16: no version information available (required by php-fpm)

囧rz.....

不知道是不是又是个bug?看来这个问题,只能提交到邮件列表了……本人无能为力.

先用php-fcgi 顶替吧,运行 php-fcgi -v.

[[email protected] mysql-5.5.8]# php-fcgi -v
-bash: fork: Cannot allocate memory
[[email protected] mysql-5.5.8]# ps -e
-bash: fork: Cannot allocate memory
[[email protected] mysql-5.5.8]# ps -e
-bash: fork: Cannot allocate memory
[[email protected] mysql-5.5.8]# ls
-bash: fork: Cannot allocate memory
[[email protected] mysql-5.5.8]# top
-bash: fork: Cannot allocate memory
[[email protected] mysql-5.5.8]# php-fpm
-bash: fork: Cannot allocate memory
[[email protected] mysql-5.5.8]# top
-bash: fork: Cannot allocate memory


目前情绪稳定.
[ ] ( 5883 次浏览 ) 永久链接 ( 3 / 1590 )
给 php 增加 eAccelerator 插件 

刚装好php 5.3.4,跑起来感觉反应速度不是很给力 - -|| 于是便打算再安装个加速器.
本来我之前的5.3.3也有,不过被我与主程序一道干掉了,只好重新编译了。

从svn 库里面签出最新版本:
svn --username anonymous --password anonymous co https://svn.eaccelerator.net/eaccelerator/trunk eaccelerator

居然还是 r427 …… 居然这么长时间没更新 囧rz

只好从头再来了。

进入目录,phpize 生成 configure 文件,然后直接运行 ./configure (无任何参数) 检查依赖。

之后,开始编译插件 make.

编译完了后,find . -name "*.so" 会发现 eaccelerator.so 已经生成了.而且有两个,分别位于 modules 和 lib 下. 任选其一(其实都一样)复制到 php 扩展目录下.

cp modules/* /usr/local/lib/php/extensions/no-debug-non-zts-20090626/

即可。编辑 php.ini 文件,把之前注释掉的关于载入“eAccelerator” 的配置再反注掉,保存,重启 php-fpm 就OK了.

[[email protected] ~]# php-fpm -v
PHP 5.3.4 (fpm-fcgi) (built: Dec 17 2010 09:23:44)
Copyright (c) 1997-2009 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2010 Zend Technologies
with eAccelerator v1.0-dev, Copyright (c) 2004-2010 eAccelerator, by eAccelerator
[ ] ( 3373 次浏览 ) 永久链接 ( 3 / 1656 )

<< <上一页 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 下一页> >>