标签归档: mysql

Linode LNMP服务器环境配置笔记

我选的是1GB的套餐,每个月$20,年付减10%,实付$230.21折合人民币1400多点。

Linode 1GB

Linode 1GB

操作系统: CentOS Linux 6.2 64bit
运行环境: Nginx+PHP+MySQL

准备工作
编译环境部署:
在服务器上启用编译环境是非常危险的做法,为了保证安全我专门用一个虚拟机来做编译工作,编译完成后再将程序部署至服务器即可。

根据VPS操作系统情况下载安装CentOS 6.2 64bit, 因为只是做编译机,所以只要装 Minimal 版就可以了,几百M,下载也很快。
历史版本的ISO文件可以在 http://vault.centos.org 找到。

Minimal版本安装好后不会自动启动网络,需要执行以下操作:
运行命令

dhclient -v eth0

修改文件 /etc/sysconfig/network-scripts/ifcfg-eth0
在文件最后添加一行
BOOTPROTO=”dhcp”

再把ONBOOT=”no”改成ONBOOT=”yes”

这样以后启动都自动连接网络了。

用root登陆后在/root目录建立packages、build两个目录,分别用于放置安装包和解压后的程序目录。
# 安装

yum install gcc make
cd
mkdir packages build

创建用户

groupadd -g 500 www && useradd -g 500 -m -u 500 www
groupadd -g 501 Hessian && useradd -g 501 -m -u 501 Hessian
groupadd -g 27 mysql && useradd -d /www/database -M -g 27 -u 27 mysql

环境变量

修改文件/etc/profile,将下面的内容加到文件末尾

PATH=$PATH:/opt/mysql/bin
PATH=$PATH:/opt/php/bin
PATH=$PATH:/opt/nginx/sbin

添加完成后执行: . /etc/profile
(中间的空格可别漏)


 

Nginx

下载地址:http://nginx.org/en/download.html

1. 下载

cd ~/packages
wget http://nginx.org/download/nginx-1.4.1.tar.gz

2. 解压

cd ~/build
tar -zxf ~/packages/nginx-1.4.1.tar.gz

3. 解决依赖

yum install pcre-devel
yum install zlib-devel

3. 编译

cd nginx-1.4.1
./configure --prefix=/opt/nginx-1.4.1 --with-pcre --with-openssl=/usr
make -j 2 && make install

 

MySQL

下载地址:http://dev.mysql.com/downloads/mysql

这里我选择的是Binary包
Linux – Generic (glibc 2.5) (x86, 64-bit), Compressed TAR Archive
mysql-5.6.11-linux-glibc2.5-x86_64.tar.gz

下载之后解压缩即可使用


 

PHP

虽然YUM有提供PHP,但是出于性能方面和个人需要的考虑我还是选择自己编译。
PHP版本我用的是5.3 主要是不知道5.4会不会带来什么兼容性问题。

下载地址:http://cn2.php.net/get/php-5.3.24.tar.bz2/from/a/mirror

1. 下载

cd ~/packages
wget http://cn2.php.net/get/php-5.3.24.tar.bz2/from/this/mirror

2. 解压

cd ~/build
tar -zjf ~/packages/php-5.3.24.tar.gz

3. 解决依赖

yum install libxml2-devel
yum install libcurl-devel
yum install libjpeg-devel
yum install libpng-devel
yum install freetype-devel
yum install autoconf

libmcrypt 在yum里没有,可以从EPEL里下载
EPEL(Extra Packages for Enterprise Linux)是Fedora社区打造的为 RHEL 及衍生发行版如 CentOS、Scientific Linux 等提供高质量软件包的项目。
安装

rpm -ivh http://dl.fedoraproject.org/pub/epel/6/x86_64/libmcrypt-2.5.8-9.el6.x86_64.rpm
rpm -ivh http://dl.fedoraproject.org/pub/epel/6/x86_64/libmcrypt-devel-2.5.8-9.el6.x86_64.rpm

3. 编译

cd php-5.3.24
./configure --prefix=/opt/php-5.3.24 \
--with-config-file-path=/opt/php \
--with-mysql=mysqlnd \
--with-mysql-sock=/tmp/mysql.sock \
--with-iconv-dir=/usr \
--enable-xml \
--with-libxml-dir \
--disable-rpath \
--enable-safe-mode \
--enable-inline-optimization \
--with-curl \
--enable-mbregex \
--with-gd \
--enable-zip \
--enable-sockets \
--enable-mbstring=all \
--with-mcrypt \
--enable-gd-native-ttf \
--with-freetype-dir=/usr \
--with-jpeg-dir=/usr \
--with-png-dir=/usr\
--with-pdo-mysql=mysqlnd \
--without-pdo-sqlite \
--enable-fpm \
--enable-cli

make -j2
make install

4. 编译扩展

后续步骤

