第二十二章 搭建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用戶,只保留[email protected]和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