当前位置:   article > 正文

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

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
  • 1
  • 2

我们再看看 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
  • 1
  • 2
  • 3
  • 4

回到路径问题,在没有做其它配置的情况下,因为 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 文件就行了。

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

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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

保存后 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
  • 1

然后删除这些目录:

  • /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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

这里建议 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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

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

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

sudo mkdir /opt/local/var/log/mysql57
sudo chown _mysql:_mysql /opt/local/var/log/mysql57
  • 1
  • 2

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

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

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

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

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

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

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

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

在 MySQL 命令行中执行:

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

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

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

success_connect

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/303267?site
推荐阅读
相关标签
  

闽ICP备14008679号