dopost 发表于 2018-10-7 13:06:55

PHP、MeriaDB(MySQL)

  下面介绍的是PHP、MeriaDB(MySQL)、编译安装AMP(httpd2.4、Meriadb、PHP)
  一、PHP
  1、web资源
  web资源分为动态、静态两种资源。静态资源,即原始形式与响应一致。
  CGI ------------------通用网关接口
  CGI协议是简化的http协议,可以让一个客户端,从客户端代理向网络服务器上的程序传输数据。CGI描述了客户端和服务器程序之间数据传输的标准。
  web数据请求流程:-------------httpd充当了服务器程序的反向代理
  client(http) --> httpd --> cgi --> application process --> mysql --> MySQL
  2、PHP基础 --------------通用服务器端脚本编程语言
  (1)、PHP
  通用服务器端脚本编程语言,专为web开发设计,将代码嵌入html文档中。PHP提供了命令行接口,可以当做一个shell来使用。
  (2)、Zend Engine ---------PHP语言的解释器,为PHP提供内存和资源管理。
  Zend Engine中,【PHP代码的处理过程】为:
  PHP代码 -----> Zend opcode(二进制格式,存储于内存)--------->opcode(用Zend Engine执行)
  1)、Scanning ---------将PHP代码转换为【语言片段】
  2)、Parsing -------------将语言片段转换成【表达式】
  3)、Compilation -------------将表达式编译成Opocdes
  4)、Execution ---------------执行Opcodes(每次一条)
  opcode -----------PHP脚本编译中间语言
  (3)、PHP加速器 --------------PHP opcode缓存加速器(6种)
  APC --------------不适用于PHP5.4
  eAccelerator ---------------包含了PHP loader
  Xcache ---------------快速、稳定
  Zend Optimizer -------------适用PHP5.2及以前
  Zend Guard Loader ------------适用PHP5.3
  NuSphere PhpExpress
  3、PHP源代码的子目录
  build -------------------编译相关的文件
  ext ----------------扩展目录,PHP函数的定义和实现
  main -----------------PHP核心
  Zend -------------实现Zend引擎(实现语言运行环境)
  pear -----------PHP扩展与应用仓库
  sapi -----------服务器抽象层的代码
  TSRM --------------线程安全管理、*G宏
  tests ------------PHP测试脚本集合
  win32 -------------Windows实现平台
  4、httpd与php的结合方式(4种):
  CGI --------------httpd主进程管理php进程;
  module ---------------将php编译为httpd的扩展模块;
  MPM -----------prefork、event
  FastCGI ---------fpm
  二、MeriaDB(MySQL) -----------LAMP中的M,即MySQL(MariaDB)。
  1、数据库管理基础
  DBMS -------------数据库管理系统
  RDBMS ----------数据表,行为实例,列为字段或域
  ANSI ----------数据库系列标准(SQL-86、SQL-89、SQL-99、SQL-03)
  NoSQL -------Redis、Memcached、MangoDB、Hbase(4类)
  RDBMS设计范式:(数据库的六种范式) -----------------越高的范式数据库冗余越小
  1)、第一范式(1NF)-----------对域添加规范(无重复的域)
  在第一范式中,数据库表的每一列都是不可分割的数据项,不能是集合、数组、记录等。即实体中的某个属性有多个值时,必须拆分为不同的属性。
  2)、第二范式(2NF)-------------每个实例或记录必须可以被唯一地区分
  在第二范式中,选取一个能区分每个实体的属性或属性组,作为实体的唯一标识。第二范式,要求实体的属性完全依赖于主关键字(主键)。
  3)、第三范式(3NF)------------属性不依赖于其它非主属性
  在第三范式中,要求一个关系中不能包含已在其它关系已包含的非主关键字信息。
  4)、第四范式(4NF)
  5)、第五范式(5NF)----------称完美范式
  6)、巴德斯科范式(BCNF)、。满足最低要求的范式是第一范式(1NF)。在第一范式的基础上进一步满足更多规范要求的称为第二范式(2NF),其余范式以次类推。一般说来,数据库只需满足第三范式(3NF
  关系型数据库管理系统:GreSQL、SyBase、DBII、InfoMIX、Oracle、MySQL、MariaDB
  CentOS 6:mysql-server-5.1
  CentOS 7:mariadb-server-5.5
  2、SQL基础
  (1)、MeriaDB的数据模型 --------------二维关系
  SQL --------------Structured Query Language(结构化查询语言)
  SQL接口处理的SQL语句:DDL(数据定义语言)、DML(数据操纵语言)、DCL(数据控制语言)。
  DDL -------------CREATE、ALTER、DROP
  DML -------------INSERT、DELETE、UPDATE、SELECT
  DCL -------------GRANT、REVOKE
  (2)、ACID标准 -----------------MySQL存储引擎的属性(事务)
  A -------------原子性
  C -------------一致性
  I -------------隔离性
  D -------------持久性
  (3)、SQL约束(4种):
  主键约束 ------------主键数据不能相同,不能为空
  外键约束 ---------------是否能引用,取决于另一张表的主键数据
  唯一键约束 ------------唯一标识记录,主键不能相同,但可以为空
  检查性约束 ------------------取决于表达式
  (4)SQL关系运算(3种)
  选择 ------------挑选行
  投影 ------------挑选列
  连接 --------------多表关联操作
  (5)、SQL数据抽象(3种)
  物理层 ------------决定数据的存储格式
  逻辑层 -----------数据库存储的数据、数据之间的关系
  视图层 ----------数据库中部分数据
  3、mysql命令
  MySQL的配置文件生效顺序:
  /etc/mysql/my.cnf --> /etc/my.cnf --> ~/.my.cnf
  (1)、mysql命令 -----------------------交互式、命令行、客户端程序
  格式:mysql
  常用选项:
  -D ------------使用哪一种数据库吗,可以不用空格进行分隔,默认为NULL
  -e 'COMMAND' -------------执行命令并退出,用引号引出命令,两种引号都可以。
  -h -----------------指定连接的MySQL数据库IP地址,也可以不用空格进行分隔,默认为localhost
  -p ---------------指定远程连接到服务器时所需的密码,默认为空,也可以不用空格分隔
  -P -------------以指定端口号来访问服务器,默认为3306,可不用空格
  -u -------------指定连接至远程MySQL服务器的用户名,默认为root
  (2)、mysql账户
  MySQL用户账户由两部分组成:'USERNAME'@'HOST'
  HOST可以使用两个通配符: %(任意长度任意字符), _(任意单个字符)
  例:'root'@'172.16.%.%'
  字符集:计算机显示的字符形状和硬盘上的映射
  mysql_secure_installation命令 ---------------------完成MySQL的账户安全初始化
  (3)、mysql的交互式命令:客户端命令、服务器端命令
  客户端命令 --------本地命令:clear、delimiter、go、ego、quit、exit、source、status、use(可不加结束符)
  clear -----------停止发送当前键入
  delimiter -----------设置结束标记
  go --------------将前面的语句,送往服务器执行
  ego -------------将前面的语句,送往服务器执行,并将返回结果纵向显示
  exit,quit -------退出mysql程序
  status -------------获取服务器的状态信息
  use -------------选择使用指定的数据库
  服务器端命令 -------发送到服务器端运行再返回:DDL、DML、DCL
  注意:在执行服务器命令时,每个语句必须以指定的结束符来结尾,默认是';'。
  三个服务器命令如下:
  DDL ---------数据定义语言。主要用于管理数据库的各组件,例如:数据库、表、索引、视图、用户、存储过程、存储函数、触发器、事件等。
  常用的服务器命令:CREATE、ALTER、DROP、SHOW
  DML ---------数据操纵语言。主要用于管理表中的数据,实现数据的增、删、改、查等操作。
  常用的服务器命令:INSERT、DELETE、UPDATE、SELECT
  DCL ---------数据控制语言。主要用于管理数据的访问授权。
  常用的服务器命令:GRANT、REVOKE
  mysql> help COMMAND_KEYWORD -------------获取帮助
  MariaDB [(none)]> help COMMAND_KEYWORD
  4、表管理--------------服务器端
  (1)、数据库管理命令 mysql>
  create ---------创建数据库(数据库名可能区分大小写,也可能不区分,取决于文件系统)
  格式:CREATE {DATABASE | SCHEMA} db_name
  mysql> show character set; ---------------查看当前MySQL服务器支持的【字符集】
  mysql> show collation; -----------------查看当前MySQL服务器支持的各字符集对应的【排序规则】

  >
  格式:ALTER {DATABASE | SCHEMA} >  drop -----------删除数据库
  格式:DROP {DATABASE | SCHEMA} db_name
  (2)、表管理 mysql>
  表包括行和列:
  行,用于描述某个事物的某些属性,表中可以没有行,称为空表。
  列,用来定义或描述某个具体的属性,表中至少要有一列属性,没有列的表没有意义。
  数据类型:定义了数据类型,才能决定数据的【存储格式】,决定数据所能参与的【运算】,决定数据可以表示的【有效范围】。
  数值型数据:(2类)
  精确数值型:INT(4位)、TINYINT、SMALLINT、MEDIUMINT、BIGINT
  近似数值型:FLOAT、DOUBLE
  字符型数据类型:(4类)
  定长字符型:CHAR、BINARY
  变长字符型:VARCHAR、VARBINARY
  对象存储:TEXT、BLOB
  内置特殊类型:SET、ENUM
  日期时间型:DATE、TIME、DATETIME、TIMESTAMP、YEAR
  数据类型相关的修饰符:(2类)
  与整数有关的:UNSIGNED,无符号整数,必须紧跟精确数值型之后。
  AUTO_INCREMENT,数值递加1。
  通用修饰符:NOT NULL、DEFAULT value
  (3)、创建表
  格式:CREATE TABLE tbl_name (create_definition,...)
  create table TAB_NAME-----------------创建表
  create_definition:字段、键、索引
  PRIMARY KEY ----------主键约束
  UNIQUE KEY -----------唯一键约束
  FOREIGN KEY -----------外键约束
  例:
  mysql> create table students (ID tinyint unsigned not null auto_increment primary key,Name char(30) not null,Age tinyint unsigned,Gender enum('M','F'));
  (4)、删除表
  格式:DROP TABLE tbl_name [, tbl_name] ...
  drop table TAB_NAME --------------删除一张表
  (5)、修改表:修改各个字段的属性或定义。add进行添加,drop进行删除。

  格式:ALTER TABLE tbl_name [alter_specification [,>
  >  例:

  mysql>>
  mysql>>
  mysql>>
  mysql>>
  mysql>>
  mysql>>  (6)、查询表
  desc ------------查询表
  5、服务器端管理命令 -----------------DDL、DML、DCL
  (1)DML
  1)、insert -----------添加数据。
  格式:INSERT tbl_name [(col_name,...)] {VALUES | VALUE} (value1,value2,...),(...),...
  注意,向表中插入的是【字符串】,需用【引号引用】,如果向表中插入的是数字,不能用引号引用。
  例:
  mysql> insert into students value (1,'little',17,23,'M');
  mysql> insert into students (ID,Name,Classes) values (2,'Zhang Sanfeng',"Wudang"),(3,'Zhang Wuji',"Mingjiao");
  mysql> select * from students; ------------查询
  2)、select ----------单表查询
  mysql> select * from TAB_NAME ------------查看表的所有字段

  mysql> select>
  mysql> select>  mysql> select * from TAB_NAME where clause ------------选择
  操作符:LIKE -------------模糊匹配
  RLIKE ------------使用正则表达式对字符串进行模式匹配
  IS NULL/IS NOT NULL -------------判断指定字段是否为空
  mysql> select * from students where Age < 40;
  mysql> select * from students where Age is null;
  mysql> select * from students where Name like '%ang%';
  mysql> selcet * from students where rlike '^Z.*g$' -----------查找较慢
  mysql> select * from TAB_NAME order by age desc ---------------排序
  3)、update --------------修改表的数据
  mysql> update students set age=age-10 where sex is not null;

  mysql> select * from students where>  mysql> update students set age=age+5;
  mysql> update students set age=age-10 where gender is not null;
  mysql> update students set age=age-20 order by age desc limit 5;
  4)、delete -------------删除表数据。需进行限定,防止全表删除。
  mysql> delete from students where Age > 50;
  mysql> delete from students where Agedelete from students where agedelete from students order by>  5)、mysql> use mysql ------------使用表
  (2)、DCL
  1)、GRANT ----------授权(查看、删除等)

  mysql> grant select ON ysu.students to 'little'@'172.16.%.%'>
  mysql> grant delete ON ysu.students to 'little'@'172.16.%.%'>  2)、REVOKE ----------回收权限
  mysql> flush privileges;------------手动重读授权表,使授权生效
  php 与 php-fpm不能共存
  6、LAMP平台快速架构(httpd、php模块化通信) -------------项目
  (1)、安装软件包
  CentOS 7:yum install httpdphpphp-mysqlmariadb-server
  CentOS 6:yum install httpdphpphp-mysqlmysql-server
  (2)、创建虚拟主机
  (3)、创建用于测试的账户 ----------------在MySQL或MariaDB中
  mysql> create database wpdb;

  mysql> grant all on wpdb.* to 'wpuser'@'172.16.%.%'>  (4)、测试php,测试php和mysql之间的通信,将以下源代码复制到以【index.php为文件名】的主页文件中。
  测试php:
  
  测试mysql连接性:
  
  (5)、将某个应用复制到虚拟主机的文档根目录中,进行进一步测试。
  三、编译安装AMP ----------httpd2.4、Meriadb
  1、编译安装httpd2.4
  例:编译安装httpd-2.4.27
  (1)、编译安装apr
  # tar xf apr-1.5.2.tar.gz
  # cd apr-1.5.2
  # ./configure --prefix=/usr/local/apr152
  # make -j #
  # make install
  (2)、编译安装apr-util
  # tar xf apr-util-1.5.4.tar.gz
  # cd apr-util-1.5.2
  # ./configure --prefix=/usr/local/apr-util154 --with-apr=/usr/local/apr152
  # make -j #
  # make install
  (4)、编译安装httpd-2.4.27
  # tar xf httpd-2.4.27.tar.gz
  # cd httpd-2.4.27
  # ./configure --prefix=/usr/local/apache24 --sysconfdir=/etc/httpd24 --enable-so --enable-ssl --enable-cgi --enable-rewrite --enable-modules=most --enable-mpms-shared=all --with-mpm=prefork --with-pcre --with-zlib --with-apr=/usr/local/apr152 --with-apr-util=/usr/local/apr-util154
  # make -j #
  # make install
  (5)、导出
  1)、导出二进制文件:--------防止二进制不兼容
  创建/etc/profile.d/httpd24.sh
  export PATH=/usr/local/apache24/bin:$PATH
  2)、导出帮助文档(可选)
  编辑/etc/man.config
  MANPATH /usr/local/apache24/man
  3) 导出头文件:
  # ln -sv /usr/local/apache24/include/ /usr/include/httpd
  (6)、如果想要使用service命令来启动或关闭服务,则需要为httpd提供sysV风格的脚本,脚本内容如下:/etc/init.d/httpd
  注意:想要成功使用该脚本管理服务,要在/etc/httpd24/httpd.conf配置文件中添加以下指令:PIDFile "/var/run/httpd24.pid"
  #!/bin/bash
  #
  # httpd      Startup script for the Apache HTTP Server
  #
  # chkconfig: - 85 15
  # description: Apache is a World Wide Web server.It is used to serve \
  #          HTML files and CGI.
  # processname: httpd
  # config: /etc/httpd24/httpd.conf
  # config: /etc/sysconfig/httpd24
  # pidfile: /var/run/httpd24.pid
  # Source function library.
  . /etc/rc.d/init.d/functions
  if [ -f /etc/sysconfig/httpd24 ]; then
  . /etc/sysconfig/httpd24
  fi
  # Start httpd in the C locale by default.
  HTTPD_LANG=${HTTPD_LANG-"C"}
  # This will prevent initlog from swallowing up a pass-phrase prompt if
  # mod_ssl needs a pass-phrase from the user.
  INITLOG_ARGS=""
  # Set HTTPD=/usr/sbin/httpd.worker in /etc/sysconfig/httpd to use a server
  # with the thread-based "worker" MPM; BE WARNED that some modules may not
  # work correctly with a thread-based MPM; notably PHP will refuse to start.
  # Path to the apachectl script, server binary, and short-form for messages.
  apachectl=/usr/local/apache24/bin/apachectl
  httpd=${HTTPD-/usr/local/apache24/bin/httpd}
  prog=httpd
  pidfile=${PIDFILE-/var/run/httpd24.pid}
  lockfile=${LOCKFILE-/var/lock/subsys/httpd}
  RETVAL=0
  start() {
  echo -n $"Starting $prog: "
  LANG=$HTTPD_LANG daemon --pidfile=${pidfile} $httpd $OPTIONS
  RETVAL=$?
  echo
  [ $RETVAL = 0 ] && touch ${lockfile}
  return $RETVAL
  }
  stop() {
  echo -n $"Stopping $prog: "
  killproc -p ${pidfile} -d 10 $httpd
  RETVAL=$?
  echo
  [ $RETVAL = 0 ] && rm -f ${lockfile} ${pidfile}
  }
  reload() {
  echo -n $"Reloading $prog: "
  if ! LANG=$HTTPD_LANG $httpd $OPTIONS -t >&/dev/null; then
  RETVAL=$?

  echo $"not>
  failure $"not>  else
  killproc -p ${pidfile} $httpd -HUP
  RETVAL=$?
  fi
  echo
  }
  # See how we were called.
  case "$1" in
  start)
  start
  ;;
  stop)
  stop
  ;;
  status)
  status -p ${pidfile} $httpd
  RETVAL=$?
  ;;
  restart)
  stop
  start
  ;;
  condrestart)
  if [ -f ${pidfile} ] ; then
  stop
  start
  fi
  ;;

  >
  >  ;;
  graceful|help|configtest|fullstatus)
  $apachectl $@
  RETVAL=$?
  ;;
  *)
  echo $"Usage: $prog {start|stop|restart|condrestart|reload|status|fullstatus|graceful|help|configtest}"
  exit 1
  esac
  exit $RETVAL
  # chmod +x /etc/rc.d/init.d/httpd
  # chkconfig --add httpd
  # chkconfig httpd on
  2、编译安装Meriadb ---------------通用二进制格式的MariaDB包
  (1)、编译安装meriadb-5.5
  # tar xf mariadb-5.5.57-linux-x86_64.tar.gz -C /usr/local
  # groupadd -r -g 306 msyql
  # useradd -r -u 306 -g mysql mysql
  # cd /usr/local
  # ln -sv /usr/local/mariadb-5.5.57-linux-x86_64 mysql
  # cd mysql
  # chown mysql. -R .
  # mkdir /mydata/data -pv
  # chown mysql. /mydata/data
  # cp support-files/my-large.cnf /etc/my.cnf
  添加配置条目:----------/etc/my.cnf
  innodb_file_per_table = ON
  skip_name_resolve = ON
  datadir = /mydata/data
  # cp support-files/mysql.server /etc/init.d/mysqld
  (2)、导出二进制文件
  # vim /etc/profile.d/maria5557.sh
  export PATH=/usr/local/mysql/bin:$PATH
  # source /etc/profile.d/maria5557.sh
  (3)、导出库文件
  mysql-x86_64.conf文件移除或改名为非.conf结尾的文件名;
  # vim /etc/ld.so.conf.d/mariadb5557.conf
  /usr/local/mysql/lib
  # ldconfig -v
  (4)、导出头文件
  # ln -sv /usr/local/mysql/include /usr/include/mysql
  (5)、初始化数据库
  # scripts/mysql_install_db --user=mysql --datadir=/mydata/data
  (6)、启动服务:
  # service mysqld start
  # chkconfig --add mysqld
  # chkconfig mysqld on
  3、编译安装php-5.6.31:
  FastCGI实现方式为:php-fpm。centos6不支持FCGI模块,centos7支持FCGI模块。
  fpm的配置文件:/etc/php-fpm.d/*.conf/etc/php-fpm.conf
  需要依赖于:libxml2-devel, gd-devel, freetype-devel, libmcrypt-devel
  (1)、安装php-5.6
  # tar xf php-5.6.31.tar.gz
  # cd php-5.6.31
  # ./configure --prefix=/usr/local/php56 --enable-fpm --with-mysql=/usr/local/mysql --with-mysqli=/usr/local/mysql/bin/mysql_config --with-openssl --enable-mbstring --enable-xml --enable-sockets --with-freetype-dir --with-libxml-dir=/usr --with-zlib --with-apxs2=/usr/local/apache24/bin/apxs --with-config-file-path=/etc/php56.ini --with-config-file-scan-dir=/etc/php56.d --with-gd --with-jpeg-dir --with-png-dir --with-mcrypt
  # make -j #
  # make install
  # cp php.ini-production /etc/php56.ini
  # mkdir /etc/php56.d
  # cp sapi/fpm/php-fpm.conf /etc/php56.d/
  # vim /etc/php56.d/php-fpm.conf
  user = nobody
  group = nobody
  listen = 127.0.0.1:9000
  listen.allowed_clients = 127.0.0.1
  pm = dynamic
  pm.max_children = 5
  pm.start_servers = 2
  pm.min_spare_servers = 1
  pm.max_spare_servers = 3
  pm.status_path = /fpm-status
  pm.max_requests = 500
  pid = /usr/local/php56/var/run/php-fpm.pid
  php_value = files ----------------pm方式的php进程存储session的路径
  php_value = /var/lib/php56/session
  (2)、pm方式的php进程存储session的路径
  # mkdir /var/lib/php56/session
  # chown nobody.nobody /var/lib/php56/session
  (3)、为php-fpm提供SysV风格脚本,并将其添加至服务列表
  # cp sapi/fpm/init.d.php-fpm/etc/rc.d/init.d/php-fpm
  # chmod +x /etc/rc.d/init.d/php-fpm
  # chkconfig --add php-fpm
  # chkconfig php-fpm on
  (4)、修改/etc/rc.d/init.d/php-fpm
  1)、添加:scan_conf_dir=/etc/php56.d
  2)、修改:
  php_fpm_CONF=${exec_prefix}/php-fpm.conf
  改为:
  php_fpm_CONF=${scan_conf_dir}/php-fpm.conf
  (5)、启动服务
  # service php-fpm start
  4、httpd和fastCGI兼容通信 ------------------项目
  FastCGI实现方式为:php-fpm。centos6不支持FCGI模块,centos7支持FCGI模块。
  fpm的配置文件:/etc/php-fpm.d/*.conf/etc/php-fpm.conf
  # yum install php-fpm php-pdo php-gd php-mbstring php-mysql
  两个服务进程的配置文件:/etc/php-fpm.conf, /etc/php-fpm.d/*.conf
  服务进程的配置文件:(global、www两段)-------------/etc/php-fpm.d/www.conf
  :
  pid = /run/php-fpm/php-fpm.pid
  : -------------/etc/php-fpm.d/www.conf配置文件中的pool的配置内容
  user = apache
  group = apache
  listen = 127.0.0.1:9000
  listen.backlog = 100
  listen.allowed_clients = 127.0.0.1
  pm = dynamic
  pm.max_children = 50
  pm.start_servers = 5
  pm.min_spare_servers = 5
  pm.max_spare_servers = 35
  pm.status_path = /fpm-status
  pm.max_requests = 500
  5、配置httpd和php-fpm结合 ---------------------项目
  (1)、httpd的配置
  
  DocumentRoot "/myweb/vhosts/www"
  ServerName www.qhdlink.com
  DirectoryIndex index.php
  ProxyRequests Off
  ProxyPassMatch ^/(.*\.php) fcgi://127.0.0.1:9000/myweb/vhosts/www/$1
  
  Options None
  AllowOverride None
  Require all granted
  
  
  (2)、设置php加速访问 --------------2种安装方式
  编译安装:
  下载xcache的源代码 http://xcache.lighttpd.net
  编译xcache:
  # tar xcache-3.2.0.tar.gz
  # cd xcache-3.2.0
  # phpize
  # ./configure --enable-xcache --with-php-config=/usr/bin/php-config
  # make -j #
  # make install
  EPEL安装:-----------直接使用rpm包安装,rpm包在EPEL源中
  # yum install php-xcache

页: [1]
查看完整版本: PHP、MeriaDB(MySQL)