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

如果你通过 sudo port install 命令正常安装了 MySQL,再通过 sudo port 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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

(day 15)JavaScript学习笔记(对象3)

概述 这是我的学习笔记,记录了JavaScript的学习过程。在写博客的时候我会尽量详尽的记录每个知识点。如果你完全没接触过JavaScript,那么这一系列的学习笔记可能会对你有所帮助。 今天继续学习对象,主要是Object.create()、原型链、修改原型指…

IPv6介绍

IPv6(互联网协议版本6)是用于互联网的最新网络层通信协议,旨在解决IPv4地址耗尽的问题,并提供了多项改进。IPv6于1998年由互联网工程任务组(IETF)标准化,作为IPv4的后继者。下面是IPv6的一些详细…

Linux - 应用层HTTPS、传输层TCP/IP模型中典型协议解析

目录 应用层:自定制协议实例 HTTP协议首行头部空行正文http服务器的搭建 HTTPS协议 传输层UDP协议TCP协议 应用层: 应用层负责应用程序之间的沟通—程序员自己定义数据的组织格式 应用层协议:如何将多个数据对象组织成为一个二进制数据串进行…

【文末附gpt升级4.0方案】英特尔AI PC的局限性是什么

为什么要推出英特尔AI PC? 英特尔AI PC的推出无疑为AIGC(生成式人工智能)的未来发展开启了一扇新的大门。这种新型的计算机平台,通过集成先进的硬件技术和优化的软件算法,为AIGC提供了更为强大和高效的支持&#xff0…

【探讨】基于卷积神经网络深度学习模型的光场显微三维粒子空间分布重建

光场显微粒子图像测速技术通过单光场相机即可实现微尺度三维速度场的测量,但单光场相机角度信息有限,导致粒子重建的轴向分辨率低、重建速度慢。基于此,提出一种基于卷积神经网络深度学习模型的光场显微粒子三维空间分布重建方法,…

说说你对webpack的理解?解决了什么问题?

文章目录 一、背景二、问题三、是什么参考文献 一、背景 Webpack 最初的目标是实现前端项目的模块化,旨在更高效地管理和维护项目中的每一个资源 模块化 最早的时候,我们会通过文件划分的形式实现模块化,也就是将每个功能及其相关状态数据各…

深入理解:蓝绿部署与金丝雀部署

深入理解:蓝绿部署与金丝雀部署 深入理解:蓝绿部署与金丝雀部署蓝绿部署(Blue-Green Deployment)原理优缺点适用场景 金丝雀部署(Canary Deployment)原理优缺点适用场景 总结 深入理解:蓝绿部署…

便捷安全的移动支付方式:扫码登录与支付全面解析

随着移动支付的普及和便利性,扫码登录与支付作为一种快捷安全的支付方式,在各行各业得到了广泛应用。本文将深入探讨扫码登录与支付的原理、优势以及使用场景,帮助读者更好地了解这一便捷的移动支付方式。 ## 扫码登录与支付的原理 扫码登录…

MNN Session 之 CPU 算子(七)

系列文章目录 MNN createFromBuffer(一) MNN createRuntime(二) MNN createSession 之 Schedule(三) MNN createSession 之创建流水线后端(四) MNN Session 之维度计算(五…

Java 程序设计 4 数学函数、字符、字符串

数学函数 Math是final类,在java.lang.Math中,所有数学函数都是静态方法。 Math类中定义了常用的 数学常数 PI : 3.14159265358979323846E : 2.7182818284590452354 方法: 三角函数:sin, cos, tan, asin, acos, atan,toRadians,toD…

mysql分页查询多用GitCode平台

目录 一、在GitCode平台AI搜索结果(这个更优) 二、在百度搜索输入“mysql Java分页查询”的输出结果: 三、推荐的文章 四、GitCode的使用 1)如搜索jdk11可以直接下载jdk11的包 2)搜索开源项目 3)如搜…

爬虫分析-基于Python的空气质量数据分析与实践

概要 本篇文章利用了Python爬虫技术对空气质量网站的数据进行获取,获取之后把数据生成CSV格式的文件,然后再存入数据库方便保存。再从之前24小时的AQI(空气质量指数)的平均值中进行分析,把数据取出来后,对数据进行数据…

大数据分析-基于Python的电影票房信息数据的爬取及分析

概要 现如今,人民群众对物质生活水平的要求已不再局限于衣食住行,对于精神文化有了更多的需求。电影在我国越来越受欢迎,电影业的发展越来越迅猛,为了充分利用互联网技术的发展,掌握电影业的态势,对信息进行…

进程的终止

进程的退出(main函数的退出) main函数的返回值叫做进程的退出码,该退出码表示进程执行的情况。例如:一个函数返回一个值时,我们要知道函数的执行情况,可以去看函数的返回值。 例子: 1 #include…

Redis相关操作高阶篇--集群搭建

Redis相关操作大全一篇全搞定-CSDN博客 Redis集群 是一个由多个主从节点群组成的分布式服务器群,它具有复制、高可用和分片特性。Redis集群不需要seninel哨兵也能完成节点移除和故障转移的功能。需要将每个节点 设置成集群模式,这种集群模式没有中心节…

c++的学习之路:2、入门(1)

一、 C关键字 c的关键字要比c语言要多31个足足有63个,这里我只是了解了下每个有啥作用,具体使用方法以及更多的知识将在后续学习中,慢慢扩展使用,下方表格就是c的63个关键字 asmdoifreturntryautodoubleinlinetypedefdynamic_ca…

LeetCode题练习与总结:接雨水

一、题目 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。 示例 1: 输入:height [0,1,0,2,1,0,1,3,2,1,2,1] 输出:6 解释:上面是由数组 [0,1,0,2,1,0,1,3…

【MySQL】3.1MySQL索引的介绍

目录 一、索引的概念 数据库索引 索引的作用 索引的副作用 索引创建的原则(应用场景) 适合建立索引 二、索引的分类和创建 1.普通索引 创建普通索引 1.1直接创建 1.2修改表结构的方式创建普通索引 1.3创建表时创建普通索引 2.唯一索引 2.1…

如何在Android设备上运行深度网络

返回:OpenCV系列文章目录(持续更新中......) 上一篇: 下一篇: 介绍 在本教程中,您将了解如何使用 OpenCV 深度学习模块在 Android 设备上运行深度学习网络。教程是为 Android Studio 2022.2.1 编写的。…

实时数仓之实时数仓架构(Doris)

目前比较流行的实时数仓架构有两类,其中一类是以Flink+Doris为核心的实时数仓架构方案;另一类是以湖仓一体架构为核心的实时数仓架构方案。本文针对Flink+Doris架构进行介绍,这套架构的特点是组件涉及相对较少,架构简单,实时性更高,且易于Lambda架构实现,Doris本身可以支…