第十九节、LAMP环境搭建整合MySQL数据库主从及安装Discuz论坛

一、LAMP企业架构集群讲解

Linux+Apache+Mysql/MariaDB+Perl/PHP/Python一组常用来搭建动态网站或者服务器的开源软件,本身都是各自独立的程序,但是因为常被放在一起使用,拥有了越来越高的兼容度,共同组成了一个强大的Web应用程序平台.(为了提高性能也可以用Nginx代替Apache发布网页)
随着开源潮流的蓬勃发展,开放源代码的LAMP已经与J2EE和.Net商业软件形成三足鼎立之势,并且该软件开发的项目在软件方面的投资成本较低,因此受到整个IT界的关注。
目前LAMP架构是大多数中小企业最青睐的PHP架构选择,也是众多Linux SA喜欢选择的一套架构.

  • YUM安装yum install httpd httpd-devel mysql mysql-server mysql-devel php php-devel php-mysql -y安装完成后可以直接使用,源码安装的话需要整合apache和php.
二、源码安装整合LAMP
  • 检查安装环境卸载已安装的服务如httpd,mysql(利用rpm命令不带依赖关系移除)
[root@mini ~]# rpm -qa|grep httpd
httpd-tools-2.2.15-29.el6.centos.x86_64
httpd-2.2.15-29.el6.centos.x86_64
[root@mini ~]# rpm -e --nodeps  httpd-2.2.15-29.el6.centos.x86_64
[root@mini ~]# rpm -e --nodeps  httpd-tools-2.2.15-29.el6.centos.x86_64
[root@mini src]# rpm -qa|grep mysql
mysql-libs-5.1.71-1.el6.x86_64
[root@mini ~]# rpm -e --nodeps  mysql-libs-5.1.71-1.el6.x86_64
  • 切换下载目录下载所用的各种安装包,这里为了测试LAMP环境下载discuz论坛源码包作为测试或者wordpross博客论坛源码
[root@mini ~]# cd /usr/src/  #切换下载目录依次下载discuz论坛源码包,http/mysql/php源码包
[root@mini src]# wget http://download.comsenz.com/DiscuzX/3.4/Discuz_X3.4_SC_UTF8.zip
[root@mini src]# wget http://mirror.bit.edu.cn/apache//httpd/httpd-2.2.34.tar.gz 
[root@mini src]# wget http://downloads.mysql.com/archives/mysql-5.1/mysql-5.1.63.tar.gz 
[root@mini src]# wget http://mirrors.sohu.com/php/php-5.3.28.tar.bz2
[root@mini src]# wget https://cn.wordpress.org/wordpress-4.9.1-zh_CN.tar.gz
[root@mini src]# ls
debug                    httpd-2.2.34.tar.gz  mysql-5.1.63.tar.gz  wordpress-4.9.1-zh_CN.tar.gz
Discuz_X3.4_SC_UTF8.zip  kernels              php-5.3.28.tar.bz2
  • 安装httpd服务
参考资料

源码安装apache参考文章

[root@mini src]# tar -zxvf httpd-2.2.34.tar.gz   #解压
[root@mini src]# cd httpd-2.2.34   #切换源码包
[root@mini httpd-2.2.34]# ls
ABOUT_APACHE  CHANGES        httpd.dsp       libhttpd.dep  NOTICE            server
acinclude.m4  config.layout  httpd.mak       libhttpd.dsp  NWGNUmakefile     srclib
Apache.dsw    configure      httpd.spec      libhttpd.mak  os                support
build         configure.in   include         LICENSE       README            test
BuildAll.dsp  docs           INSTALL         Makefile.in   README.platforms  VERSIONING
BuildBin.dsp  emacs-style    InstallBin.dsp  Makefile.win  README-win32.txt
buildconf     httpd.dep      LAYOUT          modules       ROADMAP
[root@mini httpd-2.2.34]# ./configure --prefix=/usr/local/apache --enable-so --enable-rewrite
#预编译指定安装目录,添加动态扩展模块,rewrite模块
[root@mini httpd-2.2.34]# make  #编译 
[root@mini httpd-2.2.34]# make install  #安装
[root@mini local]# chown -R apache.apache /usr/local/apache/
#更改apache安装目录的所有者和属组
#修改配置文件更改服务使用者,apache用户系统已创建
[root@mini local]# vim /usr/local/apache/conf/httpd.conf 
 66 User apache
 67 Group apache
