您的位置:晶晶的博客>速记>利用Homebrew管理php-fpm模式下的多版本PHP和MySQL

利用Homebrew管理php-fpm模式下的多版本PHP和MySQL

概要

Homebrew官网:https://brew.sh/index_zh-cn

Homebrew一般简称brew,命令行下也是使用的简称作为核心命令。作用跟Ubuntu下的apt-get或CentOS下的yum类似,是一个ruby写的包管理工具,本质上是基于git的,更新brew本质上是从github拉取代码。关于brew的更多的介绍和安装就不墨迹了。

基础

安装软件:

brew install {soft_tag}
# 其中{soft_tag}为软件包名称

卸载软件:

brew uninstall {soft_tag}

或

brew remove {soft_tag}
# 其中{soft_tag}为软件包名称

更新软件:

brew upgrade {soft_tag}
# 其中{soft_tag}为软件包名称,这里比较特别,不是update
# 当然update命令也是存在,update命令用于brew更新自己

其他的一些常用命令:

## 查看软件包信息
brew info {soft_tag}
# 其中{soft_tag}为软件包名称

## 查看已安装的软件包列表
brew list

## 搜索软件包
brew search {soft_tag}
# 其中{soft_tag}为软件包名称

## brew还有图形化的客户端,叫Cakebrew,本文核心是在命令行下,与Cakebrew无关
Cakebrew

Cakebrew,建议熟悉命令行下的原理后使用,会更方便。

本文的php是基于php-fpm模式下的,也就是webServer为nginx,经典的nginx+php+mysql搭配。

# 检查安装过的php版本情况,list命令加一个完整名称的参数
brew list --full-name

# 安装nginx

brew install nginx
####################
# 1、不带版本号将安装最新版,当前最新1.15.8
# 2、安装完配置文件所在目录:/usr/local/etc/nginx/
# 3、80端口有权限问题,需要给下执行权限,并在配置文件中修改执行用户
#   修改成当前登录用户接,譬如我的当前登录用户名为:jingjing
#   nginx配置文件中的user配置为:jingjing staff
#   这个得依据实际情况,查看自己的用户名命令:whoami
#   查看当前用户所属用户组:groups `whoami`
#   查看指定用户所属用户组:groups USER_NAME
#   其中USER_NAME换成你指定的用户的名称
# 4、给予nginx的root权限,注意mac下wheel组的含义
####################
# 给予nginx的root权限
sudo chown root:wheel /usr/local/opt/nginx/bin/nginx
sudo chmod u+s /usr/local/opt/nginx/bin/nginx

# 安装php 5.6、7.1、7.2

brew install php@5.6
brew install php@7.1
brew install php@7.2

brew多版本php管理

php多版本切换墨迹内容

brew原先有个叫php-version工具,可以一键切换,现在好像移除了,命令行下还是自己动手丰衣足食的好。

brew中php的从5系列到7系列都是支持的,只不过截止至写此文时原先brew原先支持的安装php扩展的方式已经移除,需要配置brew仓库源(brew中称之为tap),或者自己编译安装或pecl方式安装。

当前php各版本的软件包命名规则为php@版本号,例如php7.2的就是php@7.2,那么安装php7.2就是brew install php@7.2 ,如果不带版本号,brew会自动安装最新版。brew安装包时都会自动更新下软件源信息,下图中Updating Homebrew有时候会等待比较长时间,因为是在从github中拉取代码,github国内速度较慢,所以慢,要么等要么自找资镜像替换,这个就是他话了。下图中提示很明确,因为写此文之前我已经安装过了php7.2,所以再次安装会有个error,还会告诉你有最新版本了。

brew安装php

日常开发中,接触的项目一般需要5.6、7.1、7.2,以及尝鲜安装了最新的7.3,所以就涉及到多版本切换和管理。brew安装的php是允许多版本的,只不过需要手动切换下版本,当然也可以自己做多版本共存,通过nginx的配置文件指定使用的版本,这就是他话了,本文就是最简单的运行切换。

查看当前php版本和运行的php版本

php多版本切换步骤

## 1、查看当前命令行使用的php版本
php -v

## 2、查看当前运行[一般都是开机启动的]的php版本

brew services list
## 该命令是brew提供的对mac下plist启动器的一个封装

## 用户级别的开机启动项
ls ~/Library/LaunchAgents/

## 系统级别的开机启动项

ls /Library/LaunchAgents/

## 查看发现示例mac当前运行的php7.2,就依次为例继续

## 3、停止并卸载7.2的服务切换到7.1

brew services stop php@7.2
## 两个含义:
# 1、停止php7.2
# 2、从开机启动项中删除php7.2,也就是说执行此命令后php7.2开机后不会再自动启动

## 2、去除php7.2的命令行link

brew unlink php@7.2

## 3、强制启用7.1的命令行link

brew link --force php@7.1
# 加--force参数是强制

## 4、关掉当前的命令行界面,重新打开一个命令行界面

## 5、开启7.1的服务

brew services start php@7.1
## 两个含义:
# 1、开始执行php7.1
# 2、php7.1加入开机自动启动

