第二十二章 搭建LAMP经典组合(Linux Apache MySQL PHP)
一、安装单实例MySQL数据库
1、安装前的准备
(1)提前加在虚似机内存,以便在编译时更快(1-2G)。
(2)提前下载好软件
(3)重视操作过程中的报错
(4)一定要进行虚拟机界面去编译,避免使用SecureCRT操作出现中断,无法连接的现象,导致前功尽弃。
2、建立MySQL账号
(1)创建mysql组
groupadd mysql
(2)创建mysql用户
useradd mysql –g mysql –M –s/sbin/nologin
说明:mysql是一个虚拟用户,不创建家目录,不让登陆
3、安装mysql-5.1.72
(1)解压
tar zxf mysql-5.1.72.tar.gz
(2)将配置参数写入文件(参数过多)
cd mysql-5.1.72
vi configure-mysql.log
./configure \
--prefix=/application/mysql5.1.72 \
--with-unix-socket-path=/application/mysql5.1.72/tmp/mysql.sock \
--localstatedir=/application/mysql5.1.72/data \
--enable-assembler \
--enable-thread-safe-client \
--with-mysqld-user=mysql \
--with-big-tables \
--without-debug \
--with-pthread \
--enable-assembler \
--with-extra-charsets=complex \
--with-readline \
--with-ssl \
--with-embedded-server \
--enable-local-infile \
--with-plugins=partition,innobase \
--with-mysqld-ldflags=-all-static \
--with-client-ldflags=-all-static
(3)删除原有mysql
a、查看已安装的mysql包和路径
rpm -qa | grep -i mysql
find / -name mysql
whereis mysql
b、删除已安装包
rpm -ev mysql-devel-5.1.66-2.el6_3.i686
rpm -ev --nodeps mysql-server-5.1.66-2.el6_3.i686
rpm -ev mysql-bench-5.1.66-2.el6_3.i686
rpm -ev --nodeps mysql-5.1.66-2.el6_3.i686
c、删除已安装目录
rm -fr /var/lib/mysql
rm -fr /usr/include/mysql
rm -fr /usr/share/mysql /usr/bin/mysql /usr/lib/mysql
d、查看是否删除干净
rpm -qa | grep -i mysql
whereis mysql
find / -name mysql
(4)configure配置参数
cat configure-mysql.log | bash
(5)安装(时间较长,2G虚机30分钟)
make && make install
(6)创建软连接
ln -s /application/mysql5.1.72/ /application/mysql
4、mysql初始化和启动
(1)查看mysql自带的配置文件模版式
ll/wddg/tools/mysql-5.1.72/support-files/my*.cnf
-rw-r--r-- 1 root root 4746 Feb 23 18:10 my-huge.cnf
-rw-r--r-- 1 root root 19779 Feb 2318:10 my-innodb-heavy-4G.cnf
-rw-r--r-- 1 root root 4720 Feb 23 18:10 my-large.cnf
-rw-r--r-- 1 root root 4731 Feb 23 18:10 my-medium.cnf
-rw-r--r-- 1 root root 2499 Feb 23 18:10 my-small.cnf
配置要求:medium <small < large < huge < heavvy
(2)将模版复制到/etc目录下(虚机配置不高,选择small)
cp /wddg/tools/mysql-5.1.72/support-files/my-small.cnf/etc/my.cnf
(3)根据配置参数创建存放数据的目录
mkdir /application/mysql/data –p
(4)授权mysql用户访问mysql的安装目录
chown -R mysql.mysql /application/mysql
(5)初始化mysql
/application/mysql/bin/mysql_install_db--basedir=/application/mysql --datadir=/application/mysql/data --user=mysql
说明:
mysql_install_db:数据库初始化脚本,mysql5.5以后不在bin目录下了
--datadir=/application/mysql/data:数据库数据文件所在目录
(6)创建mysql启动脚本
cp/wddg/tools/mysql-5.1.72/support-files/mysql.server.sh /etc/init.d/mysqld
chkconfig --add mysqld
chkconfig mysqld on
chkconfig --list | grep mysqld
mysqld 0:off 1:off 2:on 3:on 4:on 5:on 6:off
(7)启动mysql(报错,原因见第10步)
chmod +x /etc/init.d/mysqld
/etc/init.d/mysqld start
/etc/init.d/mysqld: line 260:my_print_defaults: command not found
/etc/init.d/mysqld: line 263:my_print_defaults: command not found
/etc/init.d/mysqld: line 270:@HOSTNAME@: command not found
/etc/init.d/mysqld: line 279:@HOSTNAME@: command not found
/etc/init.d/mysqld: line 292: cd:@prefix@: No such file or directory
Starting MySQLCouldn't find MySQLmanager (@bindir@/mysqlma[FAILED]r server (@bindir@/mysqld_safe)
(8)原因是mysqld脚本中的basedir和datadir为空
vi /etc/init.d/mysqld
basedir=/application/mysql/
datadir=/application/mysql/data
(9)再次启动mysqld(启动成功,还是有2个报错,但不影响使用)
/etc/init.d/mysqld start
/etc/init.d/mysqld: line 270:@HOSTNAME@: command not found
/etc/init.d/mysqld: line 279:@HOSTNAME@: command not found
Starting MySQL.. [ OK ]
(10)导致启动mysql报错的真实原因是应拷贝mysql.server,不是mysql.server.sh
cp/wddg/tools/mysql-5.1.72/support-files/mysql.server /etc/init.d/mysqld
/etc/init.d/mysqld start #成功启动,无报错
Starting MySQL. [ OK ]
(11)将mysql的bin目录加入系统PATH
vi /etc/profile
PATH=/application/mysql/bin:$PATH
(12)重载系统配置文件/etc/profile
. /etc/profile 或 source /etc/profile
(13)第二种启动mysql的方法(无报错)
/application/mysql/bin/mysqld_safe&
重要说明:
2种启动方法,不要来回切换,容易出现报错
(14)关闭mysql
a、方法一:pkill mysql
b、方法二:/application/mysql/bin/mysqladminshutdown
c、方法三:/application/mysql/bin/mysqldstop
(15)查看mysql进程
netstat -lntup|grep mysql
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 25083/mysqld
lsof -i :3306
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
mysqld 25083 mysql 10u IPv4 70859 0t0 TCP *:mysql (LISTEN)
5、mysql安全设置
(1)设置mysql的root用户密码(默认无密码)
/application/mysql/bin/mysqladmin -uroot password '123456';
(2)客户端登陆mysql
mysql -uroot -p
Enter password: #输入密码123456
(3)查看mysql的版本
select version();
+-----------+
| version() |
+-----------+
| 5.1.72 |
+-----------+
1 row in set (0.00 sec)
(4)查看mysql的用户(mysql的用户格式:用户名@主机名)
mysql> select user();
+----------------+
| user() |
+----------------+
| root@localhost |
+----------------+
1 row in set (0.00 sec)
(5)查看mysql的数据库
show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| test |
+--------------------+
3 rows in set (0.03 sec)
(6)删除test数据库
drop database test;
Query OK, 0 rows affected (0.07 sec)
(7)查询mysql数据库下的user表
select user,host from mysql.user;
+------+-----------+
| user | host |
+------+-----------+
| root | 127.0.0.1 |
| | localhost |
| root | localhost |
| | rhel |
| root | rhel |
+------+-----------+
5 rows in set (0.00 sec)
(8)删除user表中user为空的用户
drop user ''@rhel;
Query OK, 0 rows affected (0.00 sec)
drop user ''@localhost;
Query OK, 0 rows affected (0.00 sec)
(9)为保证安全,删除root@rhel用户,只保留root@127.0.0.1和root@localhost这2个用户
drop user 'root'@rhel;
Query OK, 0 rows affected (0.01 sec)
(10)修改用户密码
update mysql.user setpassword=PASSWORD("abc123") where host='localhost' and user='root';
Query OK, 1 row affected (0.01 sec)
Rows matched: 1 Changed: 1 Warnings: 0
(11)刷新用户权限(对用户进行操作后应及时刷新一下)
flush privileges;
(12)找回mysql用户密码(忘记root密码时用,相当于Linux 的单用户模式)
a、停止mysql所有用户进程
pkill mysqld
b、以安全方式启动mysql ,并跳过mysql授权表,直接进入mysql
/application/mysql/bin/mysqld_safe--skip-grant-table &
c、直接修改用户密码
update mysql.user setpassword=PASSWORD("abc123") where host='localhost' and user='root';
d、刷新用户权限(对用户进行操作后应及时刷新一下)
flush privileges;
e、停止mysql所有用户进程
killall -9 mysqld
f、以正常方式启动mysql
/etc/init.d/mysqld start
二、安装PHP
1、检查Apache和mysql的安装情况
(1)检查Apache 和mysql的安装路径
ls -ld /application/apache/
drwxr-xr-x 14 root root 4096 Feb 22 21:39 /application/apache/
ls -ld /application/mysql/
drwxr-xr-x 11 root root 4096 Mar 4 21:13 /application/mysql/
(2)正常启动Apache和mysql服务
/application/apache/bin/apachectl start
/etc/init.d/mysqld start
(3)检查端口
lsof –i :80
lsof -i :3306
(4)登陆mysql和打开相关网页,确保服务正常运行
mysql -uroot –p
http://192.168.158.99
2、检查系统lib库的安装情况
(1)检查需要的lib库文件
rpm -qa zlib libxml libjpeg freetypelibpng gd curl libiconv zlib-devel libxml2-devel libjpeg-devel freetype-devellibpng-devel gd-devel curl-devel
libpng-devel-1.2.49-1.el6_2.i686
gd-2.0.35-11.el6.i686
freetype-devel-2.3.11-6.el6_2.9.i686
freetype-2.3.11-6.el6_2.9.i686
libxml2-devel-2.7.6-8.el6_3.4.i686
zlib-1.2.3-29.el6.i686
zlib-devel-1.2.3-29.el6.i686
libpng-1.2.49-1.el6_2.i686
curl-7.19.7-35.el6.i686
(2)比对后,还差以下lib库文件
libxml libjpeg libjpeg-devel gd-develcurl-devel libiconv(该包非必须)
从安装ISO中找出相关rpm
libxml libjpeg libjpeg-devel curl-devel(为libcurl-devel,已安装)
网上下载:
http://mirrors.163.com/centos/6/os/i386/Packages/gd-devel-2.0.35-11.el6.i686.rpm
https://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.14.tar.gz
(3)下载安装
rpm -ivh gd-devel-2.0.35-11.el6.i686.rpm
rpm -ivh libj*
rpm -ivhlibxml2-devel-2.7.6-8.el6_3.4.i686.rpm
tar xf libiconv-1.14.tar.gz
cd libiconv-1.14
./configure--prefix=/usr/local/libiconv
make
make install
3、安装PHP5.3.27
(1)下载PHP5.3.27
wget http://cn2.php.net/get/php-5.3.27.tar.gz/from/this/mirror
(2)解压
cd /tools
tar xf php-5.3.27.tar.gz
(3)configure
./configure \
--prefix=/application/php5.3.27 \
--with-apxs2=/application/apache/bin/apxs \
--with-mysql=/application/mysql \
--with-xmlrpc \
--with-openssl \
--with-zlib \
--with-freetype-dir \
--with-gd \
--with-jpeg-dir \
--with-png-dir \
--with-iconv=/usr/local/libiconv \
--enable-short-tags \
--enable-sockets \
--enable-zend-multibyte \
--enable-soap \
--enable-mbstring \
--enable-static \
--enable-gd-native-ttf \
--with-curl \
--with-xsl \
--enable-ftp \
--with-libxml-dir
(4)configure说明:
--with-apxs2=/application/apache/bin/apxs:为Apache添加php模块
--with-mysql=/application/mysql:指定mysql路径
其它选项相关的包也必须先安装。如OpenSSL、libxslt等,否则会报错
(5)安装
make && make install
(6)创建软连接
ln -s /application/php5.3.27//application/php
(7)查看Apache的模块路径中是否有libphp5.so
ll /application/apache/modules/
-rw-r--r-- 1 root root 9115 Feb 22 21:37 httpd.exp
-rwxr-xr-x 1 root root 24449841 Mar 5 18:08 libphp5.so
(8)查看Apache的主配置文件httpd.conf中是否嵌入libphp5.so
grep libphp5.so /application/apache/conf/httpd.conf
LoadModule php5_module modules/libphp5.so
(9)php在配合apache说明
php在配合apache时,不是守护进程,而是以模块的形式(mod_php5.so),配合nginx和lighttpd时,php是以守护进程模式(FCGI)
4、配置PHP
(1)查看PHP的配置文件模版
cd /wddg/tools/php-5.3.27
ll php.ini-*
-rw-r--r-- 1 101 101 69606 Jul 11 2013 php.ini-development
-rw-r--r-- 1 101 101 69627 Jul 11 2013 php.ini-production
(2)比较2个配置文件模版的差别
php.ini-development:开发测试时使用,打开错误输出
php.ini-production:正式环境中使用,关闭错误输出
diff `ls php.ini-*`
521c521
< error_reporting = E_ALL | E_STRICT
---
> error_reporting = E_ALL & ~E_DEPRECATED
538c538
< display_errors = On #测试开发时打开错误输出
---
> display_errors = Off #测试开发时关闭错误输出
549c549
< display_startup_errors = On
---
> display_startup_errors = Off
593c593
< track_errors = On
---
> track_errors = Off
611c611
< html_errors = On
---
> html_errors = Off
...
(3)生成正式PHP配置文件php.ini:将配置模版复制到PHP系统指定路径下
cp php.ini-production /application/php/lib/php.ini
(4)安装PHP小结
a、正式配置一般关闭显示LOG,不输出LOG
b、如果编译时没有指定配置文件路径,则配置文件的路径应在PHP安装目录的lib下,文件名为php.ini
三、Apache整合PHP
1、修改Apache的主配置文件httpd.conf
vi /application/apache/conf/httpd.conf
#98-100行左右。98gg可直接跳到98行,下面操作同理
ServerName 127.0.0.1:80
#在311行的AddType application/x-gzip .gz .tgz下面加2行对PHP的解析支持内容
AddType application/x-httpd-php .php .phtml
AddType application/x-httpd-php-source .phps
#在65行左右,修改daemon用户,使用自定义的用户httpduser
User httpduser
Group httpduser
#在166行左右,修改默认的首页文件,本例中新增一个index.php
DirectoryIndex index.php index.html
2、创建指定的httpduser用户
useradd httpduser -M -s /sbin/nologin
3、检查Apache语法
/application/apache/bin/apachectl -t
4、重启/启动Apache
/application/apache/bin/apachectl start
或
/application/apache/bin/apachectl graceful
5、在/var/html/blog目录下新建index.php文件
vi /var/html/blog/index.php
<?php
phpinfo();
?>
6、测试,打开http://192.168.158.99,成功打开phpinfo页面
7、测试连接mysql
(1)在/var/html/blog目录下新建连接mysql的php文件
vi /var/html/blog/mysql.php
<?php
$link_id=mysql_connect('localhost','root','123456') or mysql_error();
if($link_id){
echo "mysqlsuccessful by aaa";
}else{
echo mysql_error();
}
?>
(2)测试,打开http://192.168.158.99/mysql.php成功
显示:mysql successful by aaa