启动故障排查
安装完成后检查配置文件报错如下
[root@mini ~]# /usr/local/apache/bin/apachectl -t
httpd: apr_sockaddr_info_get() failed for mini
httpd: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1 for ServerName
Syntax OK
如果不解决直接启动报错如下
[root@mini ~]# /usr/local/apache/bin/apachectl start
httpd: apr_sockaddr_info_get() failed for mini
httpd: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1 for ServerName
解决方案:在配置文件/usr/local/apache/conf/httpd.conf中添加语句
ServerName  localhost:80

-将httpd服务加入系统服务并设置开机自启动

[root@mini ~]# cp /usr/local/apache/bin/apachectl  /etc/init.d/httpd
#将apache的启动脚本复制到/etc/rc.d/init.d这个目录下
#直接修改启动脚本在最上面添加如下两行带#的注释语句
[root@mini ~]# vi /etc/init.d/httpd 
#chkconfig: 2345 70 60
#description: apache
[root@mini ~]# chkconfig --add httpd
#添加系统服务
[root@mini ~]# chkconfig httpd on
#设置开机自启动
[root@mini local]# /etc/init.d/httpd -t
Syntax OK
#检查配置文件无问题
[root@mini local]# /etc/init.d/httpd start
[root@mini local]# ps -ef|grep httpd
root      24813      1  0 09:53 ?        00:00:00 /usr/local/apache/bin/httpd -k start
apache    24814  24813  0 09:53 ?        00:00:00 /usr/local/apache/bin/httpd -k start
apache    24815  24813  0 09:53 ?        00:00:00 /usr/local/apache/bin/httpd -k start
apache    24816  24813  0 09:53 ?        00:00:00 /usr/local/apache/bin/httpd -k start
apache    24817  24813  0 09:53 ?        00:00:00 /usr/local/apache/bin/httpd -k start
apache    24818  24813  0 09:53 ?        00:00:00 /usr/local/apache/bin/httpd -k start
root      24820   1305  0 09:53 pts/0    00:00:00 grep httpd
#启动httpd服务查看进程正常
  • 安装mysql服务
参考资料

mysql源码安装编译参数详解参考
MySQL的常见的三种方式

[root@mini src]# tar zxvf mysql-5.1.63.tar.gz 
[root@mini src]# cd mysql-5.1.63
[root@mini mysql-5.1.63]# ls
aclocal.m4      config.guess  Docs                libmysqld    mysql-test  server-tools   tests
BUILD           config.sub    extra               libmysql_r   mysys       sql            unittest
ChangeLog       configure     include             ltmain.sh    netware     sql-bench      vio
client          configure.in  install-sh          Makefile.am  plugin      sql-common     win
CMakeLists.txt  COPYING       INSTALL-SOURCE      Makefile.in  README      storage        ylwrap
cmd-line-utils  dbug          INSTALL-WIN-SOURCE  man          regex       strings        zlib
config          depcomp       libmysql            missing      scripts     support-files
[root@mini mysql-5.1.63]# ./configure --prefix=/usr/local/mysql --enable-assembler 
#预编译指定安装目录,使用汇编模式提高性能
[root@mini mysql-5.1.63]# make   #编译
[root@mini mysql-5.1.63]# make install   #安装
故障排除

mysql预编译时报错

