一、LAMP架构介绍 LAMP(Web应用软件组合) Linux+Apache+Mysql/MariaDB+Perl/PHP/Python一组常用来搭建动态网站或者服务器的开源软件,本身都是各自独立的程序,但是因为常被放在一起使用,拥有了越来越高的兼容度,共同组成了一个强大的Web应用程序平台。随着开源潮流的蓬勃发展,开放源代码的LAMP已经与J2EE和.Net商业软件形成三足鼎立之势,并且该软件开发的项目在软件方面的投资成本较低,因此受到整个IT界的关注。从网站的流量上来说,70%以上的访问流量是LAMP来提供的,LAMP是最强大的网站解决方案. LAMP定义 LAMP指的Linux(操作系统)、ApacheHTTP 服务器,MySQL(有时也指MariaDB,数据库软件) 和PHP(有时也是指Perl或Python) 的第一个字母,一般用来建立web应用平台。 虽然这些开放源代码程序本身并不是专门设计成同另几个程序一起工作的,但由于它们的免费和开源,这个组合开始流行(大多数Linux发行版本捆绑了这些软件)。当一起使用的时候,它们表现的像一个具有活力的解决方案包。其他的方案包有苹果的WebObjects(最初是应用服务器),Java/J2EE和微软的.NET架构。 LAMP包的脚本组件中包括了CGIweb接口,它在90年代初期变得流行。这个技术允许网页浏览器的用户在服务器上执行一个程序,并且和接受静态的内容一样接受动态的内容。程序员使用脚本语言来创建这些程序因为它们能很容易有效的操作文本流,甚至当这些文本流并非源自程序自身时也是。正是由于这个原因系统设计者经常称这些脚本语言为胶水语言。 LAMP软件组件: Linux Linux 是免费开源软件,这意味着源代码可用的操作系统。 Apache Apache 是使用中最受欢迎的一个开放源码的WEB服务器软件。 MySQL MySQL 是多线程、多用户的SQL数据库管理系统。 MySQL 已由Oracle公司自 2010 年 1 月 27 日通过SUN购买。SUN 最初于 2008 年 2 月 26 日收购 MySQL。 PHP,Perl 或 Python PHP 是一种编程语言最初设计生产动态网站。PHP 是主要用于服务器端的应用程序软件。Perl 和 Python 类似。 网站架构方案 LAMP(Linux- Apache-MySQL-PHP)网站架构是目前国际流行的Web框架,该框架包括:Linux操作系统,Apache网络服务器,MySQL数据 库,Perl、PHP或者Python编程语言,所有组成产品均是开源软件,是国际上成熟的架构框架,很多流行的商业应用都是采取这个架构,和 Java/J2EE架构相比,LAMP具有Web资源丰富、轻量、快速开发等特点,微软的.NET架构相比,LAMP具有通用、跨平台、高性能、低价格的 优势,因此LAMP无论是性能、质量还是价格都是企业搭建网站的首选平台。 对于大流量、大并发量的网站系统架构来说,除了硬件上使用高 性能的服务器、负载均衡、CDN等之外,在软件架构上需要重点关注下面几个环节:使用高性能的操作系统(OS)、高性能的网页服务器(Web Server)、高性能的数据库(Database)、高效率的编程语言等。下面我将从这几点对其一一讨论。 操作系统 Linux操作系统有很多个不同的发行版,如Red Hat Enterprise Linux、SUSE Linux Enterprise、Debian、Ubuntu、CentOS等,每一个发行版都有自己的特色,比如RHEL的稳定,Ubuntu的易用,基于稳定性 和性能的考虑,操作系统选择CentOS(Community ENTerprise Operating System)是一个理想的方案。 CentOS(Community ENTerprise Operating System)是Linux发行版之一,是RHEL/Red Hat Enterprise Linux的精简免费版,和RHEL为同样的源代码,不过,RHEL和SUSE LE等企业版,提供的升级服务均是收费升级,无法免费在线升级,因此要求免费的高度稳定性的服务器可以用CentOS替代Red Hat Enterprise Linux使用。 Web服务器、缓存和PHP加速 Apache是LAMP架构最核心的Web Server,开源、稳定、模块丰富是Apache的优势。但Apache的缺点是有些臃肿,内存和CPU开销大,性能上有损耗,不如一些轻量级的Web 服务器(例如nginx)高效,轻量级的Web服务器对于静态文件的响应能力来说远高于Apache服务器。 Apache做为Web Server是负载PHP的最佳选择,如果流量很大的话,可以采用nginx来负载非PHP的Web请求。nginx是一个高性能的HTTP和反向代理服 务器,Nginx以它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名。Nginx不支持PHP和CGI等动态语言,但支持负载均衡和容 错,可和Apache配合使用,是轻量级的HTTP服务器的首选。 Web服务器的缓存也有多种方案,Apache提供了自己的缓存模 块,也可以使用外加的Squid模块进行缓存,这两种方式均可以有效的提高Apache的访问响应能力。Squid Cache是一个Web缓存服务器,支持高效的缓存,可以作为网页服务器的前置cache服务器缓存相关请求来提高Web服务器的速度,把Squid放在 Apache的前端来缓存Web服务器生成的动态内容,而Web应用程序只需要适当地设置页面实效时间即可。如访问量巨大则可考虑使用memcache作 为分布式缓存。 PHP的加速使用eAccelerator加速器,eAccelerator是一个自由开放源码PHP加速器,优化和动 态内容缓存,提高了性能PHP脚本的缓存性能,使得PHP脚本在编译的状态下,对服务器的开销几乎完全消除。它还有对脚本起优化作用,以加快其执行效率。 使PHP程序代码执效率能提高1-10倍。 具体的解决方案有以下几种: 1、squid + Apache + PHP + eAccelerator 使用Apache负载PHP,使用squid进行缓存,html或图片的请求可以直接由squid返回给用户。很多大型网站都采用这种架构。 2、nginx/Apache + PHP(fastcgi) + eAccelerator 使用nginx或Apache负载PHP,PHP使用fastcgi方式运行,效率较高。 3、nginx + Apache + PHP + eAccelerator 此方案综合了nginx和Apache的优点,使用Apache负载PHP,nginx负责解析其他Web请求,使用nginx的rewrite模块,Apache端口不对外开放。 数据库 开源的数据库中,MySQL在性能、稳定性和功能上是首选,可以达到百万级别的数据存储,网站初期可以将MySQL和Web服务器放在一起,但是当访问 量达到一定规模后,应该将MySQL数据库从Web Server上独立出来,在单独的服务器上运行,同时保持Web Server和MySQL服务器的稳定连接。 当数据库访问量达到更大的级别,可以考虑使用MySQL Cluster等数据库集群或者库表散列等解决方案。 总的来说,LAMP架构的网站性能会远远优于Windows IIS + ASP + Access(例如月光博客)这样的网站,可以负载的访问量也非常大,国内的大量个人网站如果想要支撑大访问量,采用LAMP架构是一个不错的方案。 综上所述,基于LAMP架构设计具有成本低廉、部署灵活、快速开发、安全稳定等特点,是Web网络应用和环境的优秀组合。 LAMP安装 适用环境 系统支持:CentOS-5 (32bit/64bit)、CentOS-6 (32bit/64bit)等linux系统 内存要求:≥256M 安装了什么 1、Apache 2、MySQL 3、PHP 4、phpmyadmin 3.5.1 5、ZendOptimizer 3.3.9(可选,只适合PHP 5.2.17) 6、xcache 1.3.2(可选) 7、pure-ftpd-1.0.36(可选) 如何安装 安装方法见参考资料 安装其它 1、执行脚本pureftpd. sh安装pure-ftpd。 2、执行脚本zend. sh安装ZendOptimizer。 3、执行脚本xcache. sh安装xcache。 使用提示 LAMP脚本使用 lamp add(del,list):创建(删除,列出)虚拟主机。 lamp ftp(add|del|list):创建(删除,列出)ftp用户。 lamp uninstall:一键卸载lamp(卸载之前注意备份好数据!)。 程序目录 mysql目录: /usr/local/mysql mysqldata目录:/usr/local/mysql/data php目录: /usr/local/php apache目录: /usr/local/apache 进程管理 apache启动(停止|重启|重载配置文件):service httpd start(stop|restart|reload) mysql(停止|重启|重载配置文件):service mysqld start(stop|restart|reload) vsftpd(停止|重启|重载配置文件):service vsftpd start(stop|restart|reload) 配置文件路径 apache:/etc/httpd/conf mysql:/etc/my.cnf php:/etc/php.ini /etc/php.d pure-ftpd:/etc/pure-ftpd.conf 使用注意 1、mysqlroot密码存放在/root/my.cnf文件中,添加虚拟主机的时候需要调用。如果修改了root密码,请手动更新my.cnf文件。 LAMP部署参考网址: http://www.lamphowto.com/ http://wiki.jikexueyuan.com/project/linux/lamp.html

