在前面的操作中(之前的文章),我们已经手动配置好了nginx的负载均衡服务器,后端配置有两个RS;在nginx调度服务器上使用php源码编译安装了php,使用nginx发布了php页面,同时为了减轻数据库的负载,给php添加了高性能的分布式内存缓存服务器memcached,使用openresty对php+memcached进行了优化,提高了并发量;结合tomcat和nginx,在后端两个服务器上部署了tomcat集群,将动态静态资源进行分离,同时给tomcat集群配置了memcached缓存服务器,使用交叉式存储实现了后端两个服务器之间的session共享,提升了nginx调度的性能;在lnmp架构中,只剩下来要介绍的mysql数据库的构建。
MySQL 是一款安全、跨平台、高效的,并与 PHP、Java 等主流编程语言紧密结合的数据库系统。该数据库系统是由瑞典的 MySQL AB 公司开发、发布并支持,由 MySQL 的初始开发人员 David Axmark 和 Michael Monty Widenius 于 1995 年建立的。
目前 MySQL 被广泛地应用在 Internet 上的中小型网站中。由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,使得很多公司都采用 MySQL 数据库以降低成本。
关系型数据库,存储的格式可以直观地反映实体间的关系。关系型数据库和常见的表格比较相似,关系型数据库中表与表之间是有很多复杂的关联关系的。
常见关系型数据库有Oracle,SQLServer,DB2,Mysql等。在轻量或者小型的应用中,使用不同的关系型数据库对系统的性能影响不大,但是在构建大型应用时,则需要根据应用的业务需求和性能需求,选择合适的关系型数据库。
对于非关系型数据库即NoSQL数据库,以数据集的方式,把大量的数据集中存储在一起,类似于键值对、图结构或者文档,比较主流的有redis,HBase,MongoDb,memcache等产品,通常都采用开源的方式。
下载:https://dev.mysql.com/downloads/mysql/
解压源码包:
编译mysql用的是cmake(mysql8需要cmake3.5以上):
我们用的是mysql5.7的,所以我们直接安装源生的cmake即可:
编译还需要安装gcc,gcc-c++:
编译安装mysql还得靠官方文档啊: MySQL :: MySQL 5.7 Reference Manual :: 2.9.3 MySQL Layout for Source Installation
编译选项参数:MySQL :: MySQL 5.7 Reference Manual :: 2.9.7 MySQL Source-Configuration Options
cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DMYSQL_DATADIR=/data/mysql -DMYSQL_UNIX_ADDR=/data/mysql/mysql.sock -DWITH_INNOBASE_STORAGE_ENGINE=1 -DSYSCONFDIR=/etc -DWITH_EXTRA_CHARSETS=all -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DWITH_BOOST=/root/mysql-5.7.35/boost/boost_1_59_0
make && make install
#添加mysql用户
useradd -s /sbin/nologin -M -d /data/mysql mysql
cd /usr/local/mysql/support-files
cp mysql.server /etc/init.d/mysqld #要确保mysqld具有可执行权限
mkdir -p /data/mysql
chown mysql.mysql /data/mysql/
编译成功!此处有个warning,但是不影响编译,也可以解决:
注:若是编译中途由于依赖性问题失败,解决依赖性后重新编译前要删除mysql源码包里的缓存 CMakeCache.txt
在make时可以使用 -j 指定计算时使用的cpu核心数(虚拟机不能使用,会造成内存溢出):
make 完成后进行 make install :
进入/etc/my.cnf更改配置:
将mysql可执行文件bin路径放入用户主目录的 .bash_profile 中:
source .bash_profile 使之生效:
#初始化
mysqld --initialize --user=mysql
#启动数据库
/etc/init.d/mysqld start
使用初始密码登陆mysql,必须更改密码才能继续操作:
使用mysql_secure_installation 更改密码:
注:此时为测试环境不在生产环境,所以不要密码强壮度检测插件。此时mysql初始化完成,可以正常使用数据库了。
接下来我们就要把整个lnmp架构串联到一起:nginx+php+mysql,java则需要tomcat:
首先,我们在nginx发布目录:/usr/local/nginx/html 下放入phpMyAdmin:
phpMyAdmin 是一个以PHP为基础,以Web-Base方式架构在网站主机上的MySQL的数据库管理工具,让管理者可用Web接口管理MySQL数据库。通过phpMyAdmin 可以完全对数据库进行操作,例如建立、复制和删除数据等等。
此文件使用php打开,使用前要打开php-fpm。在nginx的配置文件 /usr/local/nginx/conf/nginx.conf 中添加默认首页index.php:
此时访问myadmin :
问题一:nginx找不到mysql的socket:
解决:
vim /usr/local/php/etc/php.ini :
更改完成之后reload一下:
此时登陆成功:
这个页面成功加载就说明lnmp架构部署成功。
我们由于实验环境的问题,将nginx+php+mysql都放在一台电脑上了,但是在生产环境部署时肯定是分布式部署的。