这是什么原因呢,网上找了好多方法都没解决,是不是权限有问题,我看了进程,mysql 不是在 root 账户上的,有没有大佬解答一下
![]() |
1
quqiu 41 天前
如果是测试用的,其实可以起 docker 。
|
2
hexiaowu1993 41 天前
为什么不用 docker 跑啊,挂载到宿主机,方便得很。
|
3
263 41 天前
root 密码不对
|
5
KaneW95 OP @hexiaowu1993 我试试
|
6
neutrino 41 天前 via Android
搜“修改 MySQL root 密码”,应该是起个 mysqld skip 之类的然后 mysql 空密码进去改
|
7
julyclyde 41 天前 ![]() |
8
263 41 天前 ![]() 首次安装后,可能会生成临时密码,去 log 里面找。然后首次登录进去后需要修改 root 密码
|
9
hefish 41 天前
这个 root 是 mysql 的 root 账号, 不是系统的 root
另外根据 Mysql 的不同版本, 有些新版为了安全起见,默认 root 密码是随机生成的,需要去 log 里找。 如果找不到, 可以去网上搜一下 找回 mysql root 密码的操作。 大致是用--skip-grant-table 参数 手动启 mysqld ,然后直接用 mysql 连接。 |
10
billgong 41 天前
Homebrew 的 MySQL 和 MariaDB 默认 root 没密码,但都开了用户账户保护。必须 `sudo mysql -uroot` 才能登入。TCP 登入对 root 账户也是设限的,要生成其他账户才能通过 TCP 登陆。
MariaDB 策略稍稍不同,会初始化的时候会生成一个和安装用户同名的高权限账户,所以可以直接用 mysql 命令(不加用户名)登入。 |
![]() |
16
ZeekChatCom 41 天前
@julyclyde 虽然我没有试过 `sudo mysql -uroot`,但是你的疑问就说明你没有理解。
sudo 是对 mysql 命令生效,可简单理解为用系统 root 的身份执行 mysql ,而 -uroot 是使用 mysql 的 root 账号登录。不是一回事儿啊。 |
17
julyclyde 41 天前
@ZeekChatCom 恰相反,我这么反问就是想说明是你没理解
mysql 的权限系统并不在乎是谁执行客户端,而在乎客户端在 3306 的通信里出示的用户名。 mysql -uroot 并不需要 sudo 你那种 sudo 的作风倒是适合 microsoft sqlserver 的 NTLM 认证方式 你都还没试过,自己瞎猜,还出来教人 |
![]() |
18
ZeekChatCom 41 天前
@julyclyde 我的评论不针对命令本身,只针对 sudo 和 -uroot, 这俩没有任何关系。
|
![]() |
19
ZeekChatCom 41 天前
@julyclyde 你 12 楼的言论,『都已经-uroot 了,为啥要 sudo 』,明显认为二者存在某种关联,事实上这两者没什么关系。
|
![]() |
20
EricXuu 41 天前 via Android
你重装一遍,看 brew 的执行日志,有提示的
|
21
julyclyde 41 天前
|
![]() |
22
ZeekChatCom 41 天前
@julyclyde 另外 mysql 命令,默认使用的是 unix domain socket 通信, 此时受文件权限影响,sudo 可能是有必要的。你说的 3306 端口,那意思是百分百使用 TCP 套接字了?明显你是不对的。
|
23
julyclyde 41 天前
|
![]() |
24
ZeekChatCom 41 天前
|
25
julyclyde 41 天前
@ZeekChatCom 教唆 sudo 显然是有错的,首先混淆了执行 mysql 客户端的身份和 mysql 通信协议里的身份
其次会导致.mysql_history 文件的路径不对 sock 文件的权限不需要考虑,都是 666 |
![]() |
26
ZeekChatCom 41 天前
@julyclyde #23 公共服务的 sock 文件都是 666 的。这句话不完全正确。没有这个约定,只是通常比较宽松。也只是通常。
|
![]() |
27
ZeekChatCom 41 天前
|
28
julyclyde 41 天前
|
29
julyclyde 41 天前
|
![]() |
30
MoYi123 41 天前
brew 装的 mysql 确实挺神秘的, 我几个月前想给家里的 kodi 配置 mysql 同步也搞了好久.
|
31
SDYY 41 天前
mysql5.x 和 8.+ 密码加密方式不一样导致的吧
|
33
lscho 41 天前
不是,你们用 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 不一定是万能的/一键的,很多包装完都要根据提示初始化或者设置一下权限、加一下环境变量之类的。 |
34
julyclyde 41 天前
mysql_server 代码比较复杂,我也没读过啊。简单 grep 了一下
在 sql/conn_handler/socket_connection.cc 文件中有一句 umask(0)应该是决定了 sock 文件 0777 的因素 所以本地访问 mysql 必然是不需要 sudo 的 |
![]() |
35
davidqw 41 天前
为何不用官网安装包呢,一步步自定义配置比较省心,系统设置里也有面板来配置和开启/关闭服务器 https://dev.mysql.com/downloads/mysql/
|
![]() |
36
nutting 41 天前
我用 orbstack 的 docker 装 arm 的 mysql ,数据映射出来,很香,同步到别的机器也很方便
|
37
billgong 41 天前
@julyclyde #25 用 sudo 是对的,因为我说了通过 TCP 用 root 空密码默认有限制,而 mysql 命令是通过 socket 连接的,root 空密码就得通过 uid 0 连接。
你完全可与取消限制,Homebrew 的 cavets 说了,可以运行 mysql_secure_installation 配置 |
38
billgong 41 天前
@julyclyde Homebrew 环境下“教唆” sudo 确实不对,但我没“教唆”
Homebrew 也不像 scoop 那样能完全免疫 sudo 的使用,要实事求是 |
41
AlbertGuo 41 天前
@KaneW95 brew info 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 -u root To start mysql now and restart at login: brew services start mysql Or, if you don't want/need a background service you can just run: /opt/homebrew/opt/mysql/bin/mysqld_safe --datadir\=/opt/homebrew/var/mysql |
42
ogzo 41 天前
MAC 下 MySql8.0.17 优雅重置密码: https://313390.xyz/index.php/archives/55/
|
43
cslive 41 天前
还是 docker 快,说是手动安装的,我从 mysql 官网下的不带安装引导的,还要手动配置,安装一遍就受够了,后面知道了 docker 那是真的快
|
44
billgong 41 天前
刚刚在虚拟机里重新试了一下 Homebrew 的 MySQL 和 MariaDB ,似乎 MySQL 9 的策略又变了 - 默认 root 账户空密码,直接 mysql 或 mysql -uroot 就可以登入,不需要用 sudo ,默认通过 socket 连接。MariaDB 的本地 root 空密码则需要通过 sudo 才行。
可能是因为 MySQL 还是希望用户通过 mysql_secure_installation 进行初始设置,而 MariaDB 已经初始化过了,cavaets 也没提到使用 mysql_secure_installation 初始化、改密码、去除匿名账户和 test 数据库等等 |
![]() |
45
pike0002 41 天前
|
![]() |
47
Jh1n 41 天前 ![]() 看了评论感觉 V 站技术水平不咋高啊
|
48
QlanQ 41 天前
看了评论感觉 V 站技术水平不咋高啊
|
![]() |
49
TimPeake 41 天前
看了评论感觉 V 站技术水平不咋高啊
|
50
zengguibo 41 天前
你安装的时候看日志,日志里有提示的,不行就卸载后重装
|
51
jamesjammy061 41 天前
orbstack 跑 docker 吧,brew 的 pgsql 和 mysql 我一般用命令行
|
![]() |
52
qqjt 41 天前
这个问题得有十几年了吧,网上的资料不要太多哦
|
53
GhostYs 41 天前
为啥不查官方文档呢?
https://dev.mysql.com/doc/refman/8.4/en/problems-connecting.html > After a fresh installation, if you try to log on to the server as root without using a password, you might get the following error message.(全新安装后,如果您尝试以不使用密码的方式登录服务器 root ,则可能会收到以下错误消息。) ``` $> mysql -u root ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO) ``` > If you get the following error, it means that you are using an incorrect root password (如果出现以下错误,则表示您使用的 root 密码不正确) ``` $> mysqladmin -u root -pxxxx ver Access denied for user 'root'@'localhost' (using password: YES) ``` |
54
julyclyde 41 天前
@billgong 首先,tcp 连接无视你是否 sudo ; unix domain socket 连接虽然理论上存在 sock 文件 mode 的问题,但经过查看代码,发现 mysqld 会特地把 sock 文件给 777 mode ,所以其实 sudo 也不是必须的。在此前提下,sudo 带来的其他副作用(比如.mysql_history 文件的路径/权限问题)是不可忽视的。不应该教唆使用 sudo
你既然说“root 空密码就得通过 uid 0 连接”,那你应该给出实证。 mariadb 必须 sudo 是咋回事呢? sock 文件的 mode 变了吗? 另外你提到的 scoop 免疫是什么意思? |
![]() |
56
wynemo 41 天前
用一个 orbstack 装一个 mysql 的 docker 镜像吧
|
![]() |
57
cabing 41 天前
deepseek 问下。
|
![]() |
58
saintatgod 40 天前
这不就是安装时候没有注意 mysql 的默认密码吗,找不到就重新设吧,不知道这个问题是不是解决了。MySQL 8.0 以上,用下面这个步骤应该没有什么问题
1. ```brew services stop mysql``` 停掉 MySQL 服务 2. ```mysqld_safe --skip-grant-tables &``` 启动 mysql 3. ```mysql -uroot ``` 就可以无密码进入了 4. ``` -- 刷新权限 FLUSH PRIVILEGES; -- 重置 root 用户密码(替换为新密码,如 '123456') ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '123456'; -- 刷新权限 FLUSH PRIVILEGES; ``` 5. ``` exit ``` 退出 mysql 6. ``` ps aux | grep mysqld_safe ``` 找到进程号,用 ``` kill -9 进程号 ``` 干掉进程 7. ``` brew services start mysql ``` 启动 MySQL 服务,然后正常进入就可以。 |
59
julyclyde 40 天前
@saintatgod kill 数据库的时候建议不要-9
偶尔会死的很难看 |
![]() |
60
webcape233 40 天前 via iPhone
跑一下 mysql_secure_installation
它会提示 是否设置 root 密码 是否关闭远程 root 登录 是否删除匿名帐号 是否删除测试数据库 |
![]() |
61
saintatgod 40 天前
@julyclyde 这个不算是 kill -9 数据库,这个你仔细看看, 而且他的问题又不是在生产环境,而且就算是在生产环境,做好数据库备份什么的,也不会有问题。
|
62
julyclyde 39 天前
@saintatgod 哦哦。看到了。是 kill safe 脚本是吧
这种情况 mysqld 本体能关闭么?? |
![]() |
63
funcNVidia 39 天前
@julyclyde 现在他们有 AI 了,可以更懒了。然后还说你思维僵化,传统迂腐不肯接受新鲜事物
|
![]() |
64
funcNVidia 39 天前
既然是新安装的,不如找到配置文件,重新初始化数据库(
8 楼也说的是,第一次安装会有个临时的密码 |
65
julyclyde 38 天前
@funcNVidia 幸好用 AI 的都会被封号
|