报错信息如下(echo $?可查看命令执行结果,返回0正常,其余任何数字都是异常)
checking for tgetent in -lncursesw... no
checking for tgetent in -lncurses... no
checking for tgetent in -lcurses... no
checking for tgetent in -ltermcap... no
checking for tgetent in -ltinfo... no
checking for termcap functions library... configure: error: No curses/termcap library found
[root@mini mysql-5.1.63]# echo $?
1
故障原因:缺少ncurses安装包
解决办法:下载安装相应软件包
[root@mini mysql-5.1.63]# yum install  ncurses  ncurses-devel -y
将mysql配置为系统服务
[root@mini mysql-5.1.63]# cp /usr/local/mysql/share/mysql/my-medium.cnf  /etc/my.cnf
#拷贝源码包的配置文件到系统配置目录下
[root@mini mysql-5.1.63]# cp /usr/local/mysql/share/mysql/mysql.server /etc/rc.d/init.d/mysqld
#拷贝源码包的服务文件到系统启动目录下
[root@mini mysql-5.1.63]# chkconfig --add mysqld
#将mysql文件加入开机启动项列表
[root@mini mysql-5.1.63]# chkconfig --level 345 mysqld on
#设置各级别开机自启动
[root@mini mysql-5.1.63]# cd /usr/local/mysql/
#切换源码安装目录
[root@mini mysql]# useradd mysql
#创建普通用户mysql
[root@mini mysql]# chown -R mysql.mysql /usr/local/mysql/
#更改mysql目录的所有者及属组
[root@mini bin]# /usr/local/mysql/bin/mysql_install_db --user=mysql
#初始化数据库
[root@mini mysql]# chown -R mysql var
#更改安装目录下var目录的所有者,var目录是初始化以后才创建的
[root@mini mysql]# /usr/local/mysql/bin/mysqld_safe --user=mysql&
#以安全模式后台启动mysql服务
[root@mini mysql]# /usr/local/mysql/bin/mysql
#用安装包下的绝对路径进入数据库
[root@mini mysql]# ln -s /usr/local/mysql/bin/mysql /usr/bin
#创建软链接,系统默认会查找/usr/bin下的命令,这样就能直接通过mysql进入数据库
补充源码停止mysql数据库命令/usr/local/mysql/share/mysql/mysql.server stop
[root@mini src]# tar jxf php-5.3.28.tar.bz2 
[root@mini src]# cd php-5.3.28
[root@mini php-5.3.28]# ls
acconfig.h        INSTALL              README.EXTENSIONS                 scripts
acconfig.h.in     install-sh           README.EXT_SKEL                   server-tests-config.php
acinclude.m4      LICENSE              README.GIT-RULES                  server-tests.php
aclocal.m4        ltmain.sh            README.input_filter               snapshot
build             main                 README.MAILINGLIST_RULES          stamp-h.in
buildconf         makedist             README.namespaces                 stub.c
buildconf.bat     Makefile.frag        README.PARAMETER_PARSING_API      svnclean.bat
CODING_STANDARDS  Makefile.gcov        README.PHP4-TO-PHP5-THIN-CHANGES  tests
config.guess      Makefile.global      README.REDIST.BINS                TODO
config.sub        makerpm              README.RELEASE_PROCESS            TODO-5.1
configure         missing              README.SELF-CONTAINED-EXTENSIONS  TODO-PHP5
configure.in      mkinstalldirs        README.STREAMS                    TSRM
CREDITS           netware              README.SUBMITTING_PATCH           UPGRADING
ext               NEWS                 README.TESTING                    UPGRADING.INTERNALS
EXTENSIONS        pear                 README.TESTING2                   vcsclean
footer            php5.spec.in         README.UNIX-BUILD-SYSTEM          win32
generated_lists   php.gif              README.WIN32-BUILD-SYSTEM         Zend
genfiles          php.ini-development  run-tests.php
header            php.ini-production   sapi
[root@mini php-5.3.28]# ./configure --prefix=/usr/local/php5 --with-config-file-path=/usr/local/php5/etc --with-apxs2=/usr/local/apache/bin/apxs --with-mysql=/usr/local/mysql/
#预编译,指定安装目录,指定php.ini位置,整合 apache加载指定模块到 apache,要求 apache 要打开SO模块,指定mysql安装目录,对mysql的支持
[root@mini php-5.3.28]# make 
[root@mini php-5.3.28]# make install
故障排查

