Centos7.9安装mysql5.7

Step1: 检测系统是否自带安装mysql
yum list installed | grep mysql

Step2: 删除系统自带的mysql及其依赖
yum -y remove mysql-libs.x86_64

Step3: 给CentOS添加rpm源,并且选择较新的源

在MySQL官网中下载YUM源rpm安装包:
https://dev.mysql.com/downloads/repo/yum/
centos7下载:Red Hat Enterprise Linux 7 / Oracle Linux 7 (Architecture Independent), RPM Package
centos6下载:Red Hat Enterprise Linux 6 / Oracle Linux 6 (Architecture Independent), RPM Package

下载yum源
wget https://repo.mysql.com//mysql80-community-release-el7-7.noarch.rpm
安装mysql源
yum localinstall mysql80-community-release-el7-7.noarch.rpm

修改源
vim /etc/yum.repos.d/mysql-community.repo
改变默认安装的mysql版本。比如要安装5.7版本,将5.7源的enabled=0改成enabled=1。然后再将其他版本如8.0版本的enabled=1改成enabled=0即可

开始安装
yum install mysql-community-server

linux安装phpredis扩展

1 下载扩展解压

https://github.com/phpredis/phpredis/releases?after=4.2.0RC3

2.解压

tar -zxvf phpredis4.0.2.tar.gz

3.安装扩展

/usr/local/php73/bin/phpize
./configure --with-php-config=/usr/local/php73/bin/php-config 
make && make install

Linux-CentOS6.9安装PHP7.3多版本php并存

安装依赖,已安装的忽略


yum groupinstall "Development Tools"
yum install libxml2-devel openssl-devel libcurl-devel gd-devel gmp-devel libicu-devel recode recode-devel libxslt libxslt-devel

cmake安装


wget https://cmake.org/files/v3.18/cmake-3.18.0-Linux-x86_64.sh
chmod 777 cmake-3.18.0-Linux-x86_64.sh
./cmake-3.18.0-Linux-x86_64.sh
ln -s /work/soft/cmake-3.18.0/bin/cmake /usr/bin/cmake  

安装libzip