二、MySQL、MariaDB介绍 mySQL(关系型数据库管理系统) MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件。 MySQL是一种关系数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。 MySQL所使用的 SQL 语言是用于访问数据库的最常用标准化语言。MySQL 软件采用了双授权政策,分为社区版和商业版,由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,一般中小型网站的开发都选择 MySQL 作为网站数据库。 由于其社区版的性能卓越,搭配 PHP 和 Apache 可组成良好的开发环境。 MariaDB数据库管理系统是MySQL的一个分支,主要由开源社区在维护,采用GPL授权许可 MariaDB的目的是完全兼容MySQL,包括API和命令行,使之能轻松成为MySQL的代替品。在存储引擎方面,使用XtraDB(英语:XtraDB)来代替MySQL的InnoDB。 MariaDB由MySQL的创始人Michael Widenius(英语:Michael Widenius)主导开发,他早前曾以10亿美元的价格,将自己创建的公司MySQL AB卖给了SUN,此后,随着SUN被甲骨文收购,MySQL的所有权也落入Oracle的手中。MariaDB名称来自Michael Widenius的女儿Maria的名字。 MariaDB基于事务的Maria存储引擎,替换了MySQL的MyISAM存储引擎,它使用了Percona的 XtraDB,InnoDB的变体,分支的开发者希望提供访问即将到来的MySQL 5.4 InnoDB性能。这个版本还包括了 PrimeBase XT (PBXT) 和 FederatedX存储引擎。 版本 MariaDB直到5.5版本,均依照MySQL的版本。因此,使用MariaDB5.5的人会从MySQL 5.5中了解到MariaDB的所有功能。 从2012年11月12日起发布的10.0.0版开始,不再依照MySQL的版号。10.0.x版以5.5版为基础,加上移植自MySQL 5.6版的功能和自行开发的新功能。 发展 成立于2009年,MySQL之父Michael “Monty” Widenius用他的新项目MariaDB完成了对MySQL的“反戈一击”。开发这个分支的原因之一是:甲骨文公司收购了MySQL后,有将MySQL闭源的潜在风险,因此社区采用分支的方式来避开这个风险。 过去一年中,大型互联网用户以及Linux发行商纷纷抛弃MySQL,转投MariaDB阵营。MariaDB是目前最受关注的MySQL数据库衍生版,也被视为开源数据库MySQL的替代品。 MariaDB虽然被视为MySQL数据库的替代品,但它在扩展功能、存储引擎以及一些新的功能改进方面都强过MySQL。而且从MySQL迁移到MariaDB也是非常简单的: 1、数据和表定义文件(.frm)是二进制兼容的 2、所有客户端API、协议和结构都是完全一致的 3、所有文件名、二进制、路径、端口等都是一致的 4、所有的MySQL连接器,比如PHP、Perl、Python、Java、.NET、MyODBC、Ruby以及MySQL C connector等在MariaDB中都保持不变 5、mysql-client包在MariaDB服务器中也能够正常运行 6、共享的客户端库与MySQL也是二进制兼容的 也就是说,在大多数情况下,你完全可以卸载MySQL然后安装MariaDB,然后就可以像之前一样正常的运行。 特点 MariaDB 是一个采用 Maria 存储引擎的MySQL分支版本,是由原来 MySQL 的作者Michael Widenius创办的公司所开发的免费开源的数据库服务器。 这个项目的很多代码都改编于 MySQL 6.0,例如 “pool of threads”功能提供解决多数据连接问题。MariaDB 5.1.41 RC可以到这里下载,32位和64位已编译Linux版本,还包括源代码包。MariaDB基于GPL 2.0发布。 与 MySQL 相比较,MariaDB 更强的地方在于: Maria 存储引擎 PBXT 存储引擎 XtraDB 存储引擎 FederatedX 存储引擎 更快的复制查询处理 线程池 更少的警告和bug 运行速度更快 更多的 Extensions (More index parts, new startup options etc) 更好的功能测试 数据表消除 慢查询日志的扩展统计 支持对 Unicode 的排序 相对于MySQL最新的版本5.6来说,在性能、功能、管理、NoSQL扩展方面,MariaDB包含了更丰富的特性。比如微秒的支持、线程池、子查询优化、组提交、进度报告等。