安装PHP模块预编译时报错信息如下

checking libxml2 install dir... no
checking for xml2-config path... 
configure: error: xml2-config not found. Please check your libxml2 installation.
[root@mini php-5.3.28]# echo $?
1
检查是否安装了libxm包
[root@mini php-5.3.28]# rpm -qa|grep libxml2
libxml2-python-2.7.6-14.el6.x86_64
libxml2-2.7.6-14.el6.x86_64
重新安装libxml2和libxml2-devel包
[root@mini php-5.3.28]# yum install libxml2 libxml2-devel -y
安装完之后查找xml2-config文件是否存在
[root@mini php-5.3.28]# find / -name "xml2-config"
/usr/bin/xml2-config
至此问题解决重新对PHP模块进行编译安装
补充:当mysql数据库服务器在其他主机时php编译参数支持mysql扩展
 ./configure --prefix=/usr/local/php5 --with-config-file-path=/usr/local/php5/etc --with-apxs2=/usr/local/apache/bin/apxs --with-mysql=mysqlnd --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd

mysqlnd是php5.3以后版本加入的,5.3以下版本必须还是要编译mysql。

  • 修改配置文件整合apache及php
修改httpd.conf配置文件
[root@mini php-5.3.28]# vim /usr/local/apache/conf/httpd.conf
 54 LoadModule php5_module        modules/libphp5.so  
#PHP预编译安装参数 --with-apxs2=/usr/local/apache/bin/apxs,指定http加载模块后生成的配置语句,之前测试实验时参数--with-apxs2输入有误,写成-with-apx2导致整合失败
319     AddType application/x-compress .Z
320     AddType application/x-gzip .gz .tgz
321     AddType application/x-httpd-php .php
#319、320是已存在的,321是新增语句
169     DirectoryIndex  index.php  index.html
#指定默认访问页面优先级,添加index.php到最前面
创建index.php测试页面
[root@mini php-5.3.28]# vim /usr/local/apache/htdocs/index.php
<?php
phpinfo();
?>
  • 整合完成重启httpd服务,访问页面http://192.168.15.142得到php配置信息页面整合成功
三、配置MySQL主从服务器

按照上述步骤192.16815.142主机已安装整合好LAMP环境,再为其配置从数据库服务器
克隆一台最小化安装的主机后源码安装mysql数据库服务
主从服务器分别登录mysql,设置root用户密码mysql> grant all on *.* to root@'localhost' identified by '123456';,刷新授权mysql> flush privileges;
修改master配置文件

[root@mini ~]# vim /etc/my.cnf
18 [client]
 20 port            = 3306
 21 socket          = /tmp/mysql.sock
 22 default-character-set=utf8
#22行为新增修改客户端字符集
 27 [mysqld]
50 log-bin=mysql-bin
#50行默认打开bin-log日志
 58 server-id       = 1
 59 character-set-server=utf8
#58行默认,但是slave的id必须改掉不能一样,59行也是新增修改字符集
133 [mysql]
137 default-character-set=utf8
#137行新增修改字符集

修改slave配置文件配置字符集,修改id号
主从服务器分别重启mysqld服务/etc/init.d/mysqld restart
master服务器授权slave同步自己mysql> grant replication slave on *.* to 'tongbu'@'%' identified by '123456';
查看同步点

mysql> show master status;
+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000006 |      256 |              |                  |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)

slave服务器