####################
# 6、补充:
# 命令行可能不会立即生效,可能存在~/.bash_profile中的优先环境变量设定
# ~/.bash_profile中若有设定请删除
# 然后关掉命令行新打开一个就是php7.1了,不确定的话检查一下:php -v
####################

理解原理很重要。

MySQL多版本管理

MySQL多版本管理墨迹内容

MySQL有点儿需要处理的,brew提供的配置文件默认不支持多版本,需要自己调整一个datadir参数,而brew安装MySQL后默认是没有my.cnf配置文件的,这也正常,MySQL配置文件本身就不是必须的,因为对这点的理解有误,鄙人最开始做MySQL多版本自主切换测试时差点把上亿的数据搞丢了,后来弄明白了,其实并没有丢,只不过在是已有5.6的datadir指定的目录下的MySQL数据被新安装的MySQL5.7启动时给自动升级了,所以数据备份很重要,备份、备份、备份,重要的事儿说3遍。

划重点:

1、brew安装的MySQL默认datadir路径为:/usr/local/var/mysql

2、MySQL的basedir为:/usr/local/opt/mysql@VERSION,其中VERSION为版本号,如果是5.6则是:/usr/local/opt/mysql@5.6

3、命令行下执行MySQL的bin目录:也就是命令行下直接敲mysql执行的文件目录,有一个软连接,路径为/usr/local/bin,也就是说当前用那个版本的mysql,/usr/local/bin下的mysql就会指向具体的MySQL的basedir下的bin目录,

4、MySQL实际真实的basedir路径:有点儿绕,其实/usr/local/opt/mysql@VERSION也依然是一个软链接,最真实指向的路径在/usr/local/Cellar/mysql@VERSION目录下,而且/usr/local/Cellar/mysql@VERSION还有一层目录,例如当前mysql5.7版本的实际文件路径为:/usr/local/Cellar/mysql@5.7/5.7.23/

brew下MySQL的软连接情况

MySQL多版本切换

# 1、安装MySQL 5.6并配置

brew install mysql@5.6

# 配置MySQL5.6

# 本次安装的版本号为5.6.42,这个版本号在下方会用到
# 不同小版本路径依据版本号是有差异的

vi /usr/local/Cellar/mysql@5.6/5.6.42/homebrew.mxcl.mysql@5.6.plist

# 将其中的--datadir配置项的路径改一下,默认是:/usr/local/var/mysql
# 然后新建一个你修改后的目录,这个修改就是为了改动mysql的数据存储路径
# 因为不同版本的数据存储路径都是一样,这样会导致数据的问题
# 注意:这样改动之后,如果后续brew升级下MySQL5.6之后,不要着急立即启动
# 而因立即依据相同方法去修改下对应新版本的homebrew.mxcl.mysql@5.6.plist文件中的--datadir配置项

# 现在可以启动MySQL5.6并按提示初始化5.6了

brew services start mysql@5.6

# 2、安装MySQL 5.7并配置

brew install mysql@5.7

## 如果只有两个MySQL版本就无需改动配置了,这样以后升级5.7之后就不需要变动配置,毕竟开发换嘛

# 3、MySQL不同版本切换

## 上述配置修改处理之后,跟php多版本切换类似,注意顺序,顺序很重要

# 3.1、查看当前MySQL版本
mysql -V

# 3.2、停止当前版本
brew services stop mysql@5.7

# 3.3、去除当前版本的link
brew unlink mysql@5.7

# 3.4、建立需要启动的版本的link
brew link --force mysql@5.6

# 3.5、关掉当前的命令行界面,重新打开一个命令行界面

## 使用brew去除或新建一个link之后,关掉当前命令行再打开一个
## 这样新的link在新的命令行立即生效
## 如果不关掉的话,就需要source一下环境变量,两者都可以使用
## 原理都是一样,重新打开一个,打开过程系统会自动source环境变量

# 3.6、启动5.6

## 启动之前可以确认下当前命令行下的mysql版本

mysql -V

brew services start mysql@5.6

Enjoy Yourself!

转载请注明本文标题和链接:《利用Homebrew管理php-fpm模式下的多版本PHP和MySQL

相关推荐

哟嚯,本文评论功能关闭啦~

  1. #1

    php 切换版本,实际上是成功了,但是PHP -v 查看版本 还是固定在一个,有什么解决办法吗

    4年前 (2020-08-11) 回复
    • @徐:应该是你的环境变量配置文件里写死了php的bin路径,可以执行看下输出的内容里是否有写死的,使用brew的切换工具切换管理的话无需写死的
      ---
      cat ~/.bash_profile

      晶晶 4年前 (2020-08-12) 回复
  2. #2

    但是php7.1及以下的版本,装扩展会比较麻烦,因为它是另外安装的,比如php@7.1,安装redis扩展是php71-redis,而7.2以上的版本(我忘了是7.2还是7.3了)已经移除了这种安装扩展的方式,改为直接用pecl安装,所以如果是php5.6,我还真担心它已经没有对应的扩展版本,而且有时候可能redis有,但其他扩展未必有,低版本还是很麻烦,没有祖传代码的话还是不要用了。

    无名氏 5年前 (2019-05-31) 回复