• centos7源码编译安装lamp/lnmp


    centos7源码编译安装lamp/lnmp

    进程:是包工头(相当于是个门,只管开门关门,不管门内的事儿)

    线程:是各种工种(cpu调度的是线程)

    进程 是一件事情, 线程 是 同一个时间范围内 同时干多件事情

    只是线程 有共享变量,线程在进程内互相通信。

    总结

    源码编译方式的软件安装三部曲:

    1、下载(找官网)、解压、进入解压后的目录

    2、编译参数

    3、make && make install安装

    php扩展安装舞步曲:

    1、下载(找pecl)、解压、进入解压后的目录

    2、使用php自带的二进制脚本phpize弄成可编译的

    3、编译参数

    4、make && make install安装

    5、将扩展添加到php.ini中,重启php,看php -m中是否添加成功

    安装apache

    安装通用6步曲(和总结那3步是一样的,只是上面写的粗旷,这里细化了):

    1、下载

    2、解压

    3、进入解压后的目录

    4、配置编译参数(./configure .....的)

    5、编译 make

    6、使用echo $?看是否有错误。

    注意点:这些几步曲,是汉字概括的总结,是为了方便记忆。具体的安装还是以指令为主

    1、缺少依赖,安装依赖时,在缺少的那个依赖后面,加上-devel(开发版)

    2、安装依赖也可以用echo  $?看

    3、如果是./configure的时候缺少依赖-》安装依赖-》依赖安装完成-》继续make

    如果是make的时候缺少依赖-》安装依赖-》依赖安装完成-》删除第2步解压后的目录-》重新解压-》重新./configure(防止一些奇怪错误的发生)

    				centos7安装apache
    
    1、先下载(要装这3个)
    wget  https://mirrors.tuna.tsinghua.edu.cn/apache/apr/apr-1.6.3.tar.gz
    wget  https://mirrors.tuna.tsinghua.edu.cn/apache/apr/apr-util-1.6.1.tar.gz
    wget  https://mirrors.tuna.tsinghua.edu.cn/apache/httpd/httpd-2.4.32.tar.gz
    
    2、安装 apr
    tar xf  apr-1.6.3.tar.gz     #解压
    cd apr-1.6.3	#每个安装包,解压后都有configure(编译参数)
    ./configure  --prefix=/usr/local/apr  #make(编译之前)先使用comfigure配置下。首选配置就是指定安装目录
    yum install gcc gcc-c++  -y
    make && make install
    2、安装 apr-util
    tar xf apr-util-1.6.1.tar.gz 
    cd apr-util-1.6.1
     ./configure  --prefix=/usr/local/apr-util  --with-apr=/usr/local/apr/
    yum install expat-devel   #注意:make的时候出现,依赖错误。安装完依赖之后,把解压的删掉,重新解压。在进行configure,这样防止一些奇怪的问题出现
    make && make install
    2、安装httpd
    tar xf httpd-2.4.32.tar.gz
    cd httpd-2.4.32
    yum install pcre-devel  openssl-devel -y  #依赖找-devel开发版的
    ./configure --prefix=/usr/local/httpd  --sysconfdir=/usr/local/httpd/etc/ --enable-so --enable-ssl --enable-cgi --enable-rewrite --enable-modules=most --enable-mpms-shared=all --with-mpm=prefork --with-zlib --with-pcre --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util
    make && make install

    apache配置多站点:基于端口(不同的端口指向不同的根目录)

    1、在httpd.conf中修改;注意:下图白色注释要去掉不然报错

    2、修改/usr/local/httpd/etc/extra/httpd-vhosts.conf

    3、访问(下图的防火墙没有关,所以不能在浏览器访问)

    apache配置多站点:基于域名(不同的域名指向不同的根目录)

    1、在httpd.conf中修改;注意:下图白色注释要去掉不然报错

    2、修改/usr/local/httpd/etc/extra/httpd-vhosts.conf

    3、在/etc/hosts中加入域名

    4、访问(下图的防火墙没有关,所以不能在浏览器访问)

    每一个软件运行都有基于一个用户名的

    平滑重启:用户一边访问,后台一边重启(等该进程访问完毕,才重启。并且pid不变)

    安装nginx

    wget http://nginx.org/download/nginx-1.12.2.tar.gz
    tar xf nginx-1.12.2.tar.gz
    cd nginx-1.12.2
    groupadd www
    useradd  -g www www -M -s /sbin/nologin
    yum install openssl-devel pcre-devel gcc gcc-c++ -y
    ./configure --user=www --group=www --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module  --with-http_gzip_static_module  --with-http_sub_module --with-pcre
    make && make install

    配置文件大致解释

    总结:配置文件是嵌套式的,http块中配置server(虚拟主机)

    其他的配置方式,如伪静态、gzip压缩等。请点击查看

    user  www www;  //用户运行

    worker_processes  auto; //nginx 的进程数  master 主进程 worker 工作进程

    #error_log  logs/error.log;

    #error_log  logs/error.log  notice;   //各种日志

    #error_log  logs/error.log  info;

    pid        /var/run/nginx.pid;       //进程pid存放位置  

    # 修改 文件描述符 ulimit -SHn 65535  /etc/profile  

    events {

        worker_connections  65535;     //每个work进程打开的最大连接数 

    }

    http {

    公共的配置项,除server外,全是公共的配置项

        server {

        }

    }

    http{

    //文件扩展名与文件类型映射表 

    include       mime.types;  //location对应的,后缀和值都在mime.types

    default_type  application/octet-stream; #默认文件类型

    //设置日志类型 访问日志

    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '

      #                  '$status $body_bytes_sent "$http_referer" '

      #                  '"$http_user_agent" "$http_x_forwarded_for"';

      #access_log  logs/access.log  main;

     //下图是,变量和访问日志里值的对比

      sendfile  on  //普通应用为on  下载io的为off

        #客户端请求单个文件的最大字节数

        client_max_body_size 8m; //上传文件 默认是1M

        #防止网络阻塞

        tcp_nopush on;

        tcp_nodelay on;

       

    #客户端相关设置  

        keepalive_timeout 60; //连接超时时间,单位是秒

        client_header_timeout 10;  #客户端请求头读取超时时间

        client_body_timeout 10; #设置客户端请求主体读取超时时间

        send_timeout 10; #响应客户端超时时间

    #gzip模块设置

        gzip on; #开启gzip压缩输出

        gzip_min_length 1k; #最小压缩文件大小

        gzip_buffers 4 16k; #压缩缓冲区

        gzip_http_version 1.0; #压缩版本(默认1.1,前端如果是squid2.5请使用1.0)

        #压缩等级 1-9 等级越高,压缩效果越好,节约宽带,但CPU消耗大

        gzip_comp_level 2;

        #压缩类型,默认就已经包含text/html,所以下面就不用再写了,写上去也不会有问题,但是会有一个warn。

        gzip_types text/plain application/x-javascript text/css application/xml;

        #前端缓存服务器缓存经过压缩的页面

    #虚拟主机定义

        server {

            listen       80; #监听端口

            server_name  localhost; #访问域名

            #charset koi8-r; #编码格式,若网页格式与此不同,将被自动转码

            #access_log  logs/host.access.log  main; #虚拟主机访问日志定义

            location / { #对URL进行匹配

                root   html; #访问路径,可相对也可绝对路径

                index  index.html index.htm;  #首页文件。以下按顺序匹配

            }

            #error_page  404              /404.html; #错误信息返回页面

            # redirect server error pages to the static page /50x.html

            error_page   500 502 503 504  /50x.html;

            location = /50x.html {

                root   html;

            }

    #访问URL以.php结尾则自动转交给127.0.0.1

            # proxy the PHP scripts to Apache listening on 127.0.0.1:80

            #location ~ .php$ {

            #    proxy_pass   http://127.0.0.1;

            #}

    #php脚本请求全部转发给FastCGI处理

            # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000

            #location ~ .php$ {

            #    root           html;

            #    fastcgi_pass   127.0.0.1:9000;

            #    fastcgi_index  index.php;

            #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;

            #    include        fastcgi_params;

            #}

    #禁止访问.ht页面 (需ngx_http_access_module模块)

            # deny access to .htaccess files, if Apache's document root

            # concurs with nginx's one

            #location ~ /.ht {

            #    deny  all;   //禁止后缀为.ht的访问,和apache那权限差不多

            #}

        }

    }

    基于端口/域名配置多站点:

    基于端口的多站点配置(域名不变,端口变)

    使用场景:1、内网测试;2、接口(不同功能模快,弄个站点,调用)

    注意:访问时,拿ip带上不同的端口号

    基于域名的多站点配置(端口不变,域名变)端口也可以写成不一样的。

    1、一台服务器放多个项目,都可以在公网进行访问

    注意:访问时,使用不同的域名(因为端口都是80)

    反向代理

    负载均衡,请点击参考我这篇博文

    安装mysql

    wget  https://dev.mysql.com/get/Downloads/MySQL-5.5/mysql-5.5.59.tar.gz
    tar xf mysql-5.5.59.tar.gz 
    cd mysql-5.5.59
    groupadd mysql
    useradd -g mysql  mysql -M  -s /sbin/nologin
    yum install cmake ncurses-devel  autoconf
     <span style="color:#333333;">yum install gcc gcc-c++</span>
    yum install gcc gcc-c++
    
    #configure.cmake编译的(他的功能相当于./configure)
        cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DMYSQL_UNIX_ADDR=/tmp/mysql.sock -DMYSQL_USER=mysql -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DWITH_MYISAM_STORAGE_ENGINE=1 -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_DEBUG=0 -DWITH_READLINE=1 -DWITH_EMBEDDED_SERVER=1 -DENABLED_LOCAL_INFILE=1 
    make && make isntall

    初始化数据库后才能启动

    初始化数据库

    cd /usr/local/mysql/scripts

    ./mysql_install_db --user=mysql --datadir=/usr/local/mysql/data --basedir=/usr/local/mysql

    启动mysql

    cd /usr/local/mysql/support-files

    ./mysql.server start|stop|restart

    连接数据库(默认密码为空,要关防火墙)

    注意:如果你是链接虚拟机上的mysql,要改成你内网ip

    修改完后,刷新权限

    删除匿名用户

    cd /usr/local/mysql/bin

    会报一个找不到mysql....这一系列命令的错

    PATH="$PATH:/usr/local/mysql/bin";    //设置成永久生效的全局变量,将它添加到vim /etc/profile的最后一行

    1、Enter current password for root (enter for none)    //输入当前root用户的密码,是'',直接回车

    2、Set root password?    //设置root的新密码,输入y

        New password    //输入新密码

        Re-enter new password    //在输入一遍新密码

    3、Remove anonymous users?    //删除匿名用户,输入y

    4、Disallow root login remotely?    禁止root用户的远程登录(也就是说,root用户只能在服务器登录。用普通用户连接navicat),输入y

    5、Remove test database and access to it?    //删除测试数据库,输入y

    6、Reload privilege tables now?    //刷新权限,输入y

    创建并给普通用户分配权限

    供其连接远程工具navicat等

    grant select,delete,update,insert on blog.* to 'blog'@'192.168.2.101' identified by '123456';

    flush privileges;

    设置全局变量

    vim  /etc/profile

    PATH="$PATH:/usr/local/mysql/bin"   //永久生效

    命令行执行                                             

    export PATH="$PATH:/usr/local/mysql/bin"  //临时执行

    或者 cp  /usr/local/mysql/bin/mysql  到  /usr/bin

    配置文件详解

    让mysql还是用/etc/init.d启动

    cd /usr/local/mysql/support-files/  #切换进mysql安装目录下的启动脚本

    cp mysql.server /etc/init.d/mysql    #mysql的启动脚本,复制到/etc/init.d并下面改个名字

    /etc/init.d/mysql start                     #使用新指令启动mysql

    注意:这里的配置文件,随便复制出去一个,改成my.cnf就能用了

    配置文件my.cnf

    存放的位置探讨:

    https://www.toutiao.com/i6391756230875939330/

    [client]

    port = 3306  

    socket = /tmp /mysql.sock

    [mysqld]

    user = mysql             #数据库初始化时指定的,初始化没指定,直接在配置文件中改

    port = 3306  

    socket = /tmp/mysql.sock  

    basedir = /usr/local/mysql  #数据库初始化时指定的,初始化没指定,直接在配置文件中改

    datadir = /data/mysql/data/  #数据库初始化时指定的,初始化没指定,直接在配置文件中改

    max_connections = 3000  #MySQL允许最大的进程连接数,如果经常出现Too Many Connections的错误提示,则需要增大此值。默认100(此处修改就是永久修改)

    查看最大连接数  show variables like ‘%connections%’  

    查看当前最大连接数  show processlist

    set global  max_connections=300;//临时修改

    永久修改:是改配置文件  然后重启数据库

    注意:这些全局变量都是在my.cnf中配置的,如果没有就是默认

    解决方法:

    现在线上正用着呢,不能停并发大,连接数不够用了。

    就用set global先设置,配置文件的也改咯。有时间咯在重启mysql

    #sort_buffer_size = 2M  //connection级参数,在每个connection(session)第一次需要使用这个buffer的时候,一次性分配设置的内存。

    Sort_Buffer_Size 并不是越大越好,由于是connection级的参数,过大的设置+高并发可能会耗尽系统内存资源。例如:500个连接将会消耗 500*sort_buffer_size(8M)=4G内存

    Sort_Buffer_Size 超过2KB的时候,就会使用mmap() 而不是 malloc() 来进行内存分配,导致效率降低。 系统默认2M,使用默认值即可

    #join_buffer_size = 2M  #用于表间关联缓存的大小,和sort_buffer_size一样,该参数对应的分配内存也是每个连接独享。系统默认2M,使用默认值即可

    thread_cache_size = 300  #默认38

    服务器线程缓存这个值表示可以重新利用保存在缓存中线程的数量,当断开连接时如果缓存中还有空间,那么客户端的线程将被放到缓存中,如果线程重新被请求,那么请求将从缓存中读取,如果缓存中是空的或者是新的请求,那么这个线程将被重新创建,如果有很多新的线程,增加这个值可以改善系统性能.通过比较 Connections 和 Threads_created 状态的变量,可以看到这个变量的作用。设置规则如下:

    1GB 内存配置为8,

    2GB配置为16,

    3GB配置为32,

    4GB或更高内存,可配置更大。

    #thread_concurrency = 8  #系统默认为10,使用10先观察

    设置thread_concurrency的值的正确与否, 对mysql的性能影响很大, 在多个cpu(或多核)的情况下,错误设置了thread_concurrency的值, 会导致mysql不能充分利用多cpu(或多核), 出现同一时刻只能一个cpu(或核)在工作的情况。

    thread_concurrency应设为CPU核数的2倍. 比如有一个双核的CPU, 那么thread_concurrency的应该为4;2个双核的cpu, thread_concurrency的值应为8

    query_cache_size = 64M  #在MyISAM引擎优化中,这个参数也是一个重要的优化参数。但也爆露出来一些问题。

    机器的内存越来越大,习惯性把参数分配的值越来越大。这个参数加大后也引发了一系列问题。

    我们首先分析一下 query_cache_size的工作原理:一个SELECT查询在DB中工作后,DB会把该语句缓存下来,当同样的一个SQL再次来到DB里调用时,DB在该(查询的)表没发生变化的情况下把结果从缓存中返回给Client。

    这里有一个关建点,就是DB在利用Query_cache工作时,要求该语句涉及的表在这段时间内没有发生变更。

    那如果该表在发生变更时,Query_cache里的数据又怎么处理呢?

    首先要把Query_cache和该表相关的语句全部置为失效,然后在写入更新。那么如果Query_cache非常大,该表的查询结构又比较多,查询语句时效也慢,一个更新或是Insert就会很慢,这样看到的就是Update或是Insert怎么这么慢了。

    所以在数据库写入量或是更新量也比较大的系统,该参数不适合分配过大。而且在高并发,写入量大的系统,建议把该功能禁掉。

    query_cache_limit = 4M  #指定单个查询能够使用的缓冲区大小,缺省为1M

    query_cache_min_res_unit = 2k  #默认是4KB,设置值大,对大数据查询有好处,但如果你的查询都是小数据查询,就容易造成内存碎片和浪费

    查询缓存碎片率 = qcache_free_blocks / qcache_total_blocks * 100%

    #如果查询缓存碎片率超过20%,可以用FLUSH QUERY CACHE整理缓存碎片,或者试试减小query_cache_min_res_unit,如果你的查询都是小数据量的话。

    #查询缓存利用率 = (query_cache_size – qcache_free_memory) / query_cache_size * 100%

    #查询缓存利用率在25%以下的话说明query_cache_size设置的过大,可适当减小;查询缓存利用率在80%以上而且qcache_lowmem_prunes > 50的话说明query_cache_size可能有点小,要不就是碎片太多。

    #查询缓存命中率 = (qcache_hits – qcache_inserts) / qcache_hits * 100%

    #default-storage-engine = MyISAM

    #default_table_type = InnoDB      #开启失败,因为你上面设置的表引擎不是innodb

    myisam_recover  #自动检查和修复没有适当关闭的 MyISAM 表

    skip-name-resolve  

    lower_case_table_names = 1  

    server-id = 1 #主从配置,1为master

    innodb_buffer_pool_size = 2048M       //默认是物理内存的50%

    这对Innodb表来说非常重要。Innodb相比MyISAM表对缓冲更为敏感。MyISAM可以在默认的 key_buffer_size 设置下运行的可以,然而Innodb在默认的 innodb_buffer_pool_size 设置下却跟蜗牛似的。由于Innodb把数据和索引都缓存起来,无需留给操作系统太多的内存,因此如果只需要用Innodb的话则可以设置它高达 70-80% 的可用内存(相对于物理内存计算的)。一些应用于 key_buffer 的规则有 — 如果你的数据量不大,并且不会暴增,那么无需把 innodb_buffer_pool_size 设置的太大了

    log-bin = mysql-bin  #binlog日志文件,记录【增删改】的sql语句,这样就是开启了,如果数据库出问题了,可以恢复。该文件默认保存在/usr/local/mysql/data/mysql-bin.00001...(存的是二进制看不懂)

    expire_logs_days        =7                       #binlog过期清理时间(单位天),清理之前要确定自己备份过数据库

    几种常见的数据库错误(都是报下图)

    思路:看报错去错误日志 cd /usr/local/mysql/data/主机名.err

    第1种:innodb_buffer_pool_size = 1G  设置大于服务器内存

    第2种:drwxr-xr-x.  5 root root  4096 Apr 19 03:25 data //运行用户时mysql(前面那root),改成root后就写不进去了

    第3种:配置项写错

    使用/usr/local/mysql/bin下的工具

     

    修改密码

    mysqladmin -uroot -p'123456' password 'root'  //新密码要和password中间空个格

    binlog日志转成sql语句

    /usr/local/mysql/bin/mysqlbinlog  binlog日志 > heh.sql //其实这就是增量数据

     

    数据库备份 恢复     

    物理备份: xtrabackup(几十G用这个)

    逻辑备份:mysqldump(数据量不是太多10G以下)

    日志数据备不备份都行,不重要,丢失也没事

    原则:异地备份  恢复演练  速度(建议:专门弄个只有备份权限的用户,进行操作)

    导出数据以及表结构

    /usr/local/mysql/bin/mysqldump  -uroot -p123456  数据库名 >/home/test.sql

    只导结构  不导出数据

    /usr/local/mysql/bin/mysqldump  -uroot -p123456 -d 数据库名 > /home/test.sql

    只导数据 不导结构

    /usr/local/mysql/bin/mysqldump  -uroot -p123456 -t 数据库名 > /home/test.sql

    导入数据

    source  /home/test.sql

    全量备份和增量备份

    完整的数据=全量mysqldump备份数据+binlog的实时数据

    1、备份数据 && 进行binglog的日志切割(通过--flush-logs,全量备份时重新生成一个binlog日志)

    /usr/local/mysql/bin/mysqldump  --flush-logs  -uroot -p112233 hehe > /home/hehe.sql  //备份

    2、将--flush-logs生成的binlog日志,转成sql语句

    3、此时就可以恢复了,先导入全量(直接备份库的sql)-》在导入增量(binlog日志转化成的sql)

    读写分离

    读写分离根据主从配置实现,代码层面上的读(从库)和写(主库)的分开

    读写分离是代码层面上的(写连主库;读连从库,多个从库放到一个数组中随机选择);

    主从配置是运维配置层面上的

    解决问题:

    1 网站访问量大  

    2 解决备份数据(专门弄个从库mysqldump用)

    主从的原理

     (1)    master将改变记录到二进制日志(binary log)中(这些记录叫做二进制日志事件,binary log events);
     (2)    slave将master的binary log events拷贝到自己的中继日志(relay log);
     (3)    slave重做中继日志(执行binglog中的sql语句)中的事件,将改变反映它自己的数据。

    可能问题:

    1、对实时性要求特别高,写到了主数据库 但是从数据库的数据没有同步过去(这种情况,多发生于主库大量写入,同步延迟)

    解决:在主库旁加个redis数据库,写入的时候连redis一起写入,查的时候先查redis库。过xx毫秒后,查询自动切换到从库

    2、主数据库 如果有问题(如挂了)。Insert update delete会有影响。从库select  基本上没问题(多个机房放多个从服务器,不能都挂咯吧)

    上图,不需要我们在代码上进行读写分离,而能达到主从切换的效果,他是个中间件。他能判断我们的sql语句,insert、update、delete发给主,select发给从。

    网站架构

    数据库多实例的配置(基于端口的,memcache和redis也可以这样干):一台服务器上让他跑好几个数据库,这样就不用买1个数据库买一台服务器了

    配置主从复制

    注意:我这配的是一主一从的(我这是真实服务器),多主一从的话,只需要在从库使用CHANGE MASTER.....配置不同的主库即可(就是多次执行这个指令)

    总结:代码层的操作,主从库都用各自的普通用户连接,注意权限

    首先,配置master主数据库

    log-bin=mysql-bin #my.cnf中开启binlog日志

    server-id  = 1  #my.cnf中,主的一定是1

    //分配普通用户,从库复制时需要用到(通过从库的CHANGE MASTER配置,从库上用这个账号登录,将主库的binlog复制到自己的中继日志)

    grant replication slave on *.* to 'repl'@'47.94.21.171' identified by '123456'; 

    //注意:如果是自己弄俩虚拟主机搭的内网,ip那写 ip或ip/子网掩码 如 192.168.2.0/255.255.255.0

    flush privileges;   //刷新权限,在从库服务器使用该账号进行登录测试,能登录成功,在进行下一步

    show  master status #查看主库状态

    然后,配置 从数据库

    第1步:修改配置文件(修改的是从库的)

    read-only = 1         //只读(不能写)自己加

    replicate-do-db = test5  //要复制的数据库(复制主库中的哪个数据库)填一个不存在的库,配置成功后,在从主库中创建该库,然后看从库是不是多了一个库,就知道

    server-id       = 2   #从库编号,非1即可。建议用ip的最后一位,好记

    注意:改完后重启数据库

    第2步:配置master 不然他也不知道去哪复制啊(登录进mysql,执行该命令)

    //复制的时候复制这个
    CHANGE MASTER TO MASTER_HOST='47.94.21.171', MASTER_PORT=3306,MASTER_USER='repl',MASTER_PASSWORD='1234RD='123456',MASTER_LOG_FILE='mysql-bin.000004', MASTER_LOG_POS=565;

    //写在这是为了方便看,这和上面那指令一样

    CHANGE MASTER TO

    MASTER_HOST='47.94.21.171', //主库ip

    MASTER_PORT=3306,

    MASTER_USER='repl', //主库设置的那普通用户

    MASTER_PASSWORD='123456',

    MASTER_LOG_FILE='mysql-bin.000004', //查看主库状态的file。#从哪个二进制日志开始复制(因为重启后会生成新的binlog)

    MASTER_LOG_POS=1659;   //查看主库状态的position #从哪个位置开始复制

    第3步:开启主从配置

    start slave  #启动slave。开启之后才会有俩yes,俩yes代表配置成功

    stop slave #停止slave的指令

    show slave status    //查看slave同步状态

    注意:俩都为no是没启动;replicate_do_db那如果是多个,中间以逗号分隔,就是多个主库(这样配叫,多主一从)

    原因:主库没关防火墙,也有可能是selinux没关。

    看这个http://www.mamicode.com/info-detail-2207077.html

    4、从库创建个普通用户,使用普通用户连接从库(此时insert就无法执行成功了)

    安装php

    官网地址: http://php.net/

    wget http://hk1.php.net/get/php-7.1.18.tar.gz/from/this/mirror

    wget http://cn2.php.net/get/php-7.1.16.tar.gz/from/this/mirror  #第1步:下载,我装的这个

    tar xf php.tar.gz #解压

    cd php-7.1.16/  #切换进目录

    安装依赖

    yum install libxml2-devel curl-devel libjpeg-devel libpng-devel freetype-devel libxslt-devel -y

    epel源(eprl 是yum的一个软件源,里面包含了许多基本源里没有的软件)

    yum install http://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm -y #更新erp源

    yum install libmcrypt-devel -y #安装依赖

    yum install libxslt-devel -y

    第2步:编译参数(编译时候会报缺少依赖的错误,所以就给依赖放上面了)

    注意注意注意!!!编译参数分3种,建议根据自己的需要进行复制

    第1种:nginx的;

    第2种:apache的;

    第3种:nginx和apache通用的;

    主要区别在于:

    Nginx的编译参数用:--enable-fpm --with-fpm-user=www --with-fpm-group=www

    Apache的编译参数用:--with-apxs2=/usr/local/httpd/bin/apxs

    Nginx的编译参数

    ./configure --prefix=/usr/local/php --with-config-file-path=/usr/local/php/etc --enable-fpm --with-fpm-user=www --with-fpm-group=www --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd --with-iconv-dir --with-freetype-dir=/usr/local/freetype --with-mcrypt --with-jpeg-dir --with-png-dir --with-zlib --with-libxml-dir=/usr --enable-xml --disable-rpath --enable-inline-optimization --with-curl --enable-mbregex --enable-mbstring --with-gd --enable-gd-native-ttf --with-openssl --with-mhash --enable-pcntl --with-xmlrpc --enable-zip --enable-soap --with-gettext --enable-opcache --with-xsl

    注意:

    1、--with-fpm-user=www用户可以新建,也可以nginx和mysql共用一个;

    2、--with-mysql=mysqlnd  php7以下的加这个参数,7以上已经不让用mysql连接了

    Apache的编译参数

    ./configure --prefix=/usr/local/php --with-config-file-path=/usr/local/php/etc --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd --with-iconv-dir --with-freetype-dir=/usr/local/freetype --with-mcrypt --with-jpeg-dir --with-png-dir --with-zlib --with-libxml-dir=/usr --enable-xml --disable-rpath --enable-inline-optimization --with-curl --enable-mbregex --enable-mbstring --with-gd --enable-gd-native-ttf --with-openssl --with-mhash --enable-pcntl --with-xmlrpc --enable-zip --enable-soap --with-gettext --enable-opcache --with-xsl --with-apxs2=/usr/local/httpd/bin/apxs

    生成.so模块的关键在--with-apxs2=/usr/local/httpd/bin/apxs

    既用apache也用nginx的编译参数

    ./configure --prefix=/usr/local/php --with-config-file-path=/usr/local/php/etc --enable-fpm --with-fpm-user=www --with-fpm-group=www --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd --with-iconv-dir --with-freetype-dir=/usr/local/freetype --with-mcrypt --with-jpeg-dir --with-png-dir --with-zlib --with-libxml-dir=/usr --enable-xml --disable-rpath --enable-inline-optimization --with-curl --enable-mbregex --enable-mbstring --with-gd --enable-gd-native-ttf --with-openssl --with-mhash --enable-pcntl --with-xmlrpc --enable-zip --enable-soap --with-gettext --enable-opcache --with-xsl --with-apxs2=/usr/local/httpd/bin/apxs

    注意:

    1、少编译一个模块,对php运行的效率可能就高一些(就是用nginx或apche)

    2、启动php时,会报[26-May-2018 08:50:44] ERROR: [pool www] cannot get uid for user 'www'这个错误,原因是编译参数中有--with-fpm-user=www --with-fpm-group=www而/etc/passwd中却没有www用户

    第3步:安装

    make && make install

    问题:假如我们安装好后,需要重新编译怎么办呢??

    正确的方法是:删除解压目录,重新解压,重新编译。如果是编译完,加参数的话,无需删除,直接加参数重新编译即可

    赶时间方法是:

    1、去解压后的目录,新参数跟在旧参数后面,直接重新编译(而不是只编译新添加的)

    2、然后执行make && make install

    第4步:配置文件

    拷贝配置文件(源配置在压缩包、解压后的目录中)

    cp php.ini-development  /usr/local/php/etc/php.ini #开发环境的配置文件(php.ini-production生产环境用这个)

    cd  /usr/local/php/etc

    cp php-fpm.conf.default  php-fpm.conf #该文件在/usr/local/php/etc下面(文件最后一行引入了php-fpm.d/*.conf)

    cd php-fpm.d

    cp www.conf.default  www.conf  #php-fpm.d中的

    目录分析

    ├── bin

        |--- php 和 phpize 

    ├── etc

    ├── include 

    ├── lib

    ├── php

    ├── sbin #./php-fpm启动脚本

    └── var

    nginx配置php

    说白了就是反向搭理,将php的文件转发给php处理

    localtion / {

        root html;

        index index.php index.html index.htm; //解析这几种文件

    }

    location ~ .php$ {

        fastcgi_pass   127.0.0.1:9000;

        fastcgi_index  index.php;

        include        fastcgi.conf;

    }

    然后启动nginx,去执行php文件(随便建一个php去访问)

    1、转圈:防火墙的问题

    2、Find not found:配置的问题

    解决1:fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name; 导致的

    include        fastcgi_params; 改成引入fastcgi.conf配置文件

    解决2:还有可能是你代码目录所有者,不是nginx的www用户:

    apache配置php

    1、DirectoryIndex里面加上 index.html index.php #添加index.php

    2、找到:

    AddType  application/x-compress .Z

    AddType application/x-gzip .gz .tgz

    添加如下内容

    AddType application/x-httpd-php .php  //注意 .php前面有一个空格

    3、apache是给php当做一个模块加载进来,才能解析

    LoadModule php7_module        modules/libphp7.so #编译安装没错的话,会自动加载进来

    Apache和nginx处理php的区别

    1、Apche杀掉php-fpm进程后照样能使用。因为它把php当做apache的一个模块(.so的模块)加载进来的。给模块注释掉才不能用

    2、Nginx是以反向代理形式(找)php的,如果php这个9000的进程不在,找不到了,也就解释不了了

     

    分析php.ini和php-fpm.conf

    浏览器只能解析html、css、js这样的文件。

    后端语言解释器,解释成浏览器能理解的。

    通过nginx返回给浏览器

    cgi(后端语言和nginx之间的通讯协议)  fast-cgi

    php-fpm是进程管理器(5.4之后才有)

    php-fpm即php-Fastcgi Process Manager,php-fpm是 FastCGI 的实现,并提供了进程管理的功能。进程包含 master 进程和 worker 进程两种进程。master 进程只有一个,负责监听端口,接收来自 Web Server 的请求,而 worker 进程则一般有多个(具体数量根据实际需要配置),每个进程内部都嵌入了一个 PHP 解释器,是 PHP 代码真正执行的地方。

    php.ini  是解释器(php-fpm的worker进程)的配置文件  

    php-fpm.conf 相当于是(php-fpm的master进程)的配置文件

     

    php.ini配置文件

    disable_functions =   //禁止运行的函数  system  exec  eval

    max_execution_time = 30   //php脚本最大执行时间为30秒 0,则表示无时间限制

    memory_limit = 128M       //允许运行php脚本占用的最大内存为8M,线上设为256

    按top->shift+m->c 处理的数据越多占内存越大,一般是30M

    error_reporting = E_ALL //开发环境   生产环境  E_ALL & ~E_DEPRECATED & ~E_STRICT

    display_errors = On  //开启报错

    post_max_size = 8M  //post最大文件限制

    extension_dir  //扩展库放的目录  redis memcache

    extension    //引入扩展库的文件名  redis.so

    upload_max_filesize = 2M  //上传文件的最大(nginx配置文件中也有个限制)

    session.save_handler = files   //配置session 写入方式 文件  内存  memcache tcp://127.0.0.1:11211

    session.name = PHPSESSID   //session名  cookie

    session.save_path = "/tmp” 默认session写入的位置

     

    php-fpm.conf配置文件

    user = www

    group = www

    listen = 127.0.0.1:9000

    pm = dynamic

    pm.max_children = 5

    pm.start_servers = 2

    pm.min_spare_servers = 1

    pm.max_spare_servers = 3

    slowlog = log/$pool.log.slow

  • 相关阅读:
    Perl 简介
    一定时间后延时变长问题
    CPAN常见问题集
    J2SE简介
    brian的Perl问题之万能指南
    清洁工 VS 亿万富翁
    关于VC中的"stdafx.h"
    Perl模式匹配
    wiki介绍
    生活中10大省钱小秘诀 白领一族"必备诀窍"
  • 原文地址:https://www.cnblogs.com/txlsz/p/13552927.html
Copyright © 2020-2023  润新知