macOS 通过 MacPorts 正确安装 MySQL 同时解决无法连接问题
如果你通过
sudo port install
命令正常安装了 MySQL,再通过sudo port load
命令启动了 MySQL Server,此刻却发现使用 Navicat 之类的 GUI 软件无法连接,始终返回无法连接到 127.0.0.1 服务器。这是一个小坑,因为他默认使用了 Sock 套接字连接方式。
1. 直接使用套接字
如果你并不在意客户端如何连接 MySQL,你可以直接使用套接字的方式。这里以 Navicat 为例:
很简单,在 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
保存后 unload
再 load
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
最后使用 mysql
命令连接数据库后修改密码即可:
mysql -uroot -p
# 回车后粘贴上方获取的密码连接到数据库
在 MySQL 命令行中执行:
# 将 123456 修改为你需要设置的密码
set password = password('123456');# 如需开放来源连接请执行下方两句,否则无需执行
use mysql;
update user set host='%' where user='root';
好了,“导航猫”也能跟以前一样连接了
相关文章:

macOS 通过 MacPorts 正确安装 MySQL 同时解决无法连接问题
如果你通过 sudo port install 命令正常安装了 MySQL,再通过 sudo port load 命令启动了 MySQL Server,此刻却发现使用 Navicat 之类的 GUI 软件无法连接,始终返回无法连接到 127.0.0.1 服务器。这是一个小坑,因为他默认使用了 So…...
Semi-supervised Open-World Object Detection
Semi-supervised Open-World Object Detection 摘要1 介绍2.准备工作提出的SS-OWOD问题设置2.1 基础架构3 方法3.1整体架构摘要 传统的开放世界对象检测(OWOD)问题设置首先区分已知和未知类别,然后在后续任务中引入标签时逐步学习未知对象。然而,当前的OWOD公式在增量学习…...
C语言实现射击小游戏
以下是一个简单的C语言射击小游戏的实现示例。这个游戏中,玩家控制一个飞船,敌方飞船会随机出现并向玩家移动。如果玩家的飞船与敌方飞船相撞,玩家就失去一条生命,代码如下: #include <stdio.h> #include <s…...
c++11 标准模板(STL)本地化库 - std::islower(std::locale) 检查字符是否被本地环境分类为小写
本地化库 本地环境设施包含字符分类和字符串校对、数值、货币及日期/时间格式化和分析,以及消息取得的国际化支持。本地环境设置控制流 I/O 、正则表达式库和 C 标准库的其他组件的行为。 检查字符是否被本地环境分类为小写 std::islower(std::locale) template&…...

粘度指数改进剂市场需求增长 为润滑油添加剂细分产品
粘度指数改进剂市场需求增长 为润滑油添加剂细分产品 粘度指数改进剂是一种油溶性高分子聚合物,主要用于提高润滑油粘度以及粘度指数。粘度指数改进剂具有稠化能力强、抗磨性好、热稳定性好等优势,可添加于液压油、内燃机油以及齿轮油等油品中。 …...

LabVIEW柴油机安保监控系统
LabVIEW柴油机安保监控系统 随着航运业的快速发展,确保船舶柴油机的安全稳定运行变得尤为重要。船舶柴油机故障不仅会导致重大的经济损失,还可能危及人员安全和环境。设计并开发了一套基于LabVIEW平台的柴油机安保监控系统,旨在通过实时监控…...

