macOS 通过 MacPorts 正确安装 MySQL 同时解决无法连接问题

news2024/9/22 17:36:04

如果你通过 sudo port install 命令正常安装了 MySQL,再通过 sudo load 命令启动了 MySQL Server,此刻却发现使用 Navicat 之类的 GUI 软件无法连接,始终返回无法连接到 127.0.0.1 服务器。这是一个小坑,因为他默认使用了 Sock 套接字连接方式。

1. 直接使用套接字

如果你并不在意客户端如何连接 MySQL,你可以直接使用套接字的方式。这里以 Navicat 为例:
use_socket_file
很简单,在 Navicat 的高级选项中勾选 使用套接字文件,填写:/opt/local/var/run/mysql57/mysqld.sock 路径即可(版本不同请将中间的 57 修改为你所安装的版本)

当然,你 仍然 需要回到顶部的常规页中 输入密码

为什么是这个路径?

首先我们来看看安装成功后的提示:

On activation if no /opt/local/etc/mysql57/my.cnf file exists one will be created
which loads /opt/local/etc/mysql57/macports-default.cnf.

If a /opt/local/etc/mysql57/my.cnf file exists MacPorts does not
touch it and any changes you make to /opt/local/etc/mysql57/my.cnf
will be preserved (e.g., during port upgrades, deactivations or activations).

/opt/local/etc/mysql57/my.cnf is a good place to customize your mysql57 installation.

翻译:

在激活时如果不存在 /opt/local/etc/mysql57/my.cnf 文件,将创建一个加载 /opt/local/etc/mysql57/macports-default.cnf 文件的默认文件(也就是默认的 my.cnf)。

MacPorts 不会修改已存在的 /opt/local/etc/mysql57/my.cnf 文件。你对 /opt/local/etc/mysql57/my.cnf 修改的任何配置都会被保留(即便是使用 port 命令更新 MySQL、停用或激活)。

总的来说,通过 /opt/local/etc/mysql57/my.cnf 进行配置就行啦。

在安装后未做任何配置的情况下,my.cnf 文件里仅有一句 包含(加载) macports-default.cnf 的语句:

# 注意此处的 !include 并非是不包含(不加载)的意思
!include /opt/local/etc/mysql57/macports-default.cnf

我们再看看 macports-default.cnf 文件:

[mysqld]
# skip-networking so multiple mysql server ports can be loaded without each competing for port 3306.
# skip-networking 用于加载多个 mysql 服务器端口,防止每个服务器都去使用 3306(这里指避免端口冲突)
skip-networking

回到路径问题,在没有做其它配置的情况下,因为 macports-default.cnf 中默认使用了套接字,即 skip-networking,然后在安装阶段会根据版本创建一个 mysql[Version] 的文件夹在 /opt/local/var/run 下,例如 /opt/local/var/run/mysql57

mysqld 进程,即 MySQL Server 启动后会在该目录下写入一个 mysqld.sock.lock 文件
当然还有 mysqld.sock,不过通过 Finder 是看不到的。所以这里连接这个 mysqld.sock 文件就行了。

因为套接字是用于本机连接到,如果数据库不需要局域网或外网访问,直接使用套接字也是一个不错的方式。

2. 使用传统 TCP/IP 连接

传统 TCP/IP 也就是 IP:Port 的方式了,即默认的 127.0.0.1:3306

