• 第七周LINUX学习笔记


                              HTTP的基本操作

    3月17
    资源子网和通信子网
    套接字:两类
        socket:IP port
                IP:port
                Ip.port

        unix sock:基于文件系统通信实现

        BSD发明:
        MTU:最大传输单元

    传输层协议:
        面向连接的:TCP
            虚连接(95%)
        无连接的:UDP

    套接字的类型:
        TCP套接字
        UDP套接字
        raw套接字(由程序自身维护)

    物理层=硬件
    数据链路层=驱动

    通信:点对点
          c/s(client/server)

    客户端的为随机端口

    c/s:
       通信子网:只负责传输,内容是什么不管
    ,   应用层协议:特定的
          http,https,smtp,pop,imap,ftp,ldap

    http 超文本传输协议(hyprttext transport protcol)
       html:hypertext mark language(超文本标记语言)

       client:browser
         URI(统一资源提示符)的子集:URL(统一资源定位符)
       server:http server

    GUI
    CLI

    html格式的文件
      <html>
         <head>
            <title></title>
         </head>
         <boby>
              <h1></h1>
                <p><img src=""></p>
               <h2></h2>
                <p>  <a href="a.html" > </a>  </p>
         </body>
       </html>


    css: Cascading style sheet(层叠样式表)

    动态页面:
        程序脚本
            客户端
            服务器端 CGI(common gateway interface程序通用接口)
              c,c++
              perl
              python
              php
              asp.net
              jsp

    一个页面中可能会包含多个页面对象

    URI:Uniform Resource Identifier
    URL: Uniform Resource Locator

    方案:主机地址:资源

    http协议的版本:
        http0.9:只能传输html文档,1991年
        http1.0:支持多媒体数据的处理,保持连接。有缓存功能
        http1.1:支持更多的请求方法,更加精细的缓存控制,持久连接

    MIME:multipurpose Internet mail extension 互联网多用户邮件扩展
      nase64:将二进制数据编码成文本发送,并能够让接受方还原回原来的格式

    HTTP报文:

       HTTP事务:一次请求以与其对应的响应
       HTTP方法:GET、PUT、HEAD、POST、DELETE
       HTTP请求:request
           HTTP请求报文
              报文格式:
                <method><request-url><version>
                <headers>首部
                <entity-body>
              首部:
                 name:value
                 content-type:images/gif

                 分三类:
                    通用首部
                    请求首部
                    响应首部

       HTTP响应:response
           HTTP响应报文
           报文格式:
              <version><status><reason-phrase>
              <headers>
              <entity-body>

            <method>:请求方法,希望服务器端执行的动作,如GET、HEAD、POST等
            <request-url>:请求的资源,可以是相对路径,也可以是完整的URL
            <version>:协议版本,格式HTTP/,如http/1.0
            <major>。<minor>多媒体主类型/从类型
            <headers>:HTTP首部
            <status>:状态码
            <reason-phrase>:原因短语,数字状态吗易读信息
            <entity-body>:主体部分

            http协议:是一种stateless(无状态)协议,
                 一次HTTP事务结束后,链接即行断开,例如一次请求需要TCP的三次握手,然后请求到一个文件后断开。那么如果有100个文件。就需要执行100次这样的过程。

                 加速方式:
                     并行请求:即利用多线程。第一次连接是直接反问,后续才用并行
                     持久连接:保持TCP的连接。
    服务器的连接是有限的,连接用户达到阈值时,后续用户就得排队。所以持久连接也需要断开。断开的方式:给予请求文件最大的数量和请求持续的时间。哪个超过或达到要求了便断开。而例如设置时间为10S 那么对于一个繁忙的服务器来讲,后续的用户便需要等待10S。所以是否持久,如何选择到一个最佳分配点,是运维时间分配的重要方向。



    HTTP的请求方法:
          安全的方法:GET、HEAD
          POST、PUT、DELETE、OPTIONS、TRACE
          扩展方法:LOCK、MKCOL、COPY、MOVE

         GET:请求获取一个资源,需要服务器发送
         HEAD:跟GET相似,但其不需要服务发送资源而仅传回响应首部
         POST:支持HTML表单提交,表单中有用户填入的数据,这些数据会发送到服务器端,由服务器存储至某位置(例如发送处理程序)
         PUT:与GET相反,向服务写入文档;发布系统
         DELETE:请求删除URL指向的资源
         OPTIONS:探测服务器端对某资源所支持的请求方法
         TRACE:追踪请求资源要经过的防火墙、代理或网关等
     
        响应报文代码
           1XX:信息性状态码
               100:
           2XX:成功状态码
               200:OK
               201:Created OK
           3XX:重定向状态码
               301:Moved Permanebtly 永久重定向,在响应报文中使用首部“Location:URL”指定资源现在所在的位置
               302:Found 临时重定向,在响应报文中使用首部“Location:URL”指定临时资源位置
               304:Not Modified,条件式请求中使用
           4XX:客户端的错误
               403:Forbidden,请求被服务器拒绝
               404:Not Found,服务器无法找到请求的URL
               405:Method Not Allowed,不允许使用此方法请求响应的URL
           5XX:服务器类的错误
               500:Internal Server Error,服务器内部错误
               502:Bad Gateway:代理服务器从上游收到一条伪响应
               503:Service Unavailable,服务器此时无法提供服务,但将来可能可用

    HTTP首部
        通用首部:请求和响应都可以使用的
        请求首部:
        响应首部:
        实体首部:用于指定实体属性
        扩展首部:非标准首部,可能是由程序开发者创建的,例如X-Forward-For

     通用首部:
            Connection:定义C/S之间关于请求/响应的有关选项
                 对于http/1.0,Connection keep-alibe
            Via:显示了报文经过的中间节点
            Cache-Control:缓存指示
            Pragma

     请求首部:
           Cilent-IP:请求端IP
           Host:请求的主机名和端口号,虚拟主机环境下用于不同的虚拟主机
           Referer:指明了请求当前资源的原始资源的URL
           User-Agent:用户代理,使用什么工具发出的请求

           Accept首部:用户标明客户自己更倾向于支持使用的能力
               Accept:指明服务器能发送的媒体类型
               Accept-Charset:支持使用的字符集
               Accept-Encoding:支持使用的编码方式
               Accept-Language:支持使用语言

           条件请求首部:
               Expect:期望的行为
               If-Modified-Since:是否在指定的时间以来修改过此资源(一般用于询问缓存是否修改过),没有修改过发304
               If-None-Match

            跟安全相关的请求首部:
                Authorication:客户端提交给服务端的认证数据,如账号和密码
                Cookie:客户端发送给服务器端身份标识
                Cookie2
        
     响应首部:
                   Age:响应持续的时间
               Server:向客户端标明服务器程序名称和版本

        协商首部:
              Accept-Ranges:对当前资源来讲,服务器所能够接受的范围类型
              Vary:首部列表,服务器会根据列表中的内容挑选出最适合的版本发送给客户端

        跟安全相关的响应首部
               Set-Cookie:服务器端在某客户端第一次请求时发给的令牌
               Set-Cookie2:
               WWW-Authenication:质询,即要求客户端提供账号和密码

    实体首部:
         Location:资源的新位置
         Allow:允许对此资源使用的请求方法

         内容首部:
             Contern-Encoding
             Contern-Language
             Contern-Length
             Contern-type
             Contern-Range
             Contern-Location

         缓存首部:
           ETag:实体标签
           Expires:过期标签
           Last-Modified:上一次的修改时间

    回顾:
        1.IPC(Inter Process Communication)进程通信
        同一主机进程
        信号、旗语、shm
        Unix Sock
        跨主机的进程
        rpc
        socket
    缓存:内核所维护的内存空间
    Client:
       GUI:
         IE、Fierfox、Safari、chrome、Opera
        CLI:
         elinks,curl

    Server:
        静态
        ASF:httpd
        Nginx
        lighttpd
        gws
       APP Server
        IIS
        tomcat
        jetty
        resin

     http:html
         http/1.0

    一个Web请求的基本过程
       建立连接
       接收请求
       处理请求
       访问资源
       构建响应
       发送响应
       记录日志

    Web服务器的输入输出结构
        单线程I/O结构
        多线程I/O结构 一个线程响应一个请求 与复用的I/O结构的区别是同一个文件需要被读取多次,降低了内存使用率,但是即使一个线程奔溃,其他线程不受影响,安全性增加
        复用的I/O结构  单个线程响应多个请求,增加内存使用率, 但是不安全。
        复用多线程I/O结构:多个线程,每个线程响应多个请求 其实就是多个复用的I/O结构


    sendfile:可以让内核在取出请求的文件后直接调用系统功能加工成报文,发送给客户端。这是一种优化机制,但是不能对过大的文件提供此服务



    日志写入缓冲,再由缓冲写入磁盘。缓冲有多大需要根据情况来调配。因为缓冲中的数据在电脑突然崩溃时就会被清除。

    httpd:俗称apache
      a pachey server=apache

      www.netcraft.com


    httpd:高度模块化
       core+modules
       DSO:Dynamic Shared Object 动态模块对象
       MPM:Multipath Processing Module
         多道处理模块,非一个模块,而是对一种特性的称谓
           prefork:一个进程一个请求(预先创建好),有最小空闲进程数和最大空闲进程数。select():1024 规定最多涌进来的请求数
              
           worker:一个进程多个线程,一个线程一个请求,与上述的prefork两者性能其实不分伯仲,实际上并没有改变一个线程一个请求的本质,但是节省了很多内存

    实际上prefork和worker都是上述所说的结构中的多线程I/O结构

           event:一个线程响应多个请求,不生成进程
               event-driven:事件驱动,主要目的在于实现进程响应多个请求  属于复用多线程I/O结构

    上述几种工作方式其实都是由一个主进程来创建子进程来实现,主进程也负责回收子进程

    http版本
       http-1.3
       http-2.0
       http-2.2,不支持event
       http-2.4

    httpd的功能特性:
       路径别名:alias
       用户认证:authentication
       虚拟主机:virtual host
       反向代理:
           负载均衡:
        用户站点:
        CGI:Common Gateway Interface

    安装httpd
        yum -y install  httpd
        服务脚本:/etc/rc.d/init.d/httpd
           脚本配置文件:/etc/sysconfig/httpd
        运行目录:/etc/httpd
        配置文件:
         主配置文件:/etc/httpd/conf/httpd.conf
             扩展配置:/etc/httpd/conf.d/*.conf  可以被主配置文件所调用
         Socket:80/tcp,443/tcp
         文档根目录:/var/www/html
             CGI:/var/www/cgi-bin/  能够执行的动态脚本


    日志滚动:
        日志切割
        时间、空间

    Docroot:文档根目录   /var/www/html/

    配置文件:
        /etc/httpd/conf/httpd.conf
           配置参数 值
               配置指令不区分字符大小写
               值有可能区分大小写
               有些指令可以重复出现多次

           配置文件格式
                全局配置
                主机配置:用于仅提供一个站点时
                虚拟主机配置:用于提供多个站点时

            配置文件语法测试
                serviice httpd configtest
                httpd -t

            绝大多数配置修改后,可以用过service httpd reload 来生效,如果修改了监听的地址或端口,必须重启服务才能生效

    1.监听套接字
      Listen [IP:]port
        此指令可以出现多次,用于指定监听多个不同的套接字
           Listen 80
           Listen 172.16.100.7:8080
    2.配置使用Keepalive
       KeepAlive {On|Off}
       KeepAliveTimeout 2 超时时间
       MaxKeepAliveRequests 50 最大连接
    3.MPM
       多道处理模块
       httpd -l 查看编译进内核的模块
       想使用不同的机制,修改配置文件即可 /etc/syconfig/httpd文件
     <IfModule preforck.c>判断模块是否存在
        StartServers       8 默认启动的工作进程数
        MinSpareServers    5 最少空闲进程数
        MaxSpareServers   20 最大空闲进程数
        ServerLimit      256 最大活动进程数
        MaxClients       256 最大并发连接数,最多允许发起的连接请求的个数
        MaxRequestsPerChild  4000 每个子进程在生命周期内最大允许服务的最多请求个数
      </IfModule>

        <IfModule worker.c>
        StartServers         4 启动的子进程的个数
        MaxClients         300 最大并发连接数,最多允许发起的连接请求的个数
        MinSpareThreads     25 最少空闲线程数
        MaxSpareThreads     75 最大空闲线程数
        ThreadsPerChild     25 每个子进程生成的线程数
        MaxRequestsPerChild  0 每个子进程在声明周期内最大允许服务的最多请求个数
        </IfModule>

    4、DSO模块的加载方式
       LoadModule module_name /path/to/module
          如果使用相对路径,则对于ServerRoot所定义的位置而言
          LoadMoudule php5_module /usr/lib64/httpd/modules/php.so
          让服务重载配置文件方能生效
       httpd -m 列出与加载到所有DSO模块与非DOS模块
        不想加载某个模块的话,配置文件中注释掉即可
    5、配置站点根目录
        DocumentRoot /path/to/somewhere

    6、页面访问属性
        <Direcotry "/path/to/somewhere">
           Options  选项
              Indexes:缺少指定的默认页面时,允许将目录中的所有文件已列表形式返回给用户:危险:慎用
              FollowsymLinks:允许跟随符号链接所指向的原始文件
              None:所有都不启用
              All:所有的都启用
              ExecCGI:允许使用mod_cgi模块执行CGI脚本
              Includes:允许使用mod_include模块实现服务器端包含(SSI)
              IncludesNOEXEC:允许包含但不允许执行脚本
              MultiViews:允许使用mod_negotiation实现内容协商
              SymLinksIfOwnerMatch:在链接文件属主属组与原始文件的属主属组相同时,允许跟随符号连接所指向的原始文件
           AllowOverride  用户认证的配置
        </Direcotry>
         可以使用正则表达式,使用~
    7.基于主机的访问控制
       <Direcotry "/path/to/somewhere">
         Options
         AllowOverride
           None 不禁用下面
         order 次序,写在后面的为默认   即两者都有或者两者都没有的情况下,以写在后面的为默认
         
         Allow from
         Deny from
        </Direcotry>

       如果都匹配或都不匹配时以默认为准
       否则则以匹配到的为准
                 Allow from
                 Deny from
                    IP,Network Address
                    172.16
                    172.16.0.0
                    172.16.0.0/16
                    172.16.0.0/255.255.0.0
    基于用户做访问控制

    8.定义默认主页面
       DirectoryIndex index.html  123.html 。。。依次查找

    9.用户目录
        如果期望让每个用户都可以创建个人站点:http://Server_IP/~Username/
        userdir disablied:禁止
        userdir public_html:
              public_html是用户家目录下的目录名称,所有位于此目录中的文件均可通过前述的访问路径进行访问
               用户的家目录得赋予进行httpd进程的用户拥有执行权限
           setfacl -m u:apache:x ~Username

    10、配置日志功能
       /var/log/http/
           access.log:访问日志,其需要记录的内容需要自定义
           error.log
          
          访问日志:
            CustomLog "/path/to/log_file" LogFormat
            LogFormat定义日志格式
            "%h %l %u %t "%r" %>s %b "%{Referer}i" "%{User-Agent}i""
            %h:客户端地址
            %l:远程的登录名,通常为-
            %u:认证时的远程用户名,没有认证时为-
            %t:接收到的请求时的时间,为标准英文格式时间+时区
            " :转义,显示""
            %r:请求报文的起始行
            %>s:响应状态码,
            %b:以字节响应报文的长度,不包含http报文
            %{Header_Name}i:记录指定请求报文首部的内容(value)
            %u:请求的URL
            
         详情请参考:http://httpd.apache.org/docs/2.2/mod/mod_log_config.html#formats
            错误日志:
             ErrorLog

    11、路径别名
       Alias /alias/ "/path/to/somewhere/"
        意味着访问http://Server_IP/alias时,其页面文件来自于/path/to/somewhere/中

    12、指定默认的字符集
         AddDefaultCharset

                                  HTTP基本操作丶编译



    MIME:多媒体类型
       major/minor
           HTML: text/html
           ASCII:text/plagin
           JPEG:image/jpeg
           GIF:image/gif
           QuickTime(流媒体):video/quicktime


    13.脚本路径别名(CGI接口)
       URL-->FileSystem Directory
       CGI:Common Gateway Interface(通用网关接口)使WEB服务器可以跟一个应用程序进行通信,该应用程序将运行的结果返还给WEB服务器。从通信环境中获得结果。  如当你访问一个脚本时,可能返回的只是脚本的文本内容,这时就需要服务器利用CGI进行通信,让shell解释器将脚本运行的结果返还

        CGI是不安全的 所以现在极少被使用。取而代之的是php,python等脚本语言使用的 不同的接口
          在第一行写入
          echo “Content-Type:text/html:
       mod_alias,mod_cgi
       ScriptAlias /URL/ "/path/to/somewhere" somewhere  例如配置时ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"   访问时 http://IP/cgi-bin/文件名

    CGI文件需要放在此目录下才可以被执行
       也可以在目录中实现

      脚本格式一般为
       cat << EOF
        Content-Type:text/html
        <pre>
        The time is : `date`.
        </pre>
        EOF

    14.基于用户的访问控制
        虚拟用户:不是系统用户,只是为了获取某种资源类型的一种虚拟的用户
           文件/etc/httpd/conf/.htpasswd
           SQL数据库
           dbm:
           ldap:轻量级目录访问协议
        认证类型(auth):
            basic:基本认证,账号和密码明文发送
            digest:摘要认证,hash编码之后发送
        认证提供者(authentication provider):账号和密码的存放位置
          authn
        授权机制(authorization):根据什么进行授权
        案例:基于文件,做基本认证 根据用户和组进行授权
        1、编辑配置文件,为需要认证的目录配置认证机制
        <Directory "/www/htdocs/fin">A
            options None
            AllowOverride AuthConfig 使用认证配置
            AuthType Basic 使用基本认证
            AuthName "Private Area" 质询时标题
            AuthUserFile /etc/http/conf/.htpasswd  密码的存放位置
            Require vaild-user 可访问的用户

        </Directory>
        2、使用htpasswd命令使用生成认证库
          htpasswd
          -c 创建密码,创建第一个用户时使用 ,后续在同一个身份认证库中添加用户名和密码时记得不需要加-c选项,否则会覆盖掉原有文件
          htpasswd -c -m /etc/http/conf/.htpasswd tom
          -m MD5格式存放
          -b 批量模式
          -D 删除用户
        3、基于组认证
        <Directory "/www/htdocs/fin">
            options None
            AllowOverride AuthConfig 使用认证配置
            AuthType Basic 使用基本认证
            AuthName "Private Area" 质询时标题
            AuthgroupFile /etc/http/conf/.htpasswd  密码的存放位置
            Require group GroupName  可访问的用户

        </Directory>
           先创建用户,在创建组
           组文件:
             组名:用户1 用户2 用户3

     15.虚拟主机
         一个物理服务器提供多个站点;使用虚拟主机得先取消中心主机(默认主机)
         基于不同的IP实现不同的虚拟主机
            变化IP
         基于不同的port实现不同的虚拟主机
            变化port
         基于不同主机名实现不同的虚拟主机
            变化ServerName的值
        通过请求报文中的HOST来实现不同的虚拟主机访问  首先要将上面的#NameVirtualHost *:80注释去掉,并且在VirtualHost中IP:port都需要以*:80来标注 还要修改LINUX机中的主机指向地址,WINDOWS中也需要进行一些修改。
         
        <VirtualHost IP:port>
          SeverName
          DocumentRoot ""
          <Directory "">
          </Directory>
          ServerAlias
          ServerAdmin
        </VirtualHost>
        将全局中的DocumentRoot""注释掉

       虚拟主机的单独配置
           用户认证
           访问日志
           错误日志
           别名
           脚本别名

       基于IP认证机制,基于用户认证

           http协议认证、表单认证

    16.https协议
         x509.3证书格式
             证书格式的版本号
             证书序列号
             证书签名算法
             证书颁发者
             有效期
             持有者的名称
             持有者的公钥
             CA的ID
             持有者的ID
             其他扩展信息
                  基本约束
                  证书策略
                  密钥的使用限制
             CA签名
        ssl握手要完成的工作
             交换协议版本号
             选择一个双方都支持的加密方式
             对两端实现身份验证
             密钥交换
        http:文本协议 80/tcp
        https:二进制格式的协议 443/tcp

        SSL会话基于IP地址进行:不支持在基于主机名的虚拟主机上实现 因为SSL回话进行是在DNS域名解析后进行的,所以进行的还是IP地址的通信

        客户端验证服务器端证书时:
              日期检查:证书是否在有效期内
              证书颁发者的可信度
              证书的签名检测:
              持有者的身份检测


        httpd:基于mod_ssl模块实现对ssl的支持
          可以在/etc/pki/tls/certs
          openssl s_client
          -connet:验证的地址:端口
          -CAfile:CA证书的路径
        1)、准备好服务器的私钥和证书
        2)、安装mod_ssl模块
             yum -y install mod_ssl
        3)、配置/etc/httpd/conf.d/ssl.conf
           配置实用ssl的虚拟主机
              ServerName
              DocunmentRoot
           配置证书和私钥
              SSLCertificatFile 证书文件
              SSLCertificatKeyFile 密钥文件
         4)、重启httpd服务
         5)、测试
             openssl s_client -connet:验证的地址:端口  -CAfile:CA证书的路径

        URL Rewrite:URL重写

    17、服务器status页面
        内生的status信息,且此信息可以通过web予以显示
       基于文件系统路径访问属性
        <Directory [~] "">
        </Directory>

        基于URL访问属性
        <Location [~] "">
        </Location >

         也可以使用<LocationMatch "">
         </LocationMatch>来实现正则表达式的配置

        基于单个文件的访问属性
         <File [~] "">
         </File>


         

         如果要配置其属性的URL能映射到某具体文件系统路径,建议使用<Directory>

        处理器:当文件被调用时,Apache内部表现形式:一般每种文件类型都有其隐式处理器;否则需要自己定义
           显式的定义使用的处理器:SetHandler


        <Location /URL>
            setHeandler server-status
        </Location>


        定义访问控制机制
            基于IP控制
            基于用户控制

        示例:
         <Location /server-status>
              SetHandler sever-status
              AuthType Basic
              AuthName "Sever Status"
              AuthUserFile "/etc/http/conf/.htpasswd"
              Require valid-user 允许所有用户
              Order deny,allow
              Allow from all
          </Location>


    18、curl命令

    curl是基于URL语法在命令行方式下工作的文件传输工具,它支持FTP, FTPS, HTTP, HTTPS, GOPHER, TELNET, DICT, FILE及LDAP等协议。curl支持HTTPS认证,并且支持HTTP的POST、PUT等方法, FTP上传, kerberos认证,HTTP上传,代理服务器, cookies, 用户名/密码认证, 下载文件断点续传,上载文件断点续传,,http代理服务器管道( proxy tunneling), 甚至它还支持IPv6, socks5代理服务器,,通过http代理服务器上传文件到FTP服务器等等,功能十分强大。

    curl的常用选项:

        -A/--user-agent <string> 设置用户代理发送给服务器,即告诉服务器浏览器为什么
        -basic 使用HTTP基本验证
        --tcp-nodelay 使用TCP_NODELAY选项
        -e/--referer <URL> 来源网址,跳转过来的网址
        --cacert <file> 指定CA证书 (SSL)
        --compressed 要求返回是压缩的形势,如果文件本身为一个压缩文件,则可以下载至本地
        -H/--header <line>自定义头信息传递给服务器
        -I/--head 只显示响应报文首部信息
        --limit-rate <rate> 设置传输速度
        -u/--user <user[:password]>设置服务器的用户和密码
        -0/--http1.0 使用HTTP 1.0

    19、使用mod_deflate模块压缩页面优化传输速度,可以写为一行,也可以写多行,默认为gzip

    SetOutputFilter DEFLATE

    # mod_deflate configuration
    <IfModule mod_deflate.c>
     
        # Restrict compression to these MIME types
        AddOutputFilterByType DEFLATE text/plain
        AddOutputFilterByType DEFLATE text/html
        AddOutputFilterByType DEFLATE application/xhtml+xml
        AddOutputFilterByType DEFLATE text/xml
        AddOutputFilterByType DEFLATE application/xml
        AddOutputFilterByType DEFLATE application/x-javascript
        AddOutputFilterByType DEFLATE text/javascript
        AddOutputFilterByType DEFLATE text/css
     
        # Level of compression (Highest 9 - Lowest 1)默认为6
        DeflateCompressionLevel 9
        
        # Netscape 4.x has some problems.
        BrowserMatch ^Mozilla/4 gzip-only-text/html
        
        # Netscape 4.06-4.08 have some more problems
        BrowserMatch ^Mozilla/4.0[678] no-gzip
        
        # MSIE masquerades as Netscape, but it is fine
        BrowserMatch MSI[E] !no-gzip !gzip-only-text/html

    </IfModule>


    扩展功能
        apachectl
           Apache HTTP服务控制工具
        ab
           Apache HTTP服务器性能测试工具
        apxs
           Apache 扩展工具
        configure
           配置源代码
        dbmmanage
           为基本认证创建和更新DBM格式的用户认证文件
        htcacheclean
           清理磁盘缓存
        htdigest
            为摘要认证创建和更新用户认证文件。
        htdbm
            操作 DBM 密码数据库。
        htpasswd
            为基本认证创建和更新用户认证文件。
        httxt2dbm
            为 RewriteMap 创建 dbm 文件。
        logresolve
            将 Apache 日志文件中的 IP 地址解析到主机名称。
        rotatelogs
            不关闭 Apache 而切换日志文件。
        suexec
            执行外部程序前切换用户。

    20.资源限定
        软限制:可以超出的限制,但仅能超出一定时长
        硬限制:绝对不能超出的限制
       ulimit:只能修改软限制
           -n [N]:显示或限制能打开的最大的文件句柄数,
           -u [N]:所能够打开的最大进程数
        如果修改硬限制
          /etc/security/limits.conf,扩展配置etc/security/limits.d/*.conf
     对谁进行限定    类型  要限定的选项 值

     21、ab工具的初步使用
        -c 模拟的并发数
        -n 模拟的总请求数
       一般并发数应该小于等于请求数
       http_load webbench seige(只做参考)
       tcp_copy

    22、httpd-2.4编译安装  01:00
        依赖于更高版本的apr和apr-util
        apr全程 apache portable runtime

         1)解决依赖关系
             yum -y install pcre-devel
         2)编译安装apr
            tar
            cd
            ./configure --prefix=/usr/local/apr
            make && make install
         3)编译安装apr-util
             tar
             cd
              ./configure --frefix=/usr/local/apr-util --with-apr=/usr/local/apr
              make && make install

          httpd2.4新特性
            1)MPM支持在运行时装载
                 --enable-mpms-shared=all --with-mpm=event 启用默认的event
            2) 支持event
            3)异步读写
            4) 在每模块及每目录上指定日志级别
            5)每请求配置:<If> <Elseif>
            6) 增强版的表达式分析器
            7) 毫秒级的keepalive timeout
            8)支持主机名的虚拟主机不在需要NameVirtualHost指令
            9) 支持使用自定义变量
            新增一些模块:mod_proxy_fcgi,mod_ratelimit,mod_request,mod_remoteip
            对于基于IP的访问做了修改,不在使用order,allow,deny这些机制;而是统一使用require进行
        4)编译httpd
           tar
           cd
           ./configure --prefix=/usr/local/apache(安装路径) --sysconfdir=/etc/httpd24(配置文件) --enable-so(基于DSO动态加载模块) --enable--ssl(能基于SSL协议) --enable-cgi(支持CGI机制) --enable-rewrite(支持URL重写) --with-zlib(支持数据压缩发送) --with-pcre(perl语言兼容正则表达式库) --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util --enable-modeles=most(常用的,也可以改成all启用全部的) --enable-mpms-shared=all(将所有的mpm模块编译进来) --with-mpm=event(默认使用event模块)
           make && make install
           头文件、库文件、帮助文档、二进制
           后续的配置
           1 导出头文件
           ln -sv /usr/local/appache/include /usr/include/httpd
           2 导出库文件
            ldconfig -p 显示当前系统的库文件
           该安装并没有提供库文件
           3 导出帮助文件
             vim /etc/man.config   
             添加MANPATH /usr/local/apache/man
             man -M /usr/local/apache/man httpd
           4 导出二进制文件
              vim /etc/profile.d/httpd.sh
              export  PATH=/usr/local/apache/bin:$PATH
           5 修改启动的脚本
        cp /etc/rc.d/init.d/httpd /etc/rc.d/init.d/httpd24
        vim /etc/httpd24/httpd.conf
        随意在空白处添加 PidFile "/var/run/httpd24.pid" 此为自定义PID文件位置
        vim /etc/rc.d/rc.d/httpd24
        apachectl=/usr/local/apache/bin/apachectl
        httpd=/usr/local/apache/bin/httpd
        prog=httpd
        pidfile=${PIDFILE-/var/run/httpd24.pid}
        lockfile=${LOCKFILE-/var/lock/subsys/httpd24}
        RETVAL=0
        STOP_TIMEOUT=${STOP_TIMEOUT-10}
         最后
        chkconfig --add httpd24
        


    博客:配置CGI、虚拟主机、https、mod_defaults mod_status

    基于IP访问控制:
        允许所有主机访问:Require all granted
        拒绝所有主机访问:Require all deny
        控制某主机的访问
          Require ip IPADDR
          Require not ip IPADDR
           IPADDR:
              单个IP地址,例如172.16.100.7
              network/netmask 例如172.16.0.0/255.255.0.0
              network/Length 例如172.16.0.0/16
              Net 172.16
          Require host IPADDR
          Require not host IPADDR
             Hostname
               GQDN:具体的主机
               域:.magedu

    I/O:
        阻塞: 进程发起I/O调用,未完成之前,当前进程会被挂起
        非阻塞:进程发起I/O调用,被调用函数完成之前不会阻塞当前进程而是立即返回 进程可以去干别的事,但是却不知道该I/O请求何时完成,需要重新回来查看

        同步:进程发起一个过程调用(功能、函数)调用后,在没得到结果之前,该调用将不会返回
        异步:进程发起一个过程调用,即便调用者不能立即得到结果,当调用却会返回,返回时未完成状态,当调用完成后,内核会自行通知调用者已经OK

        同步阻塞
        异步非阻塞
        异步阻塞

    内存映射:mmap
    I/O模型有5种:几种情况的简单解释  第一阶段:内核向磁盘发起请求数据并存到内核空间中。第二阶段:内核空间复制数据到进程内存空间中,并发送给进程 。一般来讲阻塞和非阻塞发生在第一阶段中 而同步与异步发生在第二阶段中
         同步阻塞    即第一阶段阻塞,第二阶段同步
         同步非阻塞  第一阶段非阻塞,即内核可以去干自己事。但是第二阶段同步,所以 其实与同步阻塞没有多大区别
         I/O复用 select()poll() 第一阶段阻塞
         事件驱动 epoll()wqueue()
            边缘触发
            水平触发
         AIO(异步非阻塞)

                                  mysql丶lamp


    并发响应用户请求时网络I/O
          单进程
          多进程/线程:prefork(一个进程响应一个请求),worker(一个线程响应一个请求)
          select()
          复用模型:单线程响应多个用户请求(事件驱动)
              epoll()
           多线程,每个线程响应多个请求 m*n
    网络不支持异步
      I/O模型
         同步阻塞
         同步非阻塞
         I/O复用
         时间驱动
         AIO

    web: httpd nginx lighttpd
       html plaintext jpeg gif png video
       多媒体类型 主类型/次类型

        首部:通用、请求、响应、实体、扩展
           条件式请求:If-Modified-Since If-None-Match

       请求报文格式    <method> <request-URL> <version>
                       首部

                   <entity-body>

          响应报文格式 <version><status><reason>

                   首部
                   <entity-body>

           httpd:虚拟主机、https、别名、<Directory><Location><File>
                Options


    动态网站:
        程序:
            java applet  早期在客户端上执行的,通过JVM(JAVA虚拟机)上运行下载下来的JAVA程序 来执行。不太安全
            服务器端执行
                静态资源:jpeg,html,plaintext
                动态资源:程序

                硬编码:直接嵌套进程序中,而且很难剥离出来
               
                分体式结构:即前端设计归前端设计,程序开发归程序开发。只需要在HTML中引用程序,
                  
                   可嵌入html中的web开发机制:



        程序=指令+数据

        程序=算法+数据结构

        文本数据库缺陷
            数据冗余和不一致
            数据访问困难
            数据孤立
            完整性问题
            原子性问题
            并发访问问题
            安全性问题
        DMBS: DataBase Management System

        用户层 逻辑层 物理层  数据库的访问类似于操作系统。操作系统给我们提供了很多API(库)程序员给他们全部编写成程序,我们可以执行程序来实现功能,但是确缺少一个更好的沟通平台。于是有了BASH SHELL 再提供一个更好与计算机沟通的平台,让用户执行某些程序员编写好的命令,就可以与内核进行沟通。而数据库的用户层与逻辑层之间也是基于类似的机制,此成为SQL

        数据模型
            层次模型
            网状模型
            关系模型
                库和表
            非关系型数据库模型:nosql

                笛卡尔乘积
    what is CAP???????

    LAMP:Linux Apache MySql php/perl/python

    开源数据库:
         salite
         MySql,PostgreSQL(EnterpriseDB)
         MariaDB
    收费数据库
         Oracle

         MySQL:

         (存取方法)文件管理器
         缓冲区管理器
         磁盘空间管理器     
         数据 索引 事务日志

         事务:一个事情的多次操作的组合,M满足ACID测试
            A:原子性
            C:一致性
            I:隔离性
            D:持久性
         SQL: struct query language
            支持
             DCL:数据控制
             DDL :date definbation 数据定义语言
                  CREATE/ALTER/DROP
             DML:data Manipulation 数据查询语言
                 INSERT/DELETE/SELECT/UPDATE
    解释器:接受并解释命令

    查询引擎包括:分析器,查询计划器,求解器,优化器
    驱动:一个程序员使用的API连接数据库的,在应用程序端

    线程池:用来管理连接的管理件
    线程管理器:

    ODBC:Open DataBase Connectivity
    ANSI:
     SQL-86,SQL-89,SQL-92,SQL-99,SQL-2003

    mysqld/mysql

    安装使用mysql:mysql.com
          1、Vendor:操作系统自带的rpm包
          2、MySql官方rpm包
          3、通用二进制格式
          4、源码编译
    建议做在硬raid的lvm上
    基于通用二进制格式,以5.5为例
        内存足够大,硬盘足够快
    tar xf -C /usr/local/
    ln -sv     mysql
    执行数据库初始化脚本
    cd scripts
    mysql_install_db
    --basedir 安装目录
    --datadir  数据目录
    --defaults-extra-file 额外文件的目录(安装文件)
    --user 运行用户
    frm:字段
    myd:数据
    myi:索引
    scripts/mysql_install_db --datadir=/data/mydata/ --usr=mysql
    cp support-files/mysql.server /etc/rc.d/init.d/mysqld 添加服务启动脚本到init.d下
    cp support-files/my-large.cnf /etc/my.cnf
    vi /etc/my.cnf
    添加
    datadir=

    ibdatal
    事务日志
    ib_logfile0
    ib_logfile1
    二进制日志
    mysql-bin
    二进制日志的索引文件
    mysql-bin.index
    mysql存储引擎 表类型
       MyISAM
       InnoDB --> XtraDB(percona) Xtrabackup
    将客户端运行程序添加到环境变量中
    vim /etc/profile.d/mysql.sh
    export PATH=/usr/local/mysql/bin:$PATH
    source /etc/profile
    这样输入mysql就启动mysql客户端
    导出头文件
    导出库文件
    ldconfig -p 查看
    ldconfig 加载所有的

    mysql客户端
       用户名
       --user=Username
       -u Username

       密码
       -p
       --password=

       主机
       -h Hostname
       --host=Hostname

       执行命令
          -e ‘SQL COMMAND’

    用户账号
       用户@主机

    修改管理员密码
    mysql 下
    SET PASSWORD FOR 'root'@'localhost'=PASSWORD('密码');

    SET PASSWORD FOR 'root'@'127.0.0.1'=PASSWORD('密码');

    SET PASSWORD FOR 'root'@'主机名'=PASSWORD('密码');

    use mysql 设定默认数据库
    DESC 查看表的结构

    DROP 删除用户
    DROP USER 'root'@'::1';

     


      连接管理器
    查询缓存 分析器
        查询引擎
        存储引擎

     myssql,mysqld
        my.cnf配置文件内容简介
        [mysql] 只应用于mysql这一种客户端
        [mysqld]应用于mysql服务端
        [client] 应用于所有的客户端
     两类默认用户:
         root:
            127.0.0.1
            localhost
            Hostname
            : :1 IP value 本地回环地址 ??
        ' ':匿名用户
            localhost
            hostname  
    建议将匿名用户和::1删除,并且为剩下的三个root用户添加密码
           
           
           
    mysql客户端命令
         自身执行,不需要语句终止符
        q 退出
        ? 获取帮助
        g 直接将命令送到服务器端执行
        G 不再显示为表格显示,而是以列的方式显示
        c 取消命令的执行
        stsauts:查询运行状态
        u
    mysql服务器端命令
         需要语句终止符,通常默认为分号(;)

        命令帮助的获取
            mysql> help keyword
        命令本身不区分字符大小写,但与文件系统相关的部分则根据os的不同,可能区分大小写

        BIF:内建函数
         select user(); select可以执行函数
         select 3+2 可以执行算术运算
         选取(只想显示某些行) 和投影(选择显示某些字段)
         select col1,col2,...form tb1,tb2,....where clause(指定条件字段,满足条件的显示,不满足条件的不显示);
          where col1 > 30
       
         SHOW DATABASES;查看所有库
         use database_name
         SHOW TABLES;显示某库的所有表
         CRETARE DATABASE database_name; 创建数据库
         DROP DATABASE database_name; 删除数据库

    mysql
       交互式模式
       批处理模式
         mysql < a.sql 批量处理a.sql   在外部建立一个a.sql的脚本里面有服务器端的命令

    约束:constraint
         主键约束:对一张表来讲,主键只能有一个
            惟一;不能为null
         外键约束
             惟一键约束:可以有多个
                惟一,可能为NULL
         检查式约束
             用户自定义有效取值范围:符合条件
          非空约束


    键:key 选取出来某个具有特殊意义的字段
        候选键:即可以被当成主键的字段或字段的组合,没有明确标明
        主键:能够惟一标识表中每一个记录的字段或字段的组合;当往字段或字段的组合中填数据时,输入的数据不能有相同的
        外键:指一张表中的某个字段是根据另一张表中的某个字段所填的内容来填写的。如第一张表有个ID字段,另一张表的第一个字段为ID,第一个表的ID指向(关联)第二张表的ID,那么第一张表中所填的数据,必须要按照第二张表中所填的数据来填写,这种就叫外键约束
        唯一键

    创建表: table
        由行和列组成的二维关系;

        字段:字段名,约束,字段类型

        字段类型
            字符型
              不区分大小写
              char(#),填多少字符数,就占据了多少字符数,有点浪费
              varchar(#),可变化的字符,但是也需要给予一个最大字符数的限制
              区分大小写
              binary(#)
              varbinary(#)
              大段文本
              不区分大小写
              text
              区分大小写
              blob
            数值型
                精确数值型
                   整形 int
                          tinyint 1
                          smallint 2
                          mediuint 3
                          int 4
                          bigint 8
                   十进制 decimal
                近似数值型
                     单精度浮点型:float
                     双精度浮点型:double
            日期时间型
                 date 3
                 time 3
                 datetime 8
                 timestamp:   时间戳
            布尔型
               0
               1
            NULL
            内置类型
               ENUM:枚举 只能填列举好的数,如星期,列举了1到7,不能填入8
               SET:集合,可以任意拼凑集合中的元素,但是不能超过这一个范围

        数据类型的作用:
            比较方式
            存储空间:取值范围
            参与的运算


    创建表:
       create table tb_name(coll_name coll_type,......);
       create table students(StuID int UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, Name varchar(30) NOT NULL,Age tinyint UNSTGNED,Gender ENUM('F','M') DEFAULT 'M');

    DESC 查看表的结构
    drop table 删除表

    字段或字段类型还可以有修饰符
       NOT NULL
       NULL
       UNSIGNED 无符号 只能用在数值上
       DEDAULT 加入默认值 字符要加引号,数字不能加引号
       AUTO_INCREMENT 自动增长类型的字段必须为主键或唯一键 ,例如表示学生的ID号,第一个加入的学生ID为1,那么每加入一个学生,该数值自动增加。

       PRIMARY KEY:定义主键 要将两个字段组合起来定义为主键就需要PRIMARY KEY(字段1,字段2)
       UNIQ KEY 唯一键

    插入数据:
       INSERT INTO tb_name (col1,col2...) VALUE|VALUES (val1,val2.....)
       INSERT INTO tb_name VALUES(val1,val2....),给所有字段插入值
       INSERT INTO tb_name VALUES(val1,val2....),(val1,val2....) 批量插入
    查询
        select col1,col2 from tb_name where;
           =
           >
           <
           >=
           <=
           like
              通配符:
               %:任意长度的任意字符
               _:匹配任意单个字符
            rlink
               正则表达式

           组合条件
            and
            or
            not
    删除数据:
      delete from tb_name where clause;


    更新数据
       update tb_name set col1 = value where clause;

    查看类命令
    show crearte table tb_name;查询创建表时使用的命令
    show engines;查询数据库支持的存储类型
    show table statusG;查询当前数据库的存储类型
    show table status like 's%'G 查询某个表的存储类型



    字符集是通过二进制转换为汉字的结果
     每种字符集可能存在多种不同的排序规则
     show character set 字符集
     show collation 字符集的排序方式

     总结:
       1、数据类型
           字符型
               char,binary
               varchar,varvbinary
               text.blob
            数值型 
               精确
               近似
            日期时间型
            内置类型
            布尔型
       2、DDL
           create database
           create table
           drop
       3、dml
       4、属性查看  
    Mysql服务器的工作特性的定义是通过服务器变量实现的  一些服务器的硬性配置
    show variables 查看服务器变量
    show global variables 查看全局变量
    show session variables 查看会话的变量
    MySQL服务器运行中的状态是通过状态变量输出的 即判断一个服务器的运行状态如何
    show status:服务器运行状态
    show global status 查看全局变量
    show session status 查看会话的变量


    用户授权:
        GRANT ALL PRIVILEGES ON db_name.tb_name TO 'username'@'hostname' IDENTIFIED BY 'your_password';


    PHP

    php is Hyertext Preprocessor


    扫描 --> 分析 -->编译 -->执行


    Xcache

    如果使用rpm包在/var/lib/mysql
    论坛:
       phpwind
       discuz
       phpbb

    博客系统:
       wordpress

    门户站点:
        drupal
        xooms
    创建用户并授权
    grant all privileges on db_name.tb_name to 'user'@'ip' identified by 'you_password';

    立即生效
     flush privileges
    rpm 格式配置格式 lamp
     yum -y install httpd php php-mysql mysql-server mysql php-mcrypt
    四个虚拟主机
        wordpress discuz phpwind phpmyadmin

                                   源码编译LAMP


      apache + php
         moodule
             prefork:libphp5.so 进程
             worker ,event :libphp5-zts.so 线程
         CGI
         fsatcgi
            php-fpm:启动为服务进程
    php-mysql
         $link=mysql_connect('127.0.0.1','root','mypass')
         if ($link);
             echo ""
         else
             echo ""
    建议分开使用
    在PHP服务器上向MYSQL服务器群取数据时,通常通过指向代理,由代理来取数据,因为无法指定多台数据库的地址
    bypass:旁路 不自己缓存数据,而是由进程提取缓存,然后保存到缓存服务器中 。 所用的技术就memcached 另外这个是提供给多台mysql服务器使用的,使用单台mysql的时候不要使用memcached 因为mysql自身带有缓存机制
    LAMMP apached + mysql + memcached + php 必须修改前端支持memcached

    redis是nosql一种

    LAMP编译:
     1、php modules
     2、fcgi server

     顺序
       httpd mysql php

     建议安装Desktop platform develpment

     group -r mysql
     useradd -g mysql -r -s /sbin/nologin mysql
     tar  -C /usr/src
     cd
     ln -s mysql- mysql
     cd mysql
     fdisk
     pvcreat
     vgcreat
     lvcreat
     mke2fs
     /etc/fstab
     mkdir /data/mydata
     cd /data
     chown -R
     mysql.mysql /mydata
     cd mysql
     chown -R root.mysql mysql
     ./script/install_db -datadir= /data/mydata -u=mysql
     cp
     chkconfig --add mysqld
     chkconfig --list mysqld
     cp
     vi /etc/my.cnf
     datadir=
    进程
    PATH
    updata user set password=password('')where='root'
    flush privileges
    mysql的配置文件:/etc/my.cnf或/etc/mysql/my.cnf -->$MYSQL_Base/my.cnf --> --defaults-extra-file=/path/to/some_my.cnf -->.my.cnf
    如果找到的不同,则合并,如果全部不同,则以最后一个为准
    头文件ln -sv /usr/local/mysql/include/ /usr/include/mysql
    库文件vim /etc/ld.so.conf.d/mysql.conf
    /usr/local/mysql/lib
    man帮助文档

    httpd编译安装
    yum install pcre-devel
    apxs

    php编译

    安装Desktop platform develpment

    编译第三方模块
    /usr/local/php/bin/phpize

    fcgi://172.16.100.8:9000/全路径

         


    并发响应用户请求时网络I/O
          单进程
          多进程/线程:prefork(一个进程响应一个请求),worker(一个线程响应一个请求)
          select()
          复用模型:单线程响应多个用户请求(事件驱动)
              epoll()
           多线程,每个线程响应多个请求 m*n
    网络不支持异步
      I/O模型
         同步阻塞
         同步非阻塞
         I/O复用
         时间驱动
         AIO

    web: httpd nginx lighttpd
       html plaintext jpeg gif png video
       多媒体类型 主类型/次类型

        首部:通用、请求、响应、实体、扩展
           条件式请求:If-Modified-Since If-None-Match

       请求报文格式    <method> <request-URL> <version>
                       首部

                   <entity-body>

          响应报文格式 <version><status><reason>

                   首部
                   <entity-body>

           httpd:虚拟主机、https、别名、<Directory><Location><File>
                Options


    动态网站:
        程序:
            java applet  早期在客户端上执行的,通过JVM(JAVA虚拟机)上运行下载下来的JAVA程序 来执行。不太安全
            服务器端执行
                静态资源:jpeg,html,plaintext
                动态资源:程序

                硬编码:直接嵌套进程序中,而且很难剥离出来
                
                分体式结构:即前端设计归前端设计,程序开发归程序开发。只需要在HTML中引用程序,
                   
                   可嵌入html中的web开发机制:



        程序=指令+数据

        程序=算法+数据结构

        文本数据库缺陷
            数据冗余和不一致
            数据访问困难
            数据孤立
            完整性问题
            原子性问题
            并发访问问题
            安全性问题
        DMBS: DataBase Management System

        用户层 逻辑层 物理层  数据库的访问类似于操作系统。操作系统给我们提供了很多API(库)程序员给他们全部编写成程序,我们可以执行程序来实现功能,但是确缺少一个更好的沟通平台。于是有了BASH SHELL 再提供一个更好与计算机沟通的平台,让用户执行某些程序员编写好的命令,就可以与内核进行沟通。而数据库的用户层与逻辑层之间也是基于类似的机制,此成为SQL

        数据模型
            层次模型
            网状模型
            关系模型
                库和表
            非关系型数据库模型:nosql

                笛卡尔乘积
    what is CAP???????

    LAMP:Linux Apache MySql php/perl/python

    开源数据库:
         salite
         MySql,PostgreSQL(EnterpriseDB)
         MariaDB
    收费数据库
         Oracle

         MySQL:

         (存取方法)文件管理器
         缓冲区管理器
         磁盘空间管理器      
         数据 索引 事务日志

         事务:一个事情的多次操作的组合,M满足ACID测试
            A:原子性
            C:一致性
            I:隔离性
            D:持久性
         SQL: struct query language
            支持
             DCL:数据控制
             DDL :date definbation 数据定义语言
                  CREATE/ALTER/DROP
             DML:data Manipulation 数据查询语言
                 INSERT/DELETE/SELECT/UPDATE
    解释器:接受并解释命令

    查询引擎包括:分析器,查询计划器,求解器,优化器
    驱动:一个程序员使用的API连接数据库的,在应用程序端

    线程池:用来管理连接的管理件
    线程管理器:

    ODBC:Open DataBase Connectivity
    ANSI:
     SQL-86,SQL-89,SQL-92,SQL-99,SQL-2003

    mysqld/mysql

    安装使用mysql:mysql.com
          1、Vendor:操作系统自带的rpm包
          2、MySql官方rpm包
          3、通用二进制格式
          4、源码编译
    建议做在硬raid的lvm上
    基于通用二进制格式,以5.5为例
        内存足够大,硬盘足够快
    tar xf -C /usr/local/
    ln -sv     mysql
    执行数据库初始化脚本
    cd scripts
    mysql_install_db
    --basedir 安装目录
    --datadir  数据目录
    --defaults-extra-file 额外文件的目录(安装文件)
    --user 运行用户
    frm:字段
    myd:数据
    myi:索引
    scripts/mysql_install_db --datadir=/data/mydata/ --usr=mysql
    cp support-files/mysql.server /etc/rc.d/init.d/mysqld 添加服务启动脚本到init.d下
    cp support-files/my-large.cnf /etc/my.cnf
    vi /etc/my.cnf
    添加
    datadir=

    ibdatal
    事务日志
    ib_logfile0
    ib_logfile1
    二进制日志
    mysql-bin
    二进制日志的索引文件
    mysql-bin.index
    mysql存储引擎 表类型
       MyISAM
       InnoDB --> XtraDB(percona) Xtrabackup
    将客户端运行程序添加到环境变量中
    vim /etc/profile.d/mysql.sh
    export PATH=/usr/local/mysql/bin:$PATH
    source /etc/profile
    这样输入mysql就启动mysql客户端
    导出头文件
    导出库文件
    ldconfig -p 查看
    ldconfig 加载所有的

    mysql客户端
       用户名
       --user=Username
       -u Username

       密码
       -p
       --password=

       主机
       -h Hostname
       --host=Hostname

       执行命令
          -e ‘SQL COMMAND’

    用户账号
       用户@主机

    修改管理员密码
    mysql 下
    SET PASSWORD FOR 'root'@'localhost'=PASSWORD('密码');

    SET PASSWORD FOR 'root'@'127.0.0.1'=PASSWORD('密码');

    SET PASSWORD FOR 'root'@'主机名'=PASSWORD('密码');

    use mysql 设定默认数据库
    DESC 查看表的结构

    DROP 删除用户
    DROP USER 'root'@'::1';

     


      连接管理器
    查询缓存 分析器
        查询引擎
        存储引擎

     myssql,mysqld
        my.cnf配置文件内容简介
        [mysql] 只应用于mysql这一种客户端
        [mysqld]应用于mysql服务端
        [client] 应用于所有的客户端
     两类默认用户:
         root:
            127.0.0.1
            localhost
            Hostname
            : :1 IP value 本地回环地址 ??
        ' ':匿名用户
            localhost
            hostname   
    建议将匿名用户和::1删除,并且为剩下的三个root用户添加密码
            
            
            
    mysql客户端命令
         自身执行,不需要语句终止符
        q 退出
        ? 获取帮助
        g 直接将命令送到服务器端执行
        G 不再显示为表格显示,而是以列的方式显示
        c 取消命令的执行
        stsauts:查询运行状态
        u
    mysql服务器端命令
         需要语句终止符,通常默认为分号(;)

        命令帮助的获取
            mysql> help keyword
        命令本身不区分字符大小写,但与文件系统相关的部分则根据os的不同,可能区分大小写

        BIF:内建函数
         select user(); select可以执行函数
         select 3+2 可以执行算术运算
         选取(只想显示某些行) 和投影(选择显示某些字段)
         select col1,col2,...form tb1,tb2,....where clause(指定条件字段,满足条件的显示,不满足条件的不显示);
          where col1 > 30
        
         SHOW DATABASES;查看所有库
         use database_name
         SHOW TABLES;显示某库的所有表
         CRETARE DATABASE database_name; 创建数据库
         DROP DATABASE database_name; 删除数据库

    mysql
       交互式模式
       批处理模式
         mysql < a.sql 批量处理a.sql   在外部建立一个a.sql的脚本里面有服务器端的命令

    约束:constraint
         主键约束:对一张表来讲,主键只能有一个
            惟一;不能为null
         外键约束
             惟一键约束:可以有多个
                惟一,可能为NULL
         检查式约束
             用户自定义有效取值范围:符合条件
          非空约束


    键:key 选取出来某个具有特殊意义的字段
        候选键:即可以被当成主键的字段或字段的组合,没有明确标明
        主键:能够惟一标识表中每一个记录的字段或字段的组合;当往字段或字段的组合中填数据时,输入的数据不能有相同的
        外键:指一张表中的某个字段是根据另一张表中的某个字段所填的内容来填写的。如第一张表有个ID字段,另一张表的第一个字段为ID,第一个表的ID指向(关联)第二张表的ID,那么第一张表中所填的数据,必须要按照第二张表中所填的数据来填写,这种就叫外键约束
        唯一键

    创建表: table
        由行和列组成的二维关系;

        字段:字段名,约束,字段类型

        字段类型
            字符型
              不区分大小写
              char(#),填多少字符数,就占据了多少字符数,有点浪费
              varchar(#),可变化的字符,但是也需要给予一个最大字符数的限制
              区分大小写
              binary(#)
              varbinary(#)
              大段文本
              不区分大小写
              text
              区分大小写
              blob
            数值型
                精确数值型
                   整形 int
                          tinyint 1
                          smallint 2
                          mediuint 3
                          int 4
                          bigint 8
                   十进制 decimal
                近似数值型
                     单精度浮点型:float
                     双精度浮点型:double
            日期时间型
                 date 3
                 time 3
                 datetime 8
                 timestamp:   时间戳
            布尔型
               0
               1
            NULL
            内置类型
               ENUM:枚举 只能填列举好的数,如星期,列举了1到7,不能填入8
               SET:集合,可以任意拼凑集合中的元素,但是不能超过这一个范围

        数据类型的作用:
            比较方式
            存储空间:取值范围
            参与的运算


    创建表:
       create table tb_name(coll_name coll_type,......);
       create table students(StuID int UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, Name varchar(30) NOT NULL,Age tinyint UNSTGNED,Gender ENUM('F','M') DEFAULT 'M');

    DESC 查看表的结构
    drop table 删除表

    字段或字段类型还可以有修饰符
       NOT NULL
       NULL
       UNSIGNED 无符号 只能用在数值上
       DEDAULT 加入默认值 字符要加引号,数字不能加引号
       AUTO_INCREMENT 自动增长类型的字段必须为主键或唯一键 ,例如表示学生的ID号,第一个加入的学生ID为1,那么每加入一个学生,该数值自动增加。

       PRIMARY KEY:定义主键 要将两个字段组合起来定义为主键就需要PRIMARY KEY(字段1,字段2)
       UNIQ KEY 唯一键

    插入数据:
       INSERT INTO tb_name (col1,col2...) VALUE|VALUES (val1,val2.....)
       INSERT INTO tb_name VALUES(val1,val2....),给所有字段插入值
       INSERT INTO tb_name VALUES(val1,val2....),(val1,val2....) 批量插入
    查询
        select col1,col2 from tb_name where;
           =
           >
           <
           >=
           <=
           like
              通配符:
               %:任意长度的任意字符
               _:匹配任意单个字符
            rlink
               正则表达式

           组合条件
            and
            or
            not
    删除数据:
      delete from tb_name where clause;


    更新数据
       update tb_name set col1 = value where clause;

    查看类命令
    show crearte table tb_name;查询创建表时使用的命令
    show engines;查询数据库支持的存储类型
    show table statusG;查询当前数据库的存储类型
    show table status like 's%'G 查询某个表的存储类型



    字符集是通过二进制转换为汉字的结果
     每种字符集可能存在多种不同的排序规则
     show character set 字符集
     show collation 字符集的排序方式

     总结:
       1、数据类型
           字符型
               char,binary
               varchar,varvbinary
               text.blob
            数值型  
               精确
               近似
            日期时间型
            内置类型
            布尔型
       2、DDL
           create database
           create table
           drop
       3、dml
       4、属性查看   
    Mysql服务器的工作特性的定义是通过服务器变量实现的  一些服务器的硬性配置
    show variables 查看服务器变量
    show global variables 查看全局变量
    show session variables 查看会话的变量
    MySQL服务器运行中的状态是通过状态变量输出的 即判断一个服务器的运行状态如何
    show status:服务器运行状态
    show global status 查看全局变量
    show session status 查看会话的变量


    用户授权:
        GRANT ALL PRIVILEGES ON db_name.tb_name TO 'username'@'hostname' IDENTIFIED BY 'your_password';


    PHP

    php is Hyertext Preprocessor


    扫描 --> 分析 -->编译 -->执行


    Xcache

    如果使用rpm包在/var/lib/mysql
    论坛:
       phpwind
       discuz
       phpbb

    博客系统:
       wordpress

    门户站点:
        drupal
        xooms
    创建用户并授权
    grant all privileges on db_name.tb_name to 'user'@'ip' identified by 'you_password';

    立即生效
     flush privileges
    rpm 格式配置格式 lamp
     yum -y install httpd php php-mysql mysql-server mysql php-mcrypt
    四个虚拟主机
        wordpress discuz phpwind phpmyadmin

  • 相关阅读:
    == 和equals方法
    ObjectInputStream 与ObjectOutputStream
    IOS基础:ObjectiveC 数组处理
    学习笔记:自定义方法的两种实现方式
    DatePicker 获取时间的时区问题
    IOS基础:tableview中cell
    IOS基础:窗口切换的几种方法
    IOS基础:ObjectiveC 字符串处理
    使用 Notifications
    学习笔记:Tab Bar 控件使用详解
  • 原文地址:https://www.cnblogs.com/gohrx/p/10707135.html
Copyright © 2020-2023  润新知