cd /opt
ln -s mysql-5.6.11-linux-glibc2.5-x86_64 mysql
ln -s nginx-1.4.1 nginx
ln -s php-5.3.24 php
tar -czf servers.tar.gz *

将配置文件、启动脚本以及servers.tar.gz 上传到服务器,解压到/opt,放置好配置文件和启动脚本。


VPS 安装步骤

解决依赖

rpm -ivh http://dl.fedoraproject.org/pub/epel/6/x86_64/libmcrypt-2.5.8-9.el6.x86_64.rpm
yum install libpng libjpeg freetype

yum install svn

创建用户

groupadd -g 500 www && useradd -g 500 -m -u 500 www
groupadd -g 501 Hessian && useradd -g 501 -m -u 501 Hessian
groupadd -g 27 mysql && useradd -d /www/database -M -g 27 -u 27 mysql

上传并解压
将servers.tar.gz、配置文件、启动脚本放到服务器

tar -zxf servers.tar.gz -C /opt
 tar -zxf init-scripts.tar.gz -C /etc/init.d

添加服务

chkconfig --add nginx
chkconfig --add mysql
chkconfig --add php-fpm

建立资源目录

mkdir /www
mkdir /www/database
mkdir /www/logs
mkdir /www/svn-repos

调整目录权限

chown www:www -R /www
chown mysql:mysql -R /www/database

环境变量
修改文件/etc/profile,将下面的内容加到文件末尾

PATH=$PATH:/opt/mysql/bin
PATH=$PATH:/opt/php/bin
PATH=$PATH:/opt/nginx/sbin

添加完成后执行: . /etc/profile
(中间的空格可别漏)


 

安全设置

SSH设置:
修改/etc/ssh/sshd_config
1. 禁用root登陆:PermitRootLogin no
2. 禁用密码登陆:PasswordAuthentication no
3. 启用密钥登陆:

RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys

将公钥加入到服务器上 .ssh/authorized_keys中,生成密钥及具体设置方法参考:

http://stevenz.blog.hexun.com/15798089_d.html

在客户端可以通过下面的命令直接将公钥添加到服务器上:

cat  ~/.ssh/id_rsa.pub | ssh [email protected] "cat - >> ~/.ssh/authorized_keys"

执行完成后重启sshd

service sshd restart

如果无法登陆可以查看安全日志 /var/log/secure 确定问题原因。

 

防火墙设置:
创建文件/etc/sysconfig/iptables,加入以下内容

*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]

-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 3690 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT

 

这里只开放了22、80、3690三个有限的端口,如果有其他需要再自己参考添加就行。

怎么打开/查看MySQL的SQL记录?

我们在开发的时候经常经常遇到在程序中增加调试语句很麻烦的情况,这时候难免会想如果Mysql能看到我们执行了什么SQL语句就好了。

实际上MySQL是有这个功能的,在MySQL 5.1的时候我们就可以通过mysqld的-l参数来启动mysql来记录查询日志。

但是现在-l参数自5.1.12之后已经不推荐使用了,改为–general_log

As of MySQL 5.1.12, as an alternative to –log or -l, use –general_log[={0|1}] to specify the initial general query log state. In this case, the default general query log file name is used. With no argument or an argument of 1, –general_log enables the log. With an argument of 0, this option disables the log.

 

–general_log 打开后日志默认会输出到你的data目录下,默认文件名是 hostname.log。hostname是你的机器名,在windows上貌似是localhost或者其他什么奇怪的名字吧。

 

如果服务器已经启动或者不是直接用mysqld启动服务器的怎么办呢?(运行时开关General Log)

执行下面两个SQL就可以开关日志

打开日志

SET GLOBAL general_log = 'ON';

关闭日志

SET GLOBAL general_log = 'OFF';

 

配置文件可以设置General Log的开关吗?

在配置文件中[mysqld]段增加下面一行

general_log = 1

如果需要指定日志文件路径

general_log_file = 文件路径

无力啊,自己编译的MYSQL有问题

netome.net的VPS搁置了很久了,这两天才想起来好好弄一下。 从vePortal上reload了CentOS6,又在自己机器上装了个CentOS6 Minimal做编译环境,好不容易MYSQL/PHP/NGINX都编译好了,放到服务器上调了一整天,好像没问题。

结果刚把Wordpress装上,上传几张图片之后PHP就报内存不足了,赶紧看top。。。。。

 

我日。。top也打不开,内存不够了。。。无奈最后只能重启。。

 

经过多次检查,最后发现mysql一启动之后内存马上消失,我VPS是512M的内存,mysql一启动之后300+M就没了,可是从PS里看他内存值占用了几十兆,让我很是无法理解。

这个问题折腾了一整天,还去问了 phpx的村长sadly,结果都没找到解决的办法。 到后来我只能猜测用编译问题来说服我自己了(TMD在我虚拟机里一点事都木有啊),为了能尽快上线,只好想装上yum里的mysql将就一下。