我有和这里类似的问题 。问题是那里提出的解决方案对我不起作用:
就目前而言,我有用户:
+----------+------------------------------------+
| user | host |
+----------+------------------------------------+
| root | 127.0.0.1 |
| root | localhost |
Run Code Online (Sandbox Code Playgroud)
两者都没有密码(就目前而言。我知道这很糟糕!)。
我正在使用以下命令连接到 mysql:
mysql -u root -h 127.0.0.1 --protocol=tcp
Run Code Online (Sandbox Code Playgroud)
登录后,我得到:
mysql -u root -h 127.0.0.1 --protocol=tcp
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 5
Server version: 5.1.61-log Source distribution
Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> \s
--------------
mysql Ver 14.14 Distrib 5.1.61, for redhat-linux-gnu (x86_64) using readline 5.1
Connection id: 5
Current database:
Current user: root@localhost
SSL: Not in use
Current pager: stdout
Using outfile: ''
Using delimiter: ;
Server version: 5.1.61-log Source distribution
Protocol version: 10
Connection: 127.0.0.1 via TCP/IP
Server characterset: latin1
Db characterset: latin1
Client characterset: latin1
Conn. characterset: latin1
TCP port: 3306
Uptime: 2 days 9 hours 2 min 13 sec
Threads: 1 Questions: 102 Slow queries: 0 Opens: 19 Flush tables: 1 Open tables: 12 Queries per second avg: 0.0
--------------
mysql> SELECT USER(),CURRENT_USER();
+----------------+----------------+
| USER() | CURRENT_USER() |
+----------------+----------------+
| root@localhost | root@localhost |
+----------------+----------------+
1 row in set (0.00 sec)
mysql>
Run Code Online (Sandbox Code Playgroud)
如何以“root”@127.0.0.1 的身份登录?
晚上好,我是@RolandoMySQLDBA ,您提到的那篇文章的作者。
看最后三行
Server version: 5.1.61-log Source distribution
Protocol version: 10
Connection: 127.0.0.1 via TCP/IP
Run Code Online (Sandbox Code Playgroud)
最后一行表明127.0.0.1 via TCP/IP您 100% 使用 TCP/IP 协议。
你跑了吗SELECT USER(),CURRENT_USER();?
如果你这样做了,它应该说
root@127.0.0.1 | root@127.0.0.1
Run Code Online (Sandbox Code Playgroud)
输出看起来很奇怪
root@127.0.0.1 | root@localhost
Run Code Online (Sandbox Code Playgroud)
请注意以下事项:由于两个 root 用户具有相同的授权和相同的密码(在本例中没有),因此 mysqld 决定选择root@localhost. 此时,您可能会想:“为什么会mysqld做出这样的选择?”
在 DBA StackExchange 中,我有一篇 2 年前的帖子(MySQL error: Access returned for user 'a'@'localhost' (using password: YES))。过去,我详细描述了 mysqld 如何执行用户身份验证。请注意《MySQL 5.0 认证学习指南》第 486,487 页中的段落
客户端访问控制分为两个阶段:
在第一阶段,客户端尝试连接,服务器接受或拒绝连接。为了使尝试成功,用户表中的某些条目必须与客户端连接的主机、用户名和密码相匹配。
在第二阶段(仅当客户端已成功连接时才会发生),服务器检查从客户端收到的每个查询,以查看客户端是否有足够的权限来执行它。
服务器根据客户端连接的主机和客户端提供的用户,将客户端与授权表中的条目进行匹配。但是,可能会匹配多个记录:
正如我在认证手册中提到的,it's possible for more than one record to match. 因此,mysqld做出了选择。
如果您删除root@localhostfrom mysql.user,这是匹配的一种方法SELECT USER(),CURRENT_USER();。另一种方法是提供root@127.0.0.1密码。
拥有 2 个具有相同方式用于用户身份验证的 root 用户是您看不到的根本原因root@127.0.0.1。尽管如此,您正在使用TCP/IP.
请确保127.0.0.1在操作系统中定义。运行这个:
cat /etc/hosts | grep -c "127\.0\.0\.1"
Run Code Online (Sandbox Code Playgroud)
如果您得到0,则操作系统不知道它。您需要添加127.0.0.1并/etc/hosts重新启动网络,然后重新启动 mysql。
我要说的可能听起来很愚蠢,但文档使用 TCP 而不是 tcp
在 Unix 上,MySQL 程序特别对待主机名 localhost,与其他基于网络的程序相比,其方式可能与您期望的不同。对于到本地主机的连接,MySQL 程序尝试使用 Unix 套接字文件连接到本地服务器。即使使用 --port 或 -P 选项来指定端口号,也会发生这种情况。要确保客户端与本地服务器建立 TCP/IP 连接,请使用 --host 或 -h 指定主机名值 127.0.0.1,或者本地服务器的 IP 地址或名称。您还可以使用 --protocol=TCP 选项显式指定连接协议,甚至对于 localhost 也是如此。例如:
Run Code Online (Sandbox Code Playgroud)shell> mysql --host=127.0.0.1 shell> mysql --protocol=TCP即使其他选项通常默认为某些其他协议,--protocol 选项也使您能够建立特定类型的连接。
尝试像这样使用protocol=TCP
mysql -u root -h 127.0.0.1 --protocol=TCP -ANe"SELECT USER(),CURRENT_USER()"
mysql -u root -h localhost --protocol=TCP -ANe"SELECT USER(),CURRENT_USER()"
Run Code Online (Sandbox Code Playgroud)
看看它是否有所作为。
/etc/hosts你需要仔细查看
如果你看到这个/etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
Run Code Online (Sandbox Code Playgroud)
然后登录root@127.0.0.1应该可以正常工作
如果你看到这个/etc/hosts
127.0.0.1 localhost
Run Code Online (Sandbox Code Playgroud)
那么root@127.0.0.1就没有工作的机会
| 归档时间: |
|
| 查看次数: |
28485 次 |
| 最近记录: |