通过上方使用套接字连接,我们了解到其实 my.cnf 文件是对 macports-default.cnf 文件的覆写(因为 !include 写在最顶部

所以解决方法非常简单,只需要在 my.cnf 中加入下方配置即可:

# Use default MacPorts settings
!include /opt/local/etc/mysql57/macports-default.cnf

[mysqld]
# 覆盖原有配置
skip-networking = OFF
# 自定义端口,如不配置将使用默认 3306
port = 3306

保存后 unloadload MySQL 服务即可

3. 初始化数据库以及启动异常处理

如果你通过 port 重新安装过 MySQL,且手动删除过下方这三个目录里的 mysql[Version] 相关文件夹,你可能会遇到一些问题而需要重新初始化数据库

  • /opt/local/var/db
  • /opt/local/var/log
  • /opt/local/var/run

老生常谈的问题,数据无价,注意备份!备份!备份!

此处仍然以 MySQL 5.7 版本举例,在确保备份以及可以重新初始化 的情况下,首先停止 MySQL 服务:

sudo port unload mysql57-server

然后删除这些目录:

  • /opt/local/var/db/mysql57
  • /opt/local/var/db/mysql57-files
  • /opt/local/var/db/mysql57-keyring
  • /opt/local/var/log/mysql57
  • /opt/local/var/run/mysql57

开始初始化工作,其中部分目录需要手动创建,这些目录如果不存在会导致启动失败(当然还需要将所有者赋予 _mysql):

sudo mkdir /opt/local/var/db/mysql57-files
sudo chown _mysql:_mysql /opt/local/var/db/mysql57-files
sudo mkdir /opt/local/var/db/mysql57-keyring
sudo chown _mysql:_mysql /opt/local/var/db/mysql57-keyring
sudo mkdir /opt/local/var/run/mysql57
sudo chown _mysql:_mysql /opt/local/var/run/mysql57

这里建议 my.cnf 参考如下配置,其功能是打开慢查询日志写入功能以及错误日志的路径指定:

# Use default MacPorts settings
!include /opt/local/etc/mysql57/macports-default.cnf

[mysqld]
skip-networking = OFF
port = 3306

# Slow query config
slow_query_log = ON
slow_query_log_file = /opt/local/var/log/mysql57/slow.log
long_query_time = 1
log_error_verbosity = 2

# Error log
log_error = /opt/local/var/log/mysql57/mysqld.log

如果不配置日志相关路径,则错误日志等文件将会写入到同数据 /opt/local/var/db/mysql57 目录下

所以这里我们还需要手动创建一下日志目录:

sudo mkdir /opt/local/var/log/mysql57
sudo chown _mysql:_mysql /opt/local/var/log/mysql57

目录准备完成后就可以初始化数据库了:

sudo /opt/local/lib/mysql57/bin/mysqld --initialize --user=_mysql
sudo port load mysql57-server

如果版本一致,应该只有这么一句提示:

--->  Loading startupitem 'mysql57-server' for mysql57-server

如果你参考了我上方的 my.cnf 配置,那么 获取初始化密码 的命令也是一样的:

sudo cat /opt/local/var/log/mysql57/mysqld.log

cat_password
最后使用 mysql 命令连接数据库后修改密码即可:

mysql -uroot -p
# 回车后粘贴上方获取的密码连接到数据库

在 MySQL 命令行中执行:

# 将 123456 修改为你需要设置的密码
set password = password('123456');

# 如需开放来源连接请执行下方两句,否则无需执行
use mysql;
update user set host='%' where user='root';

好了,“导航猫”也能跟以前一样连接了

success_connect

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1527314.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

初级爬虫实战——哥伦比亚大学新闻

文章目录 发现宝藏一、 目标二、简单分析网页1. 寻找所有新闻2. 分析模块、版面和文章 三、爬取新闻1. 爬取模块2. 爬取版面3. 爬取文章 四、完整代码五、效果展示 发现宝藏 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不…

docker小白第十三天-compose容器编排

docker-compose容器编排 Docker-Compose是Docker官方的开源项目,负责实现对Docker容器集群的快速编排。Compose是Docker公司推出的一个工具软件,可以管理多个Docker容器组成一个应用。你需要定义一个YAML格式的配置文件docker-compose.yml,写…

信驰达车规蓝牙模块RF-BM-2642QB1I赋能汽车T-Box

近年来,随着人们对数据传输需求的增长,传统网络布线的通讯方式逐渐显现出满足不了的局限性,与此同时,各种无线传输技术迅速发展。汽车工业同样需要无线通讯技术,但红外技术、802.11、HomeRF等技术在汽车工业中存在一定…

ASP.NET通过Appliaction和Session统计在人数和历史访问量

目录 背景: Appliaction: Session: 过程: 数据库: Application_Start: Session_Start: Session_End: Application_End: 背景: 事件何时激发Application_Start在调用当前应用…

学习笔记Day8:GEO数据挖掘-基因表达芯片

GEO数据挖掘 数据库:GEO、NHANCE、TCGA、ICGC、CCLE、SEER等 数据类型:基因表达芯片、转录组、单细胞、突变、甲基化、拷贝数变异等等 常见图表 表达矩阵 一行为一个基因,一列为一个样本,内容是基因表达量。 热图 输入数据…

AJAX——综合案例

1 Bootstrap弹框 功能&#xff1a;不离开当前页面&#xff0c;显示单独内容&#xff0c;供用户操作 步骤&#xff1a; 引入bootstrap.css和bootstrap.js准备弹框标签&#xff0c;确认结构通过自定义属性&#xff0c;控制弹框的显示和隐藏 <!DOCTYPE html> <html la…

量子计算+HPC!ORNL与Riverlane、Rigetti合作研发

内容来源&#xff1a;量子前哨&#xff08;ID&#xff1a;Qforepost&#xff09; 编辑丨慕一 编译/排版丨沛贤 1000字丨8分钟阅读 近日&#xff0c;英国量子计算初创公司Riverlane和美国量子计算公司Rigetti Computing宣布将参与由美国能源部橡树岭国家实验室&#xff08;OR…

扇区架次数动态展示

打开前端Vue项目&#xff1a;kongguan_web&#xff0c;完成前端src/components/echart/SectorFlightChart.vue页面设计&#xff0c;使用ECharts插件实现柱状图和饼状图 在src/components目录下创建echart目录&#xff0c;完成src/components/echart/SectorFlightChart.vue 的页…

【重温设计模式】观察者模式及其Java示例

观察者模式的概念和原理 在编程世界中&#xff0c;设计模式作为一种解决问题的策略&#xff0c;它的存在就如同人类语言中的成语&#xff0c;是一种经过时间考验的有效解决方案。 观察者模式就是其中一种重要的设计模式&#xff0c;它在很多场景中都有着广泛的应用。那么&…

自然语言处理: 第十七章RAG的评估技术RAGAS

论文地址&#xff1a;[2309.15217] RAGAS: Automated Evaluation of Retrieval Augmented Generation (arxiv.org) 项目地址: explodinggradients/ragas: Evaluation framework for your Retrieval Augmented Generation (RAG) pipelines (github.com) 上一篇文章主要介绍了R…

【论文阅读笔记】Split frequency attention network for single image deraining

1.论文介绍 Split frequency attention network for single image deraining 用于单幅图像去噪的分频注意力网络 Paper Code 2023年 SIVP 2.摘要 雨纹对图像质量的影响极大&#xff0c;基于数据驱动的单图像去噪方法不断发展并取得了巨大的成功。然而&#xff0c;传统的卷积…

7大结构型设计模式

结构性设计模式是软件工程中常用的一类设计模式。 作用&#xff1a;主要用于处理类或对象之间的组合以实现更灵活、可扩展和可维护的代码结构。 这些模式通常涉及到类和对象之间的静态组合关系&#xff0c;以及如何将它们组织在一起以满足特定的设计目标。 结构型模式有&#x…

git设置别名及查看别名

设置别名 git config --global alias.lg "具体的参数"git config --global alias.lg "log --dateformat:%Y/%m/%d %H:%M:%S --prettyformat:%C(yellow)%h%C(reset) %C(bold blue)%ad%C(reset) %an %C(green)%s%C(reset)"查看别名 git config --list | fi…

新能源汽车小三电系统

小三电系统 新能源电动汽车的"小三电"系统&#xff0c;一般指车载充电机(OBC)、车载 DC/DC 变换器&#xff0c;和高压直流配电盒(PDU)。一辆纯电动汽车一般配备一台OBC 和一台车载 DC/DC 变换器。OBC将外部输入的交流电转化为直流电输出给电池&#xff0c;DC/DC衔接…

数据可视化实战(二)

将每个城市在每个月份平均PM2.5绘制成折线图 import pandas as pd import matplotlib.pyplot as plt df pd.read_excel(./PM2.5.xlsx)display(df.head(10)) df.shape # (161630, 15)城市年份月份日期小时季节PM2.5露点湿度压强温度风向累计风速降水量累计降水量0北京2010112…

总结mac下解决matplotlib中文显示问题的几种方法

一、前言&#xff1a; 使⽤matplotlib画图时&#xff0c;由于matplotlib默认没有中⽂&#xff0c;显⽰中文时会出现空⽩⼩⽅块。 二、方法&#xff1a; 2.1 matplotlib中使用SimHei字体 1&#xff09;进入终端后查看matplotlib的字体路径&#xff1a; $ python >>&g…

机器学习-04-分类算法-04-支持向量机SVM

总结 本系列是机器学习课程的系列课程&#xff0c;主要介绍机器学习中分类算法&#xff0c;本篇为分类算法与SVM算法部分。 本门课程的目标 完成一个特定行业的算法应用全过程&#xff1a; 懂业务会选择合适的算法数据处理算法训练算法调优算法融合 算法评估持续调优工程化…

Qt5.14.2 深入理解Qt多线程编程,掌握线程池架构实现高效并发

在高并发的软件系统中&#xff0c;多线程编程是解决性能瓶颈和提高系统吞吐量的有效手段。作为跨平台的应用程序开发框架&#xff0c;Qt为我们提供了强大的多线程支持。本文将深入探讨Qt多线程编程的实现细节&#xff0c;并介绍线程池的设计思想&#xff0c;帮助读者彻底掌握Qt…

Pytorch常用的函数(七)空洞卷积详解

Pytorch常用的函数(七)空洞卷积详解 1 初识空洞卷积 1.1 空洞卷积与语义分割任务 语义分割面临的困境&#xff1a; 与检测模型类似&#xff0c;语义分割模型也是建立是分类模型基础上的&#xff0c;即利用CNN网络来提取特征进行分类。在CNN分类模型中&#xff0c;一般情况下…

鸿蒙开发 一 (一)、框架了解

一、UI框架 开发范式名称 语言生态 UI更新方式 适用场景 适用人群 声明式开发范式 ArkTS语言 数据驱动更新 复杂度较大、团队合作度较高的程序 移动系统应用开发人员、系统应用开发人员 类Web开发范式 JS语言 数据驱动更新 界面较为简单的程序应用和卡片 Web前端…