前言
在信息技术的世界中,数据库是一个不可或缺的组成部分。其中,MySQL作为一种常用的开源关系型数据库管理系统,以其高性能、高可靠性和易用性赢得了众多开发者和企业的喜爱。在 MacOS 系统安装 MySQL 数据库有很多方式,其中通过 Homebrew 包管理器进行安装是最为便捷和高效的选择。Homebrew 作为 MacOS 上最受欢迎的包管理工具,能够自动处理依赖关系、简化安装流程,并提供统一的管理界面。本文将详细介绍如何使用 Homebrew 在 MacOS 系统上安装 MySQL,包括安装前的准备工作、具体安装步骤以及后续配置等内容。
第一章:环境检查
首先确认系统中是否有 Homebrew,以及是否已安装过 MySQL,避免重复安装冲突。
检查 Homebrew 是否安装
使用 Homebrew 安装 MySQL 是最为便捷的方式之一,打开「终端」执行以下命令:
brew --version
若显示类似 Homebrew 4.6.10,则说明 Homebrew 已安装。若提示 command not found: brew,需先安装 Homebrew。
搜索可用版本
在安装 MySQL 之前,建议先搜索可用的版本。通过执行以下命令可以查看 Homebrew 仓库提供的 MySQL 相关软件包:
brew search mysql
这个命令会列出所有可用的 MySQL 版本以及相关工具,如下图所示。需要注意的是,Homebrew 通常会提供多个 MySQL 版本,包括最新的稳定版和长期支持版本,用户可以根据自己的需求选择合适的版本进行安装。
检查是否已安装 MySQL
执行命令排查是否有旧版 MySQL:
brew list | grep mysql
若终端无输出,说明未安装 MySQL,可继续下一步。若输出 mysql 或 mysql@xx,说明已安装,需先卸载(执行 brew uninstall mysql),避免冲突。
第二章:安装 MySQL
Homebrew 会自动下载 MySQL 及依赖(如 abseil、icu4c 等),无需手动处理。
# 清理旧缓存
brew cleanup
# 更新 Homebrew 到最新版本,确保能够安装最新的软件包
brew update
brew install mysql
这个命令会触发 Homebrew 的安装流程,包括下载软件包、解析依赖关系、编译安装等步骤。安装过程可能需要一些时间,具体取决于网络速度和系统性能。在安装完成后,Homebrew 会输出一些重要的提示信息,包括 MySQL 的初始配置和安全建议,如下图所示。
第三章:基本管理
启动 MySQL 服务
MySQL 安装后不会自动启动,需手动启动服务(支持后台自启)。使用 Homebrew 管理服务非常方便,可以通过以下命令启动 MySQL:
brew services start mysql
检查服务状态
确认 MySQL 服务是否正常运行,可以通过以下两种方式验证:
# 查看所有brew服务状态(推荐)
brew services list
# 查找MySQL进程
ps aux | grep mysql
这个命令会列出所有服务的名称、状态以及用户等信息,如下图所示。
终端显示 mysql 一行的 status 为 started,这说明 MySQL 服务已成功启动。若 status 为 error,可尝试重启服务。Homebrew 安装的 MySQL 默认情况下没有 root 密码,不填写密码的情况下直接可以通过 Navicat 连接(需要先开启MySQL服务)。
验证 MySQL 版本
执行命令查看安装的版本:
mysql --version
首次登录 MySQL
Homebrew 安装的 MySQL 默认无 root 密码,执行一下命令就可以直接登录:
mysql -u root
如果一切正常,将看到MySQL的欢迎信息和命令提示符,表明已成功连接到MySQL服务器。
MySQL 初始化
MySQL 首次安装后无密码,这显然存在安全风险。为了增强安全想,就需通过官方工具 mysql_secure_installation 配置安全选项,在终端(非 MySQL 命令行)执行:
mysql_secure_installation
这个交互式脚本会引导我们完成一系列安全配置,包括:
-
选择验证密码组件:验证密码组件可用于测试密码,并提高安全性。它检查密码的强度,并允许用户仅设置以下密码足够安全。
# 开始对 MySQL 服务器进行安全配置。 Securing the MySQL server deployment. # 表示使用空密码连接到 MySQL 服务器,这是因为刚安装 MySQL 时,root 用户还没有设置密码,所以可以直接回车登录。 Connecting to MySQL using a blank password. # 可以使用 VALIDATE PASSWORD COMPONENT 来测试密码并提高安全性,它会检查密码的强度,并只允许用户设置足够安全的密码。 # 然后询问是否要启用 VALIDATE PASSWORD COMPONENT。 VALIDATE PASSWORD COMPONENT can be used to test passwords and improve security. It checks the strength of password and allows the users to set only those passwords which are # 表示是否选择启用 VALIDATE PASSWORD COMPONENT,输入 y 或 Y 表示是,输入其他任意键表示否。 secure enough. Would you like to setup VALIDATE PASSWORD component? -
设置 root 账号密码:
# 有三种级别的密码验证策略 There are three levels of password validation policy: # 低级别的密码验证策略,要求密码长度大于等于 8 个字符。 LOW Length >= 8 # 中级别的密码验证策略,要求密码长度大于等于 8 个字符,且包含数字、大小写字母和特殊字符 MEDIUM Length >= 8, numeric, mixed case, and special characters # 高级别的密码验证策略,要求密码长度大于等于 8 个字符,且包含数字、大小写字母、特殊字符和字典文件, # 字典文件是用于检查密码是否包含常见的单词或模式。(慎选!) STRONG Length >= 8, numeric, mixed case, special characters and dictionary file # 输入 0、1 或 2 来选择密码验证策略的级别,0 表示低级别,1 表示中级别,2 表示高级别 Please enter 0 = LOW, 1 = MEDIUM and 2 = STRONG: 1 # 是否设置root用户密码,输入y并回车或直接回车 Please set the password for root here. # 设置root用户的密码 New password: # 再输入一次你设置的密码 Re-enter new password: Estimated strength of the password: 50 #密码强度 Do you wish to continue with the password provided?(Press y|Y for Yes, any other key for No) : y -
删除匿名用户:默认情况下,MySQL 安装有一个匿名用户,这使得任何人都可以登录 MySQL 而无需创建用户帐户。这仅用于测试目的,并且可以使安装过程更加顺畅。在进入生产环境之前,应该删除这些匿名用户。
By default, a MySQL installation has an anonymous user, allowing anyone to log into MySQL without having to have a user account created for them. This is intended only for testing, and to make the installation go a bit smoother. You should remove them before moving into a production environment. # 是否删除匿名用户,生产环境建议删除,避免匿名登录漏洞 Remove anonymous users? (Press y|Y for Yes, any other key for No) : y Success. -
禁止 root 远程登录:通常情况下,应该只允许 root 用户从 localhost(本地主机)连接,这可以确保没有人能够从网络上猜测 root 用户的密码。
Normally, root should only be allowed to connect from 'localhost'. This ensures that someone cannot guess at the root password from the network. # 是否禁止root远程登录 # 根据自己的需求选择Y/n并回车,建议禁止,仅允许本地登录,提升安全性 Disallow root login remotely? (Press y|Y for Yes, any other key for No) : y Success. -
删除测试数据库:默认情况下,MySQL 带有一个名为 “test” 的数据库,任何人都可以访问它。这也仅用于测试目的,在进入生产环境之前应该将其删除。
By default, MySQL comes with a database named 'test' that anyone can access. This is also intended only for testing, and should be removed before moving into a production environment. # 是否删除test数据库, # test 库无实际用途,删除避免风险 Remove test database and access to it? (Press y|Y for Yes, any other key for No) : y - Dropping test database... Success. - Removing privileges on test database... Success. -
刷新权限:重新加载权限表将确保到目前为止所做的所有更改立即生效。
Reloading the privilege tables will ensure that all changes made so far will take effect immediately. # # 是否重新加载权限表,直接回车使配置立即生效 Reload privilege tables now? (Press y|Y for Yes, any other key for No) : y Success. All done! -
验证:我使用 Navicat 测试一下连接 MySQL ,发现连接成功。
第四章:基本配置
MySQL 用户管理
MySQL 8.0 在用户管理方面做出了重大改进,采用了新的认证插件并修改了授权机制,这显著提高了数据库的安全性,但也使用的用户管理流程与早期版本有所不同。在 MySQL 8.0 中,创建用户和授权操作必须要分开执行。创建新用户的命令语法如下所示:
create user 'userName'@'host' identified by 'password';
其中,userName 参数指定新用户的名称,host 参数定义允许该用户连接的主机地址,password 则是用户的认证密码。host 参数可以设置为特定 IP 地址,localhost 表示极限本地访问,或者 ‘%’ 表示允许从任何主机访问。例如创建一个名为 dbuser、密码为 Secure123!且仅允许从本地访问的用户,因执行如下命令:
create user 'dbuser'@'localhost' identified by 'Secure123!';
创建完成后,可以通过如下命令查看系统中现有的用户列表,确认新用户已成功创建。
use mysql;
select user,host from user;
MySQL 权限配置
权限管理是用户管理的关键环节,MySQL 提供了细粒度的权限控制,可以精确到数据库、表甚至列级别。授权命令的基本语法如下所示:
grant privileges on database.table to 'userName'@'host'
privileges 部分可以指定具体的操作权限,如 select、insert、update等,也可以是 all privileges 表示所有权限。database.table 部分定义权限的作用范围,使用 *.* 表示所有数据库和表。
配置 MySQL 远程访问
在实际应用环境中,经常需要从不同主机访问 MySQL 数据库服务。默认情况下,新创建的用户通常被限制为只能从 localhost 连接。要允许远程访问,需要修改用户的 host 限制:
update user set host='%' where user ='userName';
# 重新加载权限
flush privileges;
除此之外,更规范的做法是使用 grant 语句重新授权,如下所示。这样不仅能修改 host 限制,还能确保权限设置正确。
grant all privileges on *.* to 'userName'@'%' with grant option
权限考虑是配置远程访问时的重中之重,建议限制可连接的主机 IP 范围、使用强密码策略、为不同应用创建专用账户并分配最小必要权限等。MySQL 8.0 默认使用 caching_sha2_password 认证插件,这比旧版的 mysql_native_password 更安全,但在某些旧客户端可能需要额外配置才能兼容。
第五章:常见问题与解决方案
mysql: command not found
Homebrew 路径未加入环境变量引起的,执行以下命令添加环境变量,重启终端:
# Apple Silicon 芯片
echo 'export PATH="/opt/homebrew/bin:$PATH"' >> ~/.zshrc
# Intel 芯片
echo 'export PATH="/usr/local/bin:$PATH"' >> ~/.zshrc
# 生效配置
source ~/.zshrc
端口冲突
如果 MySQL 服务启动失败,可能是因为端口冲突或其他配置问题。可以查看 /usr/local/var/log/mysql/error.log 文件以获取更多详细的错误信息,然后根据错误信息进行相应的解决。
# 查找占用 3306 端口的进程
lsof -i:3306
# 杀死进程(替换 PID 为上一步显示的进程号)
kill -9 PID
# 重启 MySQL 服务
brew services restart mysql
卸载 MySQL
-
步骤1:停止MySQL服务:在卸载 MySQL 之前,可以通过运行以下命令来停止正在运行的MySQL服务。
brew services stop mysql -
步骤2:卸载MySQL:此命令将停止MySQL服务,并确保MySQL进程不再运行。通过 Homebrew,运行以下命令可以简单地卸载MySQL。
brew uninstall mysql -
步骤3:删除相关文件:在卸载MySQL之后,还需要删除相关的文件和目录。
# 删除MySQL的数据目录 rm -rf /usr/local/var/mysql # 删除MySQL的配置文件 rm -rf /usr/local/etc/my.cnf -
步骤4:清理 Homebrew:在卸载 MySQL 后,还可以清理 Homebrew,删除与 MySQL 相关的任何残留文件。
# 删除Homebrew的缓存和未使用的软件包,以释放磁盘空间 brew cleanup -
步骤5:验证MySQL是否已成功卸载:运行以下命令以检查 MySQL 是否仍然存在
mysql --version
总结
使用 Homebrew 安装 MySQL 是一个简单而直接的过程,只需几个命令,就可以在 macOS 上成功安装并配置 MySQL。通过遵循本指南中的步骤,并注意解决可能出现的常见问题,应该能够顺利地在你的 macOS 系统上安装并运行 MySQL。