wget https://libzip.org/download/libzip-1.5.2.tar.gz
tar -zxvf libzip-1.5.2.tar.gz
cd libzip-1.5.2
mkdir build 
cd build 
cmake ..        (#注意:cmake后面有两个小数点)
make && make install

安装PHP-7.3


官网手动下载php源码包 https://www.php.net/downloads.php
tar -zxvf php-7.3.27.tar.gz
cd php-7.3.27/

./configure \
--prefix=/usr/local/php73 \
--with-config-file-path=/usr/local/php73/etc \
--disable-debug \
--disable-phpdbg \
--enable-mysqlnd \
--enable-bcmath \
--with-bz2=/usr \
--enable-calendar \
--with-curl \
--enable-exif \
--enable-fpm \
--with-fpm-user=nginx \
--with-fpm-group=nginx \
--with-freetype-dir \
--enable-ftp \
--with-gd \
--with-gettext=/usr \
--with-gmp \
--with-iconv \
--with-iconv-dir=/usr/local/libiconv \
--enable-intl \
--with-jpeg-dir \
--enable-mbstring \
--with-openssl \
--with-mhash \
--enable-pcntl \
--with-pdo-mysql=mysqlnd \
--with-png-dir \
--with-recode \
--enable-shmop \
--enable-soap \
--enable-sockets \
--enable-sysvmsg \
--enable-sysvsem \
--enable-sysvshm \
--enable-wddx \
--with-xmlrpc \
--with-xsl \
--with-zlib=/usr \
--enable-zip \
--with-libxml-dir=/usr \
--enable-xml \
--with-mysqli=mysqlnd \
--enable-fileinfo \
--enable-opcache \
--with-libdir=lib64

make && make install
cp php.ini-development /usr/local/php73/etc/php.ini

修改php.ini配置


vim /usr/local/php73/etc/php.ini
# 找到 ;cgi.fix_pathinfo=0 修改为
cgi.fix_pathinfo=1

# 找到 ;date.timezone = 修改为
date.timezone = PRC

查看版本


/usr/local/php73/bin/php -v

配置php-fpm


cp /usr/local/php73/etc/php-fpm.conf.default /usr/local/php73/etc/php-fpm.conf
vi /usr/local/php73/etc/php-fpm.conf
# 找到 ;pid = run/php-fpm.pid 修改为
pid = /usr/local/php73/var/run/php-fpm.pid

修改www.conf


cp /usr/local/php73/etc/php-fpm.d/www.conf.default /usr/local/php73/etc/php-fpm.d/www.conf
vi /usr/local/php73/etc/php-fpm.d/www.conf

user = nginx
group = nginx

# 找到 listen = 127.0.0.1:9000 如果启了php5 或其它 9000端口被占用的话 修改为
listen = 127.0.0.1:9002

配置 php-fpm 启动脚本 注册为系统服务 设置开机启动


cp /work/soft/php-7.3.27/sapi/fpm/php-fpm /usr/local/php73/bin
cp /work/soft/php-7.3.27/sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm73

将/etc/init.d/php-fpm73开始的注释部分php-fpm改为php-fpm73 虽然是注释,但在Linux下注册系统服务要求的格式;如果你不注册为系统服务则不需要改;


vi /etc/init.d/php-fpm73

#! /bin/sh

### BEGIN INIT INFO
# Provides:          php-fpm73
# Required-Start:    $remote_fs $network
# Required-Stop:     $remote_fs $network
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: starts php-fpm73
# Description:       starts the PHP FastCGI Process Manager daemon
### END INIT INFO

授予可执行权限


chmod +x /etc/init.d/php-fpm73

添加php-fpm73至服务列表并设置开机自启


chkconfig --add php-fpm73
chkconfig --list php-fpm73
chkconfig php-fpm73 on

创建php73命令的软连接

ln -s /usr/local/php73/bin/php /usr/bin/php73

php-fpm73 几个参数 start|stop|force-quit|restart|reload|status|configtest


service php-fpm73 start       # 启动服务
service php-fpm73 stop        # 停止服务
service php-fpm73 restart     # 重启服务
service php-fpm73 reload      # 平滑重启服务
service php-fpm73 force-quit  # 强制退出服务
service php-fpm73 status      # 查看服务状态
service php-fpm73 configtest  # 检查配置

启动php-fpm73服务


service php-fpm73 configtest   # 检查配置 显示如下 说明配置没有问题
# [07-Jun-2018 11:53:45] NOTICE: configuration file /usr/local/php73/etc/php-fpm.conf test is 

successful
service php-fpm73 start        # 启动

# Starting php-fpm  done 启动成功

查看php-frm进程 显示php-fpm73版本 和之前的php-fpm56版本


ps -ef |grep php

root      1805     1  0 09:48 ?        00:00:00 php-fpm: master process (/usr/local/php56/etc/php-fpm.conf)                                                                                        
nobody    1806  1805  0 09:48 ?        00:00:00 php-fpm: pool www                                                                                                                                          
nobody    1807  1805  0 09:48 ?        00:00:00 php-fpm: pool www                                                                                                                                          
root     31580     1  0 11:54 ?        00:00:00 php-fpm: master process (/usr/local/php72/etc/php-fpm.conf)                                                                        
www      31581 31580  0 11:54 ?        00:00:00 php-fpm: pool www                                                                                                                  
www      31582 31580  0 11:54 ?        00:00:00 php-fpm: pool www                                                                                                                  
root     31585  3311  0 11:54 pts/1    00:00:00 grep php

php中流行的RPC框架?

什么是RPC框架?

如果用一句话概括RPC就是:远程调用框架(Remote Procedure Call)那什么是远程调用?通常我们调用一个php中的方法,比如这样一个函数方法: localAdd(10, 20),localAdd方法的具体实现要么是用户自己定义的,要么是php库函数中自带的,也就说在localAdd方法的代码实现在本地,它是一个本地调用!远程调用意思就是:被调用方法的具体实现不在程序运行本地,而是在别的某个远程地方。

远程调用原理

比如 A (client) 调用 B (server) 提供的remoteAdd方法:

首先A与B之间建立一个TCP连接;
然后A把需要调用的方法名(这里是remoteAdd)以及方法参数(10, 20)序列化成字节流发送出去;
B接受A发送过来的字节流,然后反序列化得到目标方法名,方法参数,接着执行相应的方法调用(可能是localAdd)并把结果30返回;
A接受远程调用结果,输出30。
RPC框架就是把我刚才说的这几点些细节给封装起来,给用户暴露简单友好的API使用。

远程调用的好处

解耦:当server需要对方法内实现修改时,client完全感知不到,不用做任何变更;这种方式在跨部门,跨公司合作的时候经常用到,并且方法的提供者我们通常称为:服务的暴露。

RPC与Socket有什么区别?

通过上面的简单阐述,好像RPC与Socket 好像啊。都是调用远程的方法,都是client/server模式,我之前也写了一篇文章: 细说socket 那他们有啥区别呢?
RPC(远程过程调用)采用客户机/服务器模式实现两个进程之间相互通信。socket是RPC经常采用的通信手段之一,RPC是在Socket的基础上实现的,它比socket需要更多的网络和系统资源。除了Socket,RPC还有其他的通信方法,比如:http、操作系统自带的管道等技术来实现对于远程程序的调用。微软的Windows系统中,RPC就是采用命名管道进行通信。

RPC与REST有什么区别?

通过了解RPC后,我们知道是RPC是client/server模式的,调用远程的方法,REST也是我们熟悉的一套API调用协议方法,它也是基于client/server模式的,调用远程的方法的,那他俩又有啥区别呢?

REST API 和 RPC 都是在 Server端 把一个个函数封装成接口暴露出去,以供 Client端 调用,不过 REST API 是基于HTTP协议的,REST致力于通过http协议中的POST/GET/PUT/DELETE等方法和一个可读性强的URL来提供一个http请求。而 RPC 则可以不基于 HTTP协议
因此,如果是后端两种语言互相调用,用 RPC 可以获得更好的性能(省去了 HTTP 报头等一系列东西),应该也更容易配置。如果是前端通过 AJAX 调用后端,那么用 REST API 的形式比较好(因为无论如何也避不开 HTTP 这道坎)。

php中流行的rpc框架有哪些

既然php是世界上最好的语言,那php中流行的RPC框架有哪些呢?

先列举下: phprpc,yar, thrift, gRPC, swoole, hprose

因为时间和精力有限,不可能一个一个的去学习和使用,我选几个世面上用的最多的几个用下吧。因为RPC原理是一样的,都是Client/Server模式,只是每个框架的使用方式不一样而已。

Linux-CentOS6.9安装PHP7.2 多版本php并存

安装依赖

yum groupinstall "Development Tools"
yum install libxml2-devel openssl-devel libcurl-devel gd-devel gmp-devel libicu-devel recode recode-devel libxslt libxslt-devel

安装PHP-7.2

官网手动下载php源码包 https://www.php.net/downloads.php


tar zxvf php-7.2.6.tar.gz
cd php-7.2.6/

./configure \
--prefix=/usr/local/php72 \
--with-config-file-path=/usr/local/php72/etc \
--disable-debug \
--disable-phpdbg \
--enable-mysqlnd \
--enable-bcmath \
--with-bz2=/usr \
--enable-calendar \
--with-curl \
--enable-exif \
--enable-fpm \
--with-fpm-user=nginx \
--with-fpm-group=nginx \
--with-freetype-dir \
--enable-ftp \
--with-gd \
--with-gettext=/usr \
--with-gmp \
--with-iconv \
--with-iconv-dir=/usr/local/libiconv \
--enable-intl \
--with-jpeg-dir \
--enable-mbstring \
--with-openssl \
--with-mhash \
--enable-pcntl \
--with-pdo-mysql=mysqlnd \
--with-png-dir \
--with-recode \
--enable-shmop \
--enable-soap \
--enable-sockets \
--enable-sysvmsg \
--enable-sysvsem \
--enable-sysvshm \
--enable-wddx \
--with-xmlrpc \
--with-xsl \
--with-zlib=/usr \
--enable-zip \
--with-libxml-dir=/usr \
--enable-xml \
--with-mysqli=mysqlnd \
--enable-fileinfo \
--enable-opcache \
--with-libdir=lib64


# --enable-opcache            # PHP7.2 相对于 PHP7.1 主要优化 opcache
# --with-libdir=lib64         # 64位系统需指定 lib64 32位系统去掉此项
# --enable-maintainer-zts     # ZTS 线程安全,默认 NTS 非线程安全

# make clean   # 如果之前编译过 需要清除上次的编辑结果

make
make install

cp php.ini-development /usr/local/php72/etc/php.ini

修改php.ini配置

vim /usr/local/php72/etc/php.ini
# 找到 ;cgi.fix_pathinfo=0 修改为
cgi.fix_pathinfo=1

# 找到 ;date.timezone = 修改为
date.timezone = PRC

查看版本

/usr/local/php72/bin/php -v
PHP 7.2.6 (cli) (built: Jun  7 2018 11:08:13) ( ZTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies

配置php-fpm

cp /usr/local/php72/etc/php-fpm.conf.default /usr/local/php72/etc/php-fpm.conf
vi /usr/local/php72/etc/php-fpm.conf
# 找到 ;pid = run/php-fpm.pid 修改为
pid = /usr/local/php72/var/run/php-fpm.pid

修改www.conf

cp /usr/local/php72/etc/php-fpm.d/www.conf.default /usr/local/php72/etc/php-fpm.d/www.conf
vi /usr/local/php72/etc/php-fpm.d/www.conf

user = www
group = www

# 找到 listen = 127.0.0.1:9000 如果启了php5 或其它 9000端口被占用的话 修改为
listen = 127.0.0.1:9001

配置 php-fpm 启动脚本 注册为系统服务 设置开机启动


cp /work/soft/php-7.2.6/sapi/fpm/php-fpm /usr/local/php72/bin
cp /work/soft/php-7.2.6/sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm72

将/etc/init.d/php-fpm72开始的注释部分php-fpm改为php-fpm72 虽然是注释,但在Linux下注册系统服务要求的格式;如果你不注册为系统服务则不需要改;


vi /etc/init.d/php-fpm72

#! /bin/sh

### BEGIN INIT INFO
# Provides:          php-fpm72
# Required-Start:    $remote_fs $network
# Required-Stop:     $remote_fs $network
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: starts php-fpm72
# Description:       starts the PHP FastCGI Process Manager daemon
### END INIT INFO

授予可执行权限


chmod +x /etc/init.d/php-fpm72

添加php-fpm72至服务列表并设置开机自启


chkconfig --add php-fpm72
chkconfig --list php-fpm72
chkconfig php-fpm72 on

创建php73命令的软连接


ln -s /usr/local/php72/bin/php /usr/bin/php72

php-fpm72 几个参数 start|stop|force-quit|restart|reload|status|configtest


service php-fpm72 start       # 启动服务
service php-fpm72 stop        # 停止服务
service php-fpm72 restart     # 重启服务
service php-fpm72 reload      # 平滑重启服务
service php-fpm72 force-quit  # 强制退出服务
service php-fpm72 status      # 查看服务状态
service php-fpm72 configtest  # 检查配置

启动php-fpm72服务


service php-fpm72 configtest   # 检查配置 显示如下 说明配置没有问题
# [07-Jun-2018 11:53:45] NOTICE: configuration file /usr/local/php72/etc/php-fpm.conf test is 

successful
service php-fpm72 start        # 启动

# Starting php-fpm  done 启动成功

查看php-frm进程 显示php-fpm72版本 和之前的php-fpm56版本


ps -ef |grep php

root      1805     1  0 09:48 ?        00:00:00 php-fpm: master process (/usr/local/php56/etc/php-fpm.conf)                                                                                        
nobody    1806  1805  0 09:48 ?        00:00:00 php-fpm: pool www                                                                                                                                          
nobody    1807  1805  0 09:48 ?        00:00:00 php-fpm: pool www                                                                                                                                          
root     31580     1  0 11:54 ?        00:00:00 php-fpm: master process (/usr/local/php72/etc/php-fpm.conf)                                                                        
www      31581 31580  0 11:54 ?        00:00:00 php-fpm: pool www                                                                                                                  
www      31582 31580  0 11:54 ?        00:00:00 php-fpm: pool www                                                                                                                  
root     31585  3311  0 11:54 pts/1    00:00:00 grep php

Nginx新建server


mkdir -p /data0/vhosts/php72
chmod +w /data0/vhosts/php72
chown -R www:www /data0/vhosts/php72

修改nginx.conf配置 新增server


server
{
    listen       80;
    server_name  dev.php72.gocuber.com;
    index index.html index.htm index.php;
    root  /data0/vhosts/php72;

    location ~* .php$ {
        fastcgi_index   index.php;
        fastcgi_pass    127.0.0.1:9001;
        include         fastcgi_params;
        fastcgi_param   SCRIPT_FILENAME    $document_root$fastcgi_script_name;
        fastcgi_param   SCRIPT_NAME        $fastcgi_script_name;
    }

    access_log  /data0/logs/wwwlogs.log  wwwlogs;
}

检查nginx配置 平滑重启nginx


/usr/local/nginx/sbin/nginx -t
/usr/local/nginx/sbin/nginx -s reload

/data0/vhosts/php72新建phpinfo.php index.php

phpinfo();

官方安装说明

页面最下方列出了常见问题及解决办法
http://php.net/manual/zh/install.unix.nginx.php

官方 configure 选项列表说明
http://php.net/manual/zh/configure.about.php