#设置同步主服务器
mysql> change master to master_host='192.168.15.143',master_user='tongbu',master_password='123456',master_log_file='mysql-bin.000006',master_log_pos=256;  
Query OK, 0 rows affected (0.39 sec)
#开启同步
mysql> start slave;
Query OK, 0 rows affected (0.00 sec)
#查看I/O线程、SQL线程已开启
mysql> show slave status\G
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 192.168.15.143  #master的IP地址
                  Master_User: tongbu               #同步使用的用户名(mysql数据库里的用户)
                  Master_Port: 3306                   #使用的端口号
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000006   #开始同步的bin-log日志
          Read_Master_Log_Pos: 256                  #开始的同步点
               Relay_Log_File: mini-relay-bin.000002
                Relay_Log_Pos: 251
        Relay_Master_Log_File: mysql-bin.000006
             Slave_IO_Running: Yes       ####I/O线程开启
            Slave_SQL_Running: Yes    ####SQL线程开启
              Replicate_Do_DB: 
          Replicate_Ignore_DB: 
           Replicate_Do_Table: 
       Replicate_Ignore_Table: 
      Replicate_Wild_Do_Table: 
  Replicate_Wild_Ignore_Table: 
                   Last_Errno: 0
                   Last_Error: 
                 Skip_Counter: 0
          Exec_Master_Log_Pos: 256
              Relay_Log_Space: 405
              Until_Condition: None
               Until_Log_File: 
                Until_Log_Pos: 0
           Master_SSL_Allowed: No
           Master_SSL_CA_File: 
           Master_SSL_CA_Path: 
              Master_SSL_Cert: 
            Master_SSL_Cipher: 
               Master_SSL_Key: 
        Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
                Last_IO_Errno: 0
                Last_IO_Error: 
               Last_SQL_Errno: 0
               Last_SQL_Error: 
1 row in set (0.00 sec)

至此mysql服务器主从配置完成

四、在已配置好的LAMP环境下搭建discuz论坛
[root@mini data]# cd /usr/src/  #切换下载目录
[root@mini src]# unzip Discuz_X3.4_SC_UTF8.zip #解压论坛源码包
[root@mini src]# mv upload/ /data/ #把内容主目录移动到/data下
[root@mini data]# mv /data/upload/  /data/discuz #重命名目录
[root@mini data]# ln -s /data/discuz/ /usr/local/apache/htdocs/
#创建链接到apache的发布目录

至此可通过http://192.168.15.143/discuz访问论坛创建向导页面

[root@mini discuz]# cd /usr/local/apache/htdocs/discuz/
#切换网站发布目录
[root@mini discuz]# chmod -R 777 config/ data/ uc_client/ uc_server/
#更改相关目录的权限
[root@mini data]# mysql -uroot -p
Enter password: 
#进入mysql数据库
mysql> create database discuz charset=utf8;
Query OK, 1 row affected (0.00 sec)
#创建论坛数据库并指定字符集
mysql> grant all on discuz.* to root@'localhost' identified by "123456";
Query OK, 0 rows affected (0.00 sec)
#授权

进入向导页面根据提示设置管理员密码完成安装

五、优化数据库连接

当LAMP主机master上的数据库出故障时候,可以通过修改discuz源码配置文件将数据库的链接IP指向slave服务器的数据库(slave同样要对master授权访问)来快速的恢复故障.
discuz论坛配置文件位置/usr/local/apache/htdocs/discuz/conf/config_ucenter.php修改UC_DBHOST把原本的localhost换成slave_ip或者域名
但以上方法每次都需要改动配置文件比较麻烦,换思路在创建论坛时,数据库的IP地址用域名代替,这样即时有问题只需要改动主机的host文件修改数据库域名对应的IP即可.

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,372评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,368评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,415评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,157评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,171评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,125评论 1 297
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,028评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,887评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,310评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,533评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,690评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,411评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,004评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,659评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,812评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,693评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,577评论 2 353

推荐阅读更多精彩内容