这是什么原因呢,网上找了好多方法都没解决,是不是权限有问题,我看了进程,mysql 不是在 root 账户上的,有没有大佬解答一下

如果是测试用的,其实可以起 docker 。

为什么不用 docker 跑啊,挂载到宿主机,方便得很。

root 密码不对

开启安全模式,也没用

我试试

搜“修改 MySQL root 密码”,应该是起个 mysqld skip 之类的然后 mysql 空密码进去改

这事跟 docker 就没有任何关系

难道用了 docker 就可以不必学习 mysql 权限控制相关知识了?

首次安装后,可能会生成临时密码,去 log 里面找。然后首次登录进去后需要修改 root 密码

这个 root 是 mysql 的 root 账号, 不是系统的 root
另外根据 Mysql 的不同版本, 有些新版为了安全起见,默认 root 密码是随机生成的,需要去 log 里找。
如果找不到, 可以去网上搜一下 找回 mysql root 密码的操作。 大致是用--skip-grant-table 参数 手动启 mysqld ,然后直接用 mysql 连接。

Homebrew 的 MySQL 和 MariaDB 默认 root 没密码,但都开了用户账户保护。必须 sudo mysql -uroot 才能登入。TCP 登入对 root 账户也是设限的,要生成其他账户才能通过 TCP 登陆。

MariaDB 策略稍稍不同,会初始化的时候会生成一个和安装用户同名的高权限账户,所以可以直接用 mysql 命令(不加用户名)登入。

用 docker 就不用管这些权限的问题了,起了容器直接就连了。

都已经-uroot 了,为啥要 sudo ?

docker 已经成了你们这些懒于学习的人的遮羞布了

#13 不是兄弟,配个 mysql 权限有啥懒人不懒人,你这懒人的评判标准着实有点

你用 docker 就能保证不需要配置就能进去?
那如果有人把 image 替换掉呢,替换成一个带密码的,
你都没学过啊!你又当如何应对?

虽然我没有试过 sudo mysql -uroot,但是你的疑问就说明你没有理解。

sudo 是对 mysql 命令生效,可简单理解为用系统 root 的身份执行 mysql ,而 -uroot 是使用 mysql 的 root 账号登录。不是一回事儿啊。

恰相反,我这么反问就是想说明是你没理解

mysql 的权限系统并不在乎是谁执行客户端,而在乎客户端在 3306 的通信里出示的用户名。
mysql -uroot 并不需要 sudo

你那种 sudo 的作风倒是适合 microsoft sqlserver 的 NTLM 认证方式
你都还没试过,自己瞎猜,还出来教人

我的评论不针对命令本身,只针对 sudo 和 -uroot, 这俩没有任何关系。

你 12 楼的言论,『都已经-uroot 了,为啥要 sudo 』,明显认为二者存在某种关联,事实上这两者没什么关系。

你重装一遍,看 brew 的执行日志,有提示的

对啊,事实上没什么关联

教唆别人 sudo 的是
不是我啊

另外 mysql 命令,默认使用的是 unix domain socket 通信, 此时受文件权限影响,sudo 可能是有必要的。你说的 3306 端口,那意思是百分百使用 TCP 套接字了?明显你是不对的。

公共服务的 sock 文件都是 666 的。

3306 这个是我的问题。我应该说“在 mysql 的通信协议里出示的用户名”

#21 教别人使用 sudo 没有问题,有问题的是你。

教唆 sudo 显然是有错的,首先混淆了执行 mysql 客户端的身份和 mysql 通信协议里的身份
其次会导致.mysql_history 文件的路径不对

sock 文件的权限不需要考虑,都是 666

#23 公共服务的 sock 文件都是 666 的。这句话不完全正确。没有这个约定,只是通常比较宽松。也只是通常。

你再读一读 在 #10 的发言。一点毛病都没有。

嗯,你说的对

我这里遭遇奇怪现象了。我看了看我自己的,sock 文件 0777 ,但是 systemd show 显示 UMask 才 0022
我先研究研究我自己的烂摊子去吧

教唆 sudo 一定是错的。我坚持

brew 装的 mysql 确实挺神秘的, 我几个月前想给家里的 kodi 配置 mysql 同步也搞了好久.

mysql5.x 和 8.+ 密码加密方式不一样导致的吧

旧数据升级才会发生加密方式不同的问题
这里问的应该是新装

不是,你们用 brew 装完包都不看提示的吗? mysql 装完会提示

We've installed your MySQL database without a root password. To secure it run:
mysql_secure_installation

MySQL is configured to only allow connections from localhost by default

To connect run:
mysql -uroot

事后忘记了,用 brew info xxx 也能看到。

用 mysql_secure_installation 命令设置一下密码就行了啊。

brew 不一定是万能的/一键的,很多包装完都要根据提示初始化或者设置一下权限、加一下环境变量之类的。