zoukankan      html  css  js  c++  java
  • Linux 笔记

    博客地址:http://www.moonxy.com

    一、前言

    LAMP 是 Linux Apache MySQL PHP 的简写,即把 Apache、MySQL 以及 PHP 安装在 Linux 系统上,组成一个环境来运行 PHP 脚本语言,通常是 PHP 的网站。其中的 Apache 是主流的 Web 服务器软件,MySQL 是小型的关系型数据库软件。

    我们可以把 Apache+PHP 安装在一台机器上,再把 MySQL 安装在另外一台机器上,也可以将其全部安装在同一台机器上。但是 Apache 和 PHP 需要安装在同一台机器上,这是因为 PHP 是作为 Apache 的一个模块存在的。

    下面依次安装 MySQL、Apache 和 PHP。

    二、安装 MySQL

    由于通过源码包安装 MySQL 时需要比较长的编译时间,所以建议安装二进制的免编译包。可以到 MySQL 官网下载,https://dev.mysql.com/downloads此处选择 64 位 5.7.22 版本。Linux-Generic 表示 Linux 的二进制免编译包。

    首先查看系统是多少位,如下:

    [root@ryan ~]# uname -i
    x86_64

    显示系统是 64 位的,如果返回 i386 则表示系统是 32 位的。

    点击右侧的 "Download" 进入如下页面:

    复制 "No thanks, just start my downl" 的连接地址:https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.22-linux-glibc2.12-x86_64.tar.gz

    在 Linux 中下载,建议将软件安装包统一放在 /usr/local/src 目录下,便于统一管理,如下:

    [root@ryan ~]# cd /usr/local/src
    [root@ryan src]# wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.22-linux-glibc2.12-x86_64.tar.gz

    2.1 解压并移动

    [root@ryan src]# tar zxvf mysql-5.7.22-linux-glibc2.12-x86_64.tar.gz
    [root@ryan src]# mv mysql-5.7.22-linux-glibc2.12-x86_64 /usr/local/mysql

    2.2 添加系统用户

    [root@ryan src]# groupadd mysql
    [root@ryan src]# useradd -r -g mysql mysql
    [root@ryan src]# grep mysql /etc/passwd
    mysql:x:496:502::/home/mysql:/bin/bash

    2.3 创建数据库文件存放目录

    [root@ryan src]# mkdir -p /data/mysql
    [root@ryan src]# chown -R mysql:mysql /data/mysql

    2.4 安装数据库

    [root@ryan src]# cd /usr/local/mysql
    
    [root@ryan mysql]# ./bin/mysqld --initialize --user=mysql --datadir=/data/mysql
    ./bin/mysqld: error while loading shared libraries: libaio.so.1: cannot open shared object file: No such file or directory
    [root@ryan mysql]# yum install -y libaio
    
    [root@ryan mysql]# ./bin/mysqld --initialize --user=mysql --datadir=/data/mysql
    ./bin/mysqld: error while loading shared libraries: libnuma.so.1: cannot open shared object file: No such file or directory
    [root@ryan mysql]# yum -y install numactl

    当安装时出现如上的错误时,需要分别安装 libaio 和 numactl 依赖,直到安装成功。如果是 MySQL5.7以前的版本,使用 ./scripts/mysql_install_db --user=mysql --datadir=/data/mysql 命令安装。

    2.5 配置 /etc/my.cnf

    [root@ryan mysql]# vim /etc/my.cnf
    [mysqld]
    character_set_server=utf8
    init_connect='SET NAMES utf8'
    basedir=/usr/local/mysql
    datadir=/data/mysql
    socket=/tmp/mysql.sock
    lower_case_table_names=1
    log-error=/var/log/mysqld.log
    pid-file=/data/mysql/mysqld.pid

    2.6 复制启动脚本

    [root@ryan mysql]# cp support-files/mysql.server /etc/init.d/mysqld
    [root@ryan mysql]# chmod 755 /etc/init.d/mysqld

    编辑 vim /etc/init.d/mysqld,修改第46和47行,如下:

    修改为:

    2.7 启动 MySQL

    [root@ryan mysql]# service mysqld start
    Starting MySQL. SUCCESS!
    [root@ryan mysql]# ps aux |grep mysqld
    root       2347  0.0  0.0  11436  1540 pts/0    S    23:40   0:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --datadir=/data/mysql --pid-file=/data/mysql/mysqld.pid
    mysql      2561  0.5  9.5 1167520 181608 pts/0  Sl   23:40   0:00 /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/data/mysql --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=/var/log/mysqld.log --pid-file=/data/mysql/mysqld.pid --socket=/tmp/mysql.sock
    root       2594  0.0  0.0 103308   876 pts/0    S+   23:41   0:00 grep mysqld

    2.8 设置 root 密码

    [root@ryan mysql]# service mysqld stop
    Shutting down MySQL.. SUCCESS!
    [root@ryan mysql]# ./bin/mysqld_safe --user=mysql --skip-grant-tables --skip-networking &
    [root@ryan mysql]# ./bin/mysql -u root mysql
    mysql> update user set authentication_string=PASSWORD("123456")where user="root";
    Query OK, 1 row affected, 1 warning (0.00 sec)
    Rows matched: 1  Changed: 1  Warnings: 1
    mysql>  flush privileges;
    Query OK, 0 rows affected (0.00 sec)
    [root@ryan mysql]# service mysqld start
    Starting MySQL SUCCESS!

    密码不要设置的太简单,如此处演示的 123456,否则再次登录时会提示必须重置密码:ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.

    并且注意此处 5.7 版本的修改密码的的语法为:

    update user set authentication_string=PASSWORD("123456")where user="root";

    5.7 以下版本的语法为:

    update user set password=PASSWORD("123456")where user="root";

    注意:

    Mysql 5.7 在自动初始化数据库的时候,会生成 root 用户的默认密码。

    通过 grep "temporary password" /var/log/mysqld.log 命令,返回结果最后冒号后面的字符串就是root的默认密码。

    使用此密码登录后,Mysql 会要求第一件做的事就是改root密码,而且是要求强密码。

    如果是其他版本,在刚安装好MySQL后,超级用户 root 是没有密码的。

    三、安装 Apache

    Apache 是目前主流的 Web 服务器,后来改名称为 httpd 了。目前最新版为 2.4,此处选择 2.4.34。官方下载页面为:http://httpd.apache.org/download.cgi,可下载 gzip 或 bzip2 格式的源码包。

    此处下载地址为:http://mirrors.tuna.tsinghua.edu.cn/apache//httpd/httpd-2.4.34.tar.gz

    3.1 下载

    [root@ryan src]# cd /usr/local/src
    [root@ryan src]# wget http://mirrors.tuna.tsinghua.edu.cn/apache//httpd/httpd-2.4.34.tar.gz

    注意,2.4 版本还需要下载 apr 和 apr-util 包,可以将这两个包理解为通用函数库,主要为上层应用提供支持。Apache 2.4 以后的版本不再自带 APR 库(Apache Portable Runtime,Apache 可移植运行库),所以在安装 Apache 之前需要手动下载安装 APR 库。完整的 APR 实际上包含了三个依赖包:apr、apr-util 以及 apr-iconv。目前只下载前面两个安装就行,即 apr 和 apr-util。

    [root@ryan src]# wget http://mirror.bit.edu.cn/apache//apr/apr-1.6.3.tar.gz
    [root@ryan src]# wget http://mirror.bit.edu.cn/apache//apr/apr-util-1.6.1.tar.gz

    3.2 解压

    [root@ryan src]# tar zxvf httpd-2.4.34.tar.gz^C
    [root@ryan src]# ll httpd-2.4.34.tar.gz
    -rw-r--r-- 1 root root 9098780 Jul 14 04:45 httpd-2.4.34.tar.gz

    解压 apr 和 apr-util 包

    [root@ryan src]# tar zxvf apr-1.6.3.tar.gz
    [root@ryan src]# tar zxvf apr-util-1.6.1.tar.gz

    3.3 安装

    首先安装 apr

    [root@ryan apr-1.6.3]# cd /usr/local/src/apr-1.6.3
    [root@ryan apr-1.6.3]# ./configure --prefix=/usr/local/apr
    [root@ryan apr-1.6.3]# echo $?
    0
    [root@ryan apr-1.6.3]# make
    [root@ryan apr-1.6.3]# echo $?
    0
    [root@ryan apr-1.6.3]# make install
    [root@ryan apr-1.6.3]# echo $?
    0

    如果在安装中出现如下错误:

    configure: error: no acceptable C compiler found in $PATH

    说明没有找到可用的C语言编译器,需要安装 gcc,如下:

    [root@ryan apr-1.6.3]# yum install -y gcc

    然后安装 apr-util

    [root@ryan apr-util-1.6.1]# /usr/local/src/apr-util-1.6.1
    [root@ryan apr-util-1.6.1]# ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr
    [root@ryan apr-util-1.6.1]# echo $?
    0
    [root@ryan apr-util-1.6.1]# make
    [root@ryan apr-util-1.6.1]# echo $?
    0
    [root@ryan apr-util-1.6.1]# make install
    [root@ryan apr-util-1.6.1]# echo $?
    0

    如果在编译时出现如下错误:

    [root@ryan apr-util-1.6.1]# make
    make[1]: *** [xml/apr_xml.lo] Error 1
    make[1]: Leaving directory `/usr/local/src/apr-util-1.6.1'
    make: *** [all-recursive] Error 1
    [root@ryan apr-util-1.6.1]# echo $?
    2

    则需要安装 expat-devel 包:

    [root@ryan apr-util-1.6.1]# yum -y install expat-devel

    到这里是不是终于可以正式安装 apache 了,其实不是的,还有依赖的软件没有安装,缺少 pcre 程序,这是关于正则表达式 regular expression 的依赖包。

    访问:http://pcre.org/,进入如下界面:

    找到如下链接:ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/

    下载:

    [root@ryan ~]# cd /usr/local/src
    [root@ryan src]# wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.42.tar.gz

    配置编译参数:

    [root@ryan src]# tar zxvf pcre-8.42.tar.gz
    [root@ryan src]# cd pcre-8.42
    [root@ryan pcre-8.42]# ./configure --prefix=/usr/local/pcre
    [root@ryan pcre-8.42]# echo $?
    0

    如果在预编译时出现如下错误:

    configure: error: Invalid C++ compiler or C++ compiler flags

    说明缺少 C++ 编译器,可以使用 yum 安装:

    [root@ryan pcre-8.42]# yum -y install gcc-c++

    编译并安装:

    [root@ryan pcre-8.42]# make && make install
    [root@ryan pcre-8.42]# echo $?
    0

    到现在为止,Apache 安装前的依赖库终于安装完毕,可以安装 Apache 了。

    设置编译参数:

    [root@ryan httpd-2.4.34]# /usr/local/src/httpd-2.4.34
    [root@ryan httpd-2.4.34]# ./configure --prefix=/usr/local/apache24 --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util --with-pcre=/usr/local/pcre --enable-so --enable-mods-shared=most
    [root@ryan httpd-2.4.34]# echo $?
    0

    如果出现如下错误:

    make[2]: *** [htpasswd] Error 1

    make[2]: Leaving directory `/usr/local/src/httpd-2.4.34/support'

    make[1]: *** [all-recursive] Error 1

    make[1]: Leaving directory `/usr/local/src/httpd-2.4.34/support'

    则先将 apr 和 apr-util 复制到 httpd的srclib目录下:

    # cp -r apr-1.6.3 httpd-2.4.34/srclib/apr

    # cp -r apr-util-1.6.1 httpd-2.4.34/srclib/apr-util

    然后再重新预编译,添加 --with-included-apr 选项:

    # ./configure --prefix=/usr/local/apache24 --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util --with-pcre=/usr/local/pcre --enable-so --enable-mods-shared=most --with-included-apr

    然后再编译和安装:

    [root@ryan httpd-2.4.34]# make
    [root@ryan httpd-2.4.34]# echo $?
    0
    [root@ryan httpd-2.4.34]# make install
    [root@ryan httpd-2.4.34]# echo $?
    0

    四、安装 PHP

    PHP7 已经出来很长时间了,此处选择 PHP7,当然也可以选择 PHP5。官方下载地址为:http://www.php.net/downloads.php

    此处下载目前最新版 7.2.8,进入上面链接后,选择镜像下载地址:http://cn2.php.net/get/php-7.2.8.tar.gz/from/this/mirror,由于这个下载地址比较特殊,使用 wget 可能下载不下来,建议先下载到 Windows 上,再sftp上传到Linux 服务器上。

    执行预编译:

    [root@ryan src]# cd /usr/local/src
    [root@ryan src]# tar zxvf php-7.2.8.tar.gz
    [root@ryan src]# cd php-7.2.8
    [root@ryan src]# ./configure --prefix=/usr/local/php7 
     --with-apxs2=/usr/local/apache24/bin/apxs 
     --with-config-file-path=/usr/local/php7/etc 
     --with-curl 
     --with-freetype-dir 
     --with-gd 
     --with-gettext 
     --with-iconv-dir 
     --with-kerberos 
     --with-libdir=lib64 
     --with-libxml-dir 
     --with-mysqli 
     --with-openssl 
     --with-pcre-regex 
     --with-pdo-mysql 
     --with-pdo-sqlite 
     --with-pear 
     --with-png-dir 
     --with-xmlrpc 
     --with-xsl 
     --with-zlib 
     --enable-fpm 
     --enable-bcmath 
     --enable-libxml 
     --enable-inline-optimization 
     --enable-mbregex 
     --enable-mbstring 
     --enable-opcache 
     --enable-pcntl 
     --enable-shmop 
     --enable-soap 
     --enable-sockets 
     --enable-sysvsem 
     --enable-xml 
     --enable-zip

    如果上面执行出错,需要安装一些依赖的组件:

    [root@ryan php-7.2.8]# yum -y install libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel MySQL pcre-devel openssl openssl-devel curl-devel libxslt-devel

    编译:

    [root@ryan php-7.2.8]# make
    [root@ryan php-7.2.8]# echo $?
    0

    由于 with 指定需要的模块不一样,编译的时间也会不一样,此处 make 编译的时间可能需要5分钟以上。

    安装:

    [root@ryan php-7.2.8]# make install
    [root@ryan php-7.2.8]# echo $?
    0

    最后复制配置文件:

    [root@ryan php-7.2.8]# cp php.ini-production /usr/local/php7/etc/php.ini

    php.ini-development 适合开发程式使用(测试用);

    php.ini-production 拥有较高的安全性设定,则适合上线当产品使用;

    一般将 php.ini-production 修改为 php.ini,确保测试环境(本地)与正式环境(线上)一致。PHP 配置文件:/usr/local/php7/etc/php.ini

    配置 Apache(httpd)支持 PHP

    编辑 httpd 的主配置文件:/usr/local/apache24/conf/httpd.conf

    [root@ryan ~]# vim /usr/local/apache24/conf/httpd.conf

    将 ServerName www.example.com:80 前的 # 去掉。

    找到如下配置:

    <Directory />
    AllowOverride none
    Require all denied
    </Directory>

    将 denied 修改为 granted:

    <Directory />
    AllowOverride none
    Require all granted
    </Directory>

    修改这个的目的是,允许所有请求,否则,我们访问到的时候会报 403 错误。

    找到如下内容

    AddType application/x-gzip .gz .tgz

    在该行的下面添加:

    AddType application/x-httpd-php .php

    找到如下内容:

    <IfModule dir_module>
    DirectoryIndex index.html
    </IfModule>

    修改为:

    <IfModule dir_module>
    DirectoryIndex index.html index.php
    </IfModule>

    五、测试 LAMP 是否成功

    MySQL、httpd 和 PHP 安装之后,需要先检查 httpd 的配置文件是否正确,只有正确的配置文件才可以正常解析 PHP 文件。

    测试配置文件语法是否正确

    [root@ryan ~]# /usr/local/apache24/bin/apachectl -t
    Syntax OK

    如果有错误,则需要修改,Syntax OK 表示配置文件的语法结构正确。

    启动 httpd,并查看是否启动:

    [root@ryan ~]# /usr/local/apache24/bin/apachectl start
    [root@ryan ~]# netstat -lnp |grep httpd
    tcp        0      0 :::80                       :::*                        LISTEN      83571/httpd

    说明 httpd 已经正常启动了。

    启动 httpd 服务命令:/usr/local/apache24/bin/apachectl start

    停止 httpd 服务命令:/usr/local/apache24/bin/apachectl stop

    也可以使用 curl 命令来进行简单的测试,如下:

    [root@ryan ~]# curl localhost
    <html><body><h1>It works!</h1></body></html>

    能够正常返回结果,说明已经正常启动了。

    测试是否正确解析 PHP

    首先编写一个测试脚本,其中 htdocs 是 Apache 的默认网站根目录。如下:

    [root@ryan ~]# vim /usr/local/apache24/htdocs/test.php
    <?php
            echo "我的LAMP";
    ?>

    然后执行如下测试:

    [root@ryan ~]# curl localhost/test.php
    我的LAMP

    说明 httpd 已经可以正确解析 PHP 了。

    此时通过其他机器来访问本服务器时显示:

    应该是 Linux 服务器没有开启 80 端口导致的,CentOS 6 需要在 iptables 放行 80 端口。

    放行 80 端口

    [root@ryan ~]# /etc/init.d/iptables status
    [root@ryan ~]# iptables -I INPUT -p tcp --dport 80 -j ACCEPT
    [root@ryan ~]# /etc/init.d/iptables save
    [root@ryan ~]# /etc/init.d/iptables status
    Table: filter
    Chain INPUT (policy ACCEPT)
    num  target     prot opt source               destination
    1    ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:80
    2    ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED
    3    ACCEPT     icmp --  0.0.0.0/0            0.0.0.0/0
    4    ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0
    5    ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           state NEW tcp dpt:22
    6    REJECT     all  --  0.0.0.0/0            0.0.0.0/0           reject-with icmp-host-prohibited
    
    Chain FORWARD (policy ACCEPT)
    num  target     prot opt source               destination
    1    REJECT     all  --  0.0.0.0/0            0.0.0.0/0           reject-with icmp-host-prohibited
    
    Chain OUTPUT (policy ACCEPT)
    num  target     prot opt source               destination

    注意,重启系统或者重启 iptables 服务后还会加载已经保存的规则,所以需要使用 "/etc/init.d/iptables save" 保存一下规则。

    然后再次访问:

    发现均已经可以正常访问了。

    设置环境变量

    [root@ryan conf]# vim /etc/profile.d/app.sh
    #MySQL
    export PATH=$PATH:/usr/local/mysql/bin
    #Apache
    export PATH=$PATH:/usr/local/apache24/bin
    [root@ryan conf]# source /etc/profile

    可以将 MySQL 和 Apache 的路径配置到 /etc/profile 或者 /etc/profile.d/app.sh 中,方便使用它们的命令时,不用再添加绝对路径。

    附录

    注意:

    如果make中出现错误,必须执行 make clean 清除所有缓存文件后继续,如果是在 make install 过程中出现错误,必须执行 make clean 并且删除生成了安装目录,然后重新执行 make 和 make install。以上步骤执行后,均可以使用命令 echo $? 来检查是否执行成功。

    安装完成之后删除原来释放出来的那些目录即可,如果以后要卸载,只要不忘记安装目录,直接删除安装目录就可以,也不会出现任何残留垃圾文件。

    apachectl 常用命令参数

    # apachectl configtest:检查设置文件中的语法是否正确;

    # apachectl fullstatus:显示服务器完整的状态信息;

    # apachectl graceful:重新启动Apache服务器,但不会中断原有的连接;

    # apachectl help:显示帮助信息;

    # apachectl restart:重新启动Apache服务器;

    # apachectl start:启动Apache服务器;

    # apachectl status:显示服务器摘要的状态信息;

    # apachectl stop:停止Apache服务器;

    # apachectl -M:输出一个已经启用的模块列表,包括静态编译在服务器中的模块和作为DSO动态加载的模块。即同时列出已经启用的静态模块(static)和动态模块(shared)。

    # apachectl -l:输出一个静态编译在服务器中的模块的列表。它不会列出使用LoadModule指令动态加载的模块。即只列出已经启用的静态模块(static)。

    PHP 其实就是作为 apache 的一个动态模块被调用的,如下:

    [root@ryan httpd-2.4.34]# grep php /usr/local/apache24/conf/httpd.conf
    LoadModule php7_module        modules/libphp7.so
    [root@ryan httpd-2.4.34]# apachectl -M |grep php
     php7_module (shared)

    在安装 PHP 时,指定的 --with-apxs2 选项其实就是将 PHP 作为一个模块安装到 apache 中的。

    通过查看 httpd.conf 中的 LoadModule 对应的模块都是动态的(shared),如下:

    [root@ryan httpd-2.4.34]# grep -i LoadModule /usr/local/apache24/conf/httpd.conf
    # have to place corresponding `LoadModule' lines at this location so the
    # LoadModule foo_module modules/mod_foo.so
    LoadModule authn_file_module modules/mod_authn_file.so
    #LoadModule authn_dbm_module modules/mod_authn_dbm.so
    #LoadModule authn_anon_module modules/mod_authn_anon.so
    #LoadModule authn_dbd_module modules/mod_authn_dbd.so
    ……

    关于 MPM

    可以在安装 apache 时,使用 --with-mpm=MPM 来指定 MPM 模式,如下:

    [root@ryan httpd-2.4.34]# /usr/local/src/httpd-2.4.34/configure --help |grep mpm -A2
      --enable-mpms-shared=MPM-LIST
                              Space-separated list of MPM modules to enable for
                              dynamic loading. MPM-LIST=list | "all"
    --
      --with-mpm=MPM          Choose the process model for Apache to use by
                              default. MPM={event|worker|prefork|winnt} This will
                              be statically linked as the only available MPM
                              unless --enable-mpms-shared is also specified.
      --with-module=module-type:module-file
                              Enable module-file in the modules/<module-type>

    MPM 常见的三种模式为:prefork、worker 和 event。

    MySQL 主配置文件:/etc/my.cnf

    Apache 主配置文件:/usr/local/apache24/conf/httpd.conf,虚拟主机配置文件:/usr/local/apache24/conf/extra/httpd-vhosts.conf

    PHP 主配置文件:/usr/local/php7/etc/php.ini

    参考文档:

    MySQL:

    https://www.cnblogs.com/KiraEXA/p/6030912.html

    https://www.cnblogs.com/fnlingnzb-learner/p/5830622.html

    http://www.cnblogs.com/jxrichar/p/9248480.html

    https://blog.csdn.net/z13615480737/article/details/80019881

    https://blog.csdn.net/keepd/article/details/77151006

    Apache:

    https://www.cnblogs.com/freeweb/p/5177516.html

    安装 apache2.4 make 报错

    多处理模块(MPM):http://httpd.apache.org/docs/2.2/mpm.html

    PHP:

    https://blog.csdn.net/u010647316/article/details/56489795/

  • 相关阅读:
    八大排序算法——插入排序(动图演示 思路分析 实例代码java 复杂度分析)
    八大排序算法——冒泡排序(动图演示 思路分析 实例代码java 复杂度分析)
    八大排序算法——选择排序(动图演示 思路分析 实例代码Java 复杂度分析)
    蓝桥杯 算法训练 素因子去重 (java)
    蓝桥杯 每周一练 第一周(3n+1问题)
    第八届蓝桥杯程序设计大赛 国赛 填空题第一题 平方十位数
    拼多多 2018 校招编程题 六一儿童节
    泛型的实质
    JAVA 反射之Method
    JAVA反射之 Field (属性)
  • 原文地址:https://www.cnblogs.com/cnjavahome/p/9320484.html
Copyright © 2011-2022 走看看