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

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

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

相关文章

Linux创建软连接后,无法直接调用的原因和解决办法

我自己遇到的问题: 进入到主目录: cd 创建一个main软连接后: ln -s /home/user01/demo01.py main 执行: main 没反应。 试了下发现是调用方法的问题,因为main是主目录下的一个软链接,所以调用方式应该是&…

linux 串口通讯模板

RAW模式与非RAW模式 RAW 模式: 简单的来说,就是发送端发动的二进制码原封不动的被接收端接收。 若干年前使用Windows下的串口调试助手对单片机串口进行调试就是使用的 RAW 模式, 单片机发送的数据被原封不动的发送给 PC 端,PC 端…

零代码编程:用kimichat将srt字幕文件进行批量转换合并

文件夹里面有多个srt字幕文件,借助kimichat可以很方便的对其进行批量合并。 在kimichat中输入提示词: 你是一个Python编程专家,写一个Python脚本,完成一个处理整理文档内容的任务,具体步骤如下: 打开文件…

更新数据库表中的数据

目录 update 加上各种限制条件 update update 表名set 列名1xx,列名2xx 指定更新某列数据如果不添加where子句,则为全列更新 也可以在原有基础上更新: 注意,mysql语法里不支持,必须是列名列名数值 加上各种限制条件 比如加上order by子句,where子句,limit等 这些条件对于up…

【FLOOD FILL专题】【蓝桥杯备考训练】:扫雷、动态网格、走迷宫、画图、山峰和山谷【已更新完成】

目录 1、扫雷(Google Kickstart2014 Round C Problem A) 2、动态网格(Google Kickstart2015 Round D Problem A) 3、走迷宫(模板) 4、画图(第六次CCF计算机软件能力认证) 5、山…

政安晨:【深度学习实践】【使用 TensorFlow 和 Keras 为结构化数据构建和训练神经网络】(四)—— 过拟合和欠拟合

政安晨的个人主页:政安晨 欢迎 👍点赞✍评论⭐收藏 收录专栏: 政安晨的机器学习笔记 希望政安晨的博客能够对您有所裨益,如有不足之处,欢迎在评论区提出指正! 通过增加容量或提前停止来提高性能。 在深度学习中&#…

2024年奥莱利科技趋势报告解析

2024年O’Reilly技术趋势报告解读 概述 在快速发展的技术领域,跟上最新趋势对行业内的任何人来说都至关重要。2024年O’Reilly技术趋势报告在此方面提供了关键的指导,全面概述了最重要的技术进步和模式。该年度报告基于O’Reilly著名在线学习平台280万…

C#对于文件中的文件名判断问题

C#中对于文件名的判断问题,我们使用bool值进行值的传递,首先我们使用内置方法进行文件字符串匹配的bool值回传,我们打印出文件名以及相对应的bool,即可知道文件名是否真正生效 bool isHave fileName.Contains("Hello"…

shell和linux的关系

Shell 和 Linux 之间存在密切的关系,但它们并不是同一个东西。让我们分别了解一下它们: Linux: Linux 是一个自由和开放源代码的类UNIX操作系统。 Linux 的内核由林纳斯托瓦兹(Linus Torvalds)于1991年首次发布&…

代码学习记录22--回溯算法第三天

随想录日记part22 t i m e : time: time: 2024.03.17 主要内容:今天主要是结合类型的题目加深对回溯算法的理解:1.组合总和;2.组合总和 ;3.分割回文串。 39. 组合总和 40.组合总和II131.分割回文串 Topic1组合总和 题…

【Node.js从基础到高级运用】十四、Node.js 错误处理与日志记录

引言 在这篇博客文章中,我们将深入探讨Node.js中的错误处理和日志记录的最佳实践。我们会了解如何在Node.js应用程序中有效地捕获和处理错误,并利用日志库如morgan来记录应用程序的活动和错误信息。 第1部分:Node.js中的错误处理 同步代码中…

推荐的Kubernetes 学习资料

官方文档: Kubernetes 官方文档:https://kubernetes.io/docs/Kubernetes 教程:https://kubernetes.io/docs/tutorials/ 书籍: Kubernetes in Action,Marko Luksa 著Kubernetes Up and Running,Kelsey Hi…

Spring AI Embeddings 和 Vector 入门

在前面 Spring AI Chat 简单示例 中介绍了 Chat 的基本用法,本文在此基础(主要是pom.xml)上继续探索 Embedding 和 Vector。 官方文档: embeddings: https://docs.spring.io/spring-ai/reference/api/embeddings/openai-embedding…

断点重训教程:如何有效地保护深度学习模型训练进度

在深度学习领域,长时间训练是常见的需求,然而,在训练过程中可能会面临各种意外情况,比如计算机故障、断电等,这些意外情况可能导致训练过程中断,造成已经投入的时间和资源的浪费。为了应对这种情况&#xf…

「Linux系列」有关Shell数组/运算符的故事

文章目录 一、Shell 数组运用1. 定义数组2. 访问数组元素3. 获取数组长度4. 遍历数组5. 追加元素到数组6. 删除数组元素7. 数组切片8. 综合示例:统计数组中元素的个数9. 关联数组(Bash 4.0及以上版本) 二、Shell 基本运算符1. 数值运算符2. 字…

Avue框架实现图表的基本知识 | 附Demo(全)

目录 前言1. 柱状图2. 折线图3. 饼图4. 刻度盘6. 仪表盘7. 象形图8. 彩蛋8.1 饼图8.2 柱状图8.3 折线图8.4 温度仪表盘8.5 进度条 前言 以下Demo,作为初学者来说,会相应给出一些代码注释,可相应选择你所想要的款式 对于以下Demo&#xff0c…

GStreamer简单看看

主要是现在弄摄像头,要用到这东西。所以学学。 最权威主页:GStreamer: open source multimedia framework 大概看了下,好像命令也不难。 gst-launch-1.0 v4l2src device/dev/video0 ! video/x-raw,formatYUY2,width640,height480,framerat…

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

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

Java 面试宝典:volatile 的使用场景有哪些?

大家好,我是大明哥,一个专注「死磕 Java」系列创作的硬核程序员。 本文已收录到我的技术网站:https://skjava.com。有全网最优质的系列文章、Java 全栈技术文档以及大厂完整面经 回答 volatile 是一种轻量级的同步机制,它能保证共…

Batch Normalization(批量归一化)和 Layer Normalization(层归一化)

Batch Normalization(批量归一化)和 Layer Normalization(层归一化)都是深度学习中用于改善网络训练过程的归一化技术。尽管它们的目标相似,即通过规范化中间层的激活值来加速训练过程并提高性能,但它们在细节上有所不同。 Batch Normalization (批量归一化) Batch Nor…