第二十四章 搭建LNMP潮流组合(Linux Nginx MySQL PHP)
一、安装单实例MySQL5.5.32数据库
1、安装MySQL5.5的方式
(1)第一种:源码安装(取消了configure方式,改为cmake-make-make install方式)
具体安装过程见参考博文注9、Heartbeat+DRBD+MySQL高可用架构方案与实施。一般文件名为mysql-5.5.24.tar.gz这种方式。
(2)第二种:yum或rpm
(3)第三种:二进制包方式安装(直接解压,初始化数据库即可,无需编译。DBA最爱)
一般文件名为mysql-5.5.32-linux2.6-x89_64.tar.gz这种方式。
2、web服务器上如何安装MySQL
(1)数据库和web在一台主机
必须在安装完MySQL(make install)后,进行数据库初始化操作。
(2)数据库和web分离
编译原码时,只须到make install结束即可,二进制方式时,解压后就可以了。实际上就是只需装好客户端,供安装PHP时好调用MySQL生成PHP调用MySQL的函数。
3、建立MySQL账号
(1)创建mysql组
groupadd mysql
(2)创建mysql用户
useradd mysql –g mysql –M –s/sbin/nologin
说明:mysql是一个虚拟用户,不创建家目录,不让登陆
4、安装mysql-5.5.32
(1)解压
tar zxf tar xfmysql-5.5.32-linux2.6-x86_64.tar.gz
(2)删除原有mysql
a、查看已安装的mysql包和路径
rpm -qa | grep -i mysql
find / -name mysql
whereis mysql
b、删除已安装包
rpm -ev --nodeps mysql-server-5.1.71-1.el6.x86_64
rpm -ev --nodeps mysql-bench-5.1.71-1.el6.x86_64
rpm -ev --nodeps mysql-devel-5.1.71-1.el6.x86_64
rpm -ev --nodeps mysql-5.1.71-1.el6.x86_64
c、删除已安装目录
rm -fr /var/lib/mysql
rm -fr /usr/lib64/mysql
rm -fr /usr/share/mysql /usr/bin/mysql/usr/lib/mysql /usr/include/mysql
d、查看是否删除干净
rpm -qa | grep -i mysql
whereis mysql
find / -name mysql
(3)复制到/application下,并重命名为mysql-5.5.32
cp -fr mysql-5.5.32-linux2.6-x86_64 /application/mysql-5.5.32
(4)创建软连接
ln -s /application/mysql-5.5.32//application/mysql
5、mysql初始化和启动
(1)授权mysql用户访问mysql的data目录
chown -R mysql.mysql /application/mysql/data/
(2)初始化mysql
./scripts/mysql_install_db --user=mysql--basedir=/application/mysql/ --datadir=/application/mysql/data/
(3)创建mysql启动脚本
cp support-files/mysql.server/etc/init.d/mysqld
(4)修改mysqld脚本中的basedir和datadir
vi /etc/init.d/mysqld
basedir=/application/mysql/
datadir=/application/mysql/data
(5)创建mysql配置文件:将模版复制到/etc目录下(虚机配置不高,选择small)
cp support-files/my-small.cnf /etc/my.cnf
(6)启动mysqld
/etc/init.d/mysqld start
(7)设置mysql的root用户密码(默认无密码)
/application/mysql/bin/mysqladmin -uroot password '123456';
(8)设置环境变量,添加MySQL启动命令
a、方法一:设置/etc/profile
vi /etc/profile
export PATH=/application/mysql/bin/:/application/nginx/sbin/:$PATH
b、方法二:拷贝相关命令到PATH所在路径下
cp /application/mysql/bin/mysqld/usr/local/bin/
(9)查看错误
错误日志在/application/mysql/data/下的<hostname>.err文件中
cat myLinuxStudy.err
(10)查询mysql数据库下的user表
select user,host from mysql.user;
+------+--------------+
| user | host |
+------+--------------+
| root | 127.0.0.1 |
| root | ::1 |
| | localhost |
| root | localhost |
| | myLinuxStudy |
| root | myLinuxStudy |
+------+--------------+
(11)为保证安全,删除其它用户,只保留root@127.0.0.1和root@localhost这2个用户
drop user 'root'@'::1';
drop user ''@myLinuxStudy;
drop user ''@localhost;
(12)drop删除用户时,如查报错无法删除时,可使用delete mysql.user表来实现
MySQL使用drop删除用户时,实际就是操作mysql.user表,所以可以用delete来删除mysql.user表中的记录来实现。
drop user ''@localhost;
ERROR 1396 (HY000): Operation DROP USERfailed for ''@'mylinuxstudy'
delete from mysql.user where user=''and host='myLinuxStudy';
Query OK, 1 row affected (0.00 sec)
6、mysql安装常见报错
(1)报错一:scripts/mysql_install_db:line 249
a、报错提示
二进制包安装,执行scripts/mysql_install_db --user=mysql --datadir=/data/mysql/出现如下报错:
scripts/mysql_install_db:line 249: ./bin/my_print_defaults: cannot execute binary fileNeither host‘a.com‘ nor ‘localhost‘ could be looked up with./bin/resolveipPlease configurethe ‘hostname‘ command to return a correct hostname.If you want to solve thisat a later stage, restart this script with the --force option
b、原因
是32位的平台使用了64位的二进制包。
c、解决办法:
换版本,或非要安装,则只能使用源码编译安装。
(2)报错二:缺少libaio.so.1文件
a、报错提示
./bin/mysqld:error while loading shared libraries:libaio.so.1: cannot open shared objectfile: No such file or directory
b、原因
缺少libaio库文件
c、解决办法:查找libaio相关rpm安装所需的包
yum install libaio libaio-devel
(3)报错三:启动MySql提示PID file失败
a、报错提示
启动MySql提示:The serverquit without updating PID file(…)失败
b1、原因1:初始化数据库有问题
c1、解决办法:重新初始化数据库
b2、原因2:启动时用了不同的程序来启启动。(/etc/init.d/mysqldstart和mysqld_safe交叉启动)
c2、解决办法:不要交叉使用相关启动命令
b3、可能是/usr/local/MySQL/data/rekfan.pid文件没有写的权限
c3、解决方法 :
给予权限,执行“chown -R mysql:mysql /var/data” “chmod -R 755/usr/local/mysql/data”然后重新启动mysqld!
b4、可能进程里已经存在mysql进程
c4、解决方法:
用命令“ps -ef|grep mysqld”查看是否有mysqld进程,如果有使用“kill -9 进程号”杀死,然后重新启动mysqld!
b5、可能是第二次在机器上安装mysql,有残余数据影响了服务的启动。
c5、解决方法:
去mysql的数据目录/data看看,如果存在mysql-bin.index,就赶快把它删除掉吧,它就是罪魁祸首了。
b6、mysql在启动时没有指定配置文件时会使用/etc/my.cnf配置文件
c6、解决方法:
打开这个文件查看在[mysqld]节下有没有指定数据目录(datadir)。请在[mysqld]下设置这一行:datadir = /usr/local/mysql/data
b7、skip-federated字段问题
c7、解决方法:
检查一下/etc/my.cnf文件中有没有没被注释掉的skip-federated字段,如果有就立即注释掉吧。
b8、错误日志目录不存在
c8、解决方法:
使用“chown” “chmod”命令赋予mysql所有者及权限
b9、selinux惹的祸,如果是centos系统,默认会开启selinux
c9、解决方法:
关闭它,打开/etc/selinux/config,把SELINUX=enforcing改为SELINUX=disabled后存盘退出重启机器试试。
(4)报错四:始终无法登入mysql(密码正确)
a、报错提示
ERROR 1045 (28000): Access deniedfor user 'usera'@'localhost' (using password:YES)
无论怎么处理,就是始终无法登入mysql
b、原因
初始化MySQL数据库时不正常,因为初始化MySQL数据库是会生成一系列系统表,如果这步不正常,发生任何报错,都不奇怪。
c、解决方法
清空data目录下所有内容:rm -fr /application/mysql/data/
重新初始化数据库:
./scripts/mysql_install_db --user=mysql--basedir=/application/mysql/ --datadir=/application/mysql/data/
二、安装PHP(与Apache环境下编译是不一样的)
1、LAMP与LNMP环境下PHP工作方式的区别
LAMP:以模块的方式工作,在Apache中生成libphp5.so,
LNMP:以进程的方式工作,以FCGI方式,启进程(php-fpm)和端口(9000)
2、参照第二十二章搭建LAMP经典组合的要求检查Apache 和mysql的安装情况
3、参照第二十二章搭建LAMP经典组合的要求检查系统lib库的安装情况
rpm -qa|grep -E"zlib|libxml|libjpeg|freetype|libpng|gd|curl|libiconv|zlib-devel
|libxml2-devel|libjpeg-devel|freetype-devel|libpng-devel|gd-devel|curl-devel"
4、安装libmcrypt-2.5.8.tar.gz(安全加密)
tar xf libmcrypt-2.5.8.tar.gz
cd libmcrypt-2.5.8
./configure
make
make install
/sbin/ldconfig
cd /wddg/tools/libmcrypt-2.5.8
cd libltdl/
./configure --enable-ltdl-install
make
make install