三、MySQL安装 #cd /usr/local/src/ #wget http://mirrors.sohu.com/mysql/MySQL-5.6/mysql-5.6.36-linux-glibc2.5-x86_64.tar.gz //下载mysql.tar.gz安装包 #tar zxvf mysql-5.6.36-linux-glibc2.5-x86_64.tar.gz //解压tar包 #mv mysql-5.6.36-linux-glibc2.5-x86_64 /usr/local/mysql //挪目录并且改名字 #useradd -s /sbin/nologin mysql //添加mysql用户 #cd /usr/local/mysql/ //进入到/usr//loacl/mysql/目录下 #ls //查看下mysql目录下的文件 bin data include man README share support-files COPYING docs lib mysql-test scripts sql-bench #mkdir /data/ //创建data目录 #./scripts/mysql_install_db --user=mysql --datadir=/data/mysql //执行完成之后,看下安装过程中有没有两个OK,或者使用# echo $? 这个命令来查看执行结果是否是0,是0就没问题 #rpm -qf /etc/my.cnf //查看到/etc/目录下自带my.cnf这个配置文件,我们可以使用它,但是需要对配置文件内容进行修改,具体修改处如下图所示: mariadb-libs-5.5.56-2.el7.x86_64 #vim /etc/my.cnf 说明:mysql配置文件默认叫做my.cnf,一般路径都在/etc/my.cnf,如果默认/etc/目录下自带my.cnf配置文件,按照如上修改配置文件即可使用;如果/etc/目录下没有my.cnf配置文件,我们则可以把使用如下命令把它的配置文件拷贝到/etc/目录下并重命名为my.cnf #cp support-files/my-default.cnf /etc/my.cnf #cp support-files/mysql.server /etc/init.d/mysqld //将mysql启动脚本拷贝到/etc/init.d/目录下,并且重命名为mysqld #vim /etc/init.d/mysqld //编辑配置文件,并修改mysql启动路径和数据存放路径,如下图: #ls -l /etc/init.d/mysqld //查看mysqld的权限是否是755,如不是755权限,请修改为755 #rwxr-xr-x 1 root root 10592 May 24 06:50 /etc/init.d/mysqld #chkconfig --add mysqld //把mysqld服务加入到系统服务列表里面 #chkconfig --list //可以查看下mysqld服务是否加入到系统服务列表里面 #chkconfig mysqld on //设置开机启动mysqld服务 #/etc/init.d/mysqld start //启动mysql, 或者使用命令 # service mysqld start,提示success说明成功 Starting MySQL.Logging to '/data/mysql/linux-01.err'. ........... SUCCESS! #ps aux |grep mysql //检查mysql进程 #netstat -lntp //查看mysql默认端口3306是否被监听 #/usr/local/mysql/bin/mysqld_safe --defaults-file=/etc/my.cnf --user=mysql --datadir=/data/mysql & //如果没有把mysqld服务加入到系统服务列表中,可以使用这个命令来启动mysql服务,--defaults-file=/etc/my.cnf指定配置文件所在路径 #killall mysqld //使用命令行的方式启动mysqld服务,需要使用killall来关闭服务 经验 需要注意:如果遇到mysqld的进程等了一分钟还杀不死,ps还会有进程,那么说明数据量很大,它正在写入到磁盘中去,这个时候不要强制的使用kill -9去杀进程,这样会导致丢数据或者损坏表;mysql有两个常用的引擎:innodb和myisam(存储量比较小)