实测国内AI大模型问答效果
随着ChatGPT热度的攀升,越来越多的公司也相继推出了自己的AI大模型。按照github工程awesome-LLMs-In-China所列举的,现如今国内AI大模型已达243个,比较著名的有文心一言、通义千问等。各大应用也开始内置AI玩法,如抖音的AI特效。下…...
不得不等待的无奈 -《葡萄成熟时》
恋上一个人便是撒下一颗葡萄种子,你可能会坚持,但不一定会结果,收获(在一起)。 更有可能得到的是枯枝烂叶(ta的离开)。 就算你再努力,再用心去栽培(为ta付出࿰…...
【Python】Python中装饰器和魔法方法的区别
在Python中,装饰器(Decorators)和魔法方法(Magic Methods)是两种不同的高级特性,分别服务于不同的目的。 装饰器 (Decorators) 装饰器是一种强大的工具,它可以修改或增强函数、方法或类的行为…...
【React】创建你的第一个React组件
要使用React创建你的第一个组件,首先确保你已经安装了Node.js和npm(Node包管理器)。然后,你可以通过npm安装Create React App这个官方支持的脚手架工具来快速生成一个新的React应用项目,该项目包含了React、ReactDOM、…...

五分钟搞懂MySQL索引下推
什么是索引下推 索引下推(Index Condition Pushdown,简称ICP),是MySQL5.6版本的新特性,它能减少回表查询次数,提高查询效率。 索引下推优化的原理 我们先简单了解一下MySQL大概的架构: MySQL服务层负责SQL语法解析、…...
【数据库】SQL如何添加数据
在SQL中,您可以使用INSERT INTO语句来添加数据到数据库表中。以下是一些基本的示例和解释: 1.插入完整行数据: 如果您想为表中的每一列都插入数据,那么可以不必指定列名。但是,您需要为每一列都提供数据,并…...

ClickHouse01-什么是ClickHouse
什么是ClickHouse? 关于发展历史存在的优势与劣势什么是它风靡的原因? 什么是ClickHouse? 官方给出的回答是,它是一个高性能、列式存储、基于SQL、供在线分析处理的数据库管理系统 当然这边不得不提到OLAP(Online Analytical Pr…...
使用Docker搭建Nascab
使用Docker来部署Nascab能够让这个过程变得更加灵活和便捷,因为Docker可以在隔离的环境中运行应用程序,简化了部署和配置的复杂性。 使用Docker CLI部署Nascab docker run -d \ --name nascab \ -p 18080:80 \ -p 18443:443 \ -p 18090:90 \ -p 18021:…...

Elasticsearch8.x版本Java客户端Elasticsearch Java API 如何并发修改
前言 并发控制,一般有两种方案,悲观锁和乐观锁,其中悲观锁是默认每次更新操作肯定会冲突,所以每次操作都要先获取锁,操作完毕再释放锁,适用于写比较多的场景。而乐观锁是默认每次更新操作都不会冲突&#…...

Docker 安装 Skywalking以及UI界面
关于Skywalking 在现代分布式系统架构中,应用性能监控(Application Performance Monitoring, APM)扮演着至关重要的角色。本文将聚焦于一款备受瞩目的开源APM工具——Apache Skywalking,通过对其功能特性和工作原理的详细介绍&am…...

mysql 空间查询 多边形内的点
数据库查询 # 1新增空间point类型坐标字段 ALTER TABLE gaoxin_isdp.business_master ADD COLUMN location2 point NULL AFTER location;# 2从原字段更新点位字段,原字段poi1是字符串106.474596,29.464360 UPDATE business_master SET location POINT(substr(poi…...
实际开发中,git版本切换操作
业务场景 客户环境需要部署当前分支的之前的一个版本代码,所以需要从当前的commit切换到之前的commit 版本切换步骤 查看版本提交日志 $ git reflog切换版本 git reset --hard 七位数的版本id在切换后的版本上更改代码后 执行完暂存 git commit 把回退后的代码提…...

线程池实现“线程复用”的原理
线程池实现“线程复用”的原理 学习线程复用的原理,以及对线程池的 execute 这个非常重要的方法进行源码解析。 线程复用原理 我们知道线程池会使用固定数量或可变数量的线程来执行任务,但无论是固定数量或可变数量的线程,其线程数量都远远…...

[Linux开发工具]——make/Makefile的使用
Linux项目自动化构建工具——make/Makefile 前言:一、背景二、认识make和makefile2.1 创建Makefile文件2.2 创建test.c文件,并打开Makefile2.3 我们想要test.c生成test文件2.4 编译2.5 清理可执行文件 三、理解依赖关系和依赖方法3.1 依赖关系3.2 依赖方…...

微服务商城-商品微服务
数据表 CREATE TABLE product (id bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 商品id,cateid smallint(6) UNSIGNED NOT NULL DEFAULT 0 COMMENT 类别Id,name varchar(100) NOT NULL DEFAULT COMMENT 商品名称,subtitle varchar(200) NOT NULL DEFAULT COMMENT 商…...
拉力测试cuda pytorch 把 4070显卡拉满
import torch import timedef stress_test_gpu(matrix_size16384, duration300):"""对GPU进行压力测试,通过持续的矩阵乘法来最大化GPU利用率参数:matrix_size: 矩阵维度大小,增大可提高计算复杂度duration: 测试持续时间(秒&…...

springboot整合VUE之在线教育管理系统简介
可以学习到的技能 学会常用技术栈的使用 独立开发项目 学会前端的开发流程 学会后端的开发流程 学会数据库的设计 学会前后端接口调用方式 学会多模块之间的关联 学会数据的处理 适用人群 在校学生,小白用户,想学习知识的 有点基础,想要通过项…...

【从零学习JVM|第三篇】类的生命周期(高频面试题)
前言: 在Java编程中,类的生命周期是指类从被加载到内存中开始,到被卸载出内存为止的整个过程。了解类的生命周期对于理解Java程序的运行机制以及性能优化非常重要。本文会深入探寻类的生命周期,让读者对此有深刻印象。 目录 …...

[免费]微信小程序问卷调查系统(SpringBoot后端+Vue管理端)【论文+源码+SQL脚本】
大家好,我是java1234_小锋老师,看到一个不错的微信小程序问卷调查系统(SpringBoot后端Vue管理端)【论文源码SQL脚本】,分享下哈。 项目视频演示 【免费】微信小程序问卷调查系统(SpringBoot后端Vue管理端) Java毕业设计_哔哩哔哩_bilibili 项…...
[特殊字符] 手撸 Redis 互斥锁那些坑
📖 手撸 Redis 互斥锁那些坑 最近搞业务遇到高并发下同一个 key 的互斥操作,想实现分布式环境下的互斥锁。于是私下顺手手撸了个基于 Redis 的简单互斥锁,也顺便跟 Redisson 的 RLock 机制对比了下,记录一波,别踩我踩过…...
JS红宝书笔记 - 3.3 变量
要定义变量,可以使用var操作符,后跟变量名 ES实现变量初始化,因此可以同时定义变量并设置它的值 使用var操作符定义的变量会成为包含它的函数的局部变量。 在函数内定义变量时省略var操作符,可以创建一个全局变量 如果需要定义…...

【java面试】微服务篇
【java面试】微服务篇 一、总体框架二、Springcloud(一)Springcloud五大组件(二)服务注册和发现1、Eureka2、Nacos (三)负载均衡1、Ribbon负载均衡流程2、Ribbon负载均衡策略3、自定义负载均衡策略4、总结 …...
深度解析云存储:概念、架构与应用实践
在数据爆炸式增长的时代,传统本地存储因容量限制、管理复杂等问题,已难以满足企业和个人的需求。云存储凭借灵活扩展、便捷访问等特性,成为数据存储领域的主流解决方案。从个人照片备份到企业核心数据管理,云存储正重塑数据存储与…...
统计学(第8版)——统计抽样学习笔记(考试用)
一、统计抽样的核心内容与问题 研究内容 从总体中科学抽取样本的方法利用样本数据推断总体特征(均值、比率、总量)控制抽样误差与非抽样误差 解决的核心问题 在成本约束下,用少量样本准确推断总体特征量化估计结果的可靠性(置…...