【发布时间】:2011-08-17 09:07:22
【问题描述】:
我已经安装了 MySQL,甚至以用户身份登录。
但是当我尝试这样连接时:
http://localhost:3306
mysql://localhost:3306
两者都不起作用。不确定两者是否应该工作,但至少其中一个应该工作:)
如何确定端口确实是 3306?是否有一个 linux 命令可以以某种方式查看它? 另外,有没有更正确的方法可以通过 url 进行尝试?
【问题讨论】:
我已经安装了 MySQL,甚至以用户身份登录。
但是当我尝试这样连接时:
http://localhost:3306
mysql://localhost:3306
两者都不起作用。不确定两者是否应该工作,但至少其中一个应该工作:)
如何确定端口确实是 3306?是否有一个 linux 命令可以以某种方式查看它? 另外,有没有更正确的方法可以通过 url 进行尝试?
【问题讨论】:
我认为使用 lsof 命令行工具查找与 mysql 服务器关联的端口最合适的方法。
lsof -i -n -P | grep mysql
mysqld 1556 prince 10u IPv4 0x6ad3fd78a9051969 0t0 TCP 127.0.0.1:3306 (LISTEN)
【讨论】:
grep port /etc/mysql/my.cnf(至少在 debian/ubuntu 中有效)
或
netstat -tlpn | grep mysql
验证
绑定地址 127.0.0.1
在 /etc/mysql/my.cnf 中查看可能的限制
【讨论】:
在 mac os X 上,有两个选项。 netstat 或 lsof
在 Mac OS X 上使用 netstat 不会显示进程。因此使用 netstat 只能按端口搜索。
使用lsof 将显示进程名称。
在遇到端口冲突(docker 容器)时,我做了以下操作:
netstat -aln | grep 3306
输出:
tcp46 0 0 *.3306 *.* LISTEN
sudo lsof -i -P | grep -i "LISTEN" | grep -i 3306
输出:
mysqld 60608 _mysql 31u IPv6 0x2ebc4b8d88d9ec6b 0t0 TCP *:3306 (LISTEN)
【讨论】:
对我来说,@joseluisq 的回答是:
ERROR 1045 (28000): 用户 'root'@'localhost' 的访问被拒绝(使用密码:否)
但它是这样工作的:
$ mysql -u root@localhost -e "SHOW GLOBAL VARIABLES LIKE 'PORT';"
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| port | 3306 |
+---------------+-------+
【讨论】:
如果您在一个不可用 netstat 的系统上(例如 RHEL 7 和更新的 Debian 版本),您可以使用 ss,如下所示:
sudo ss -tlpn | grep mysql
你会得到类似下面的输出:
LISTEN 0 50 *:3306 *:* users:(("mysqld",pid=5307,fd=14))
第四列是Local Address:Port。所以在这种情况下,Mysql 正在监听端口 3306,这是默认的。
【讨论】:
要在端口上查找侦听器,请执行以下操作:
netstat -tln
如果 mysql 确实在侦听该端口,您应该会看到如下所示的一行。
tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN
3306 端口是 MySql 的默认端口。
要连接,您只需使用所需的任何客户端,例如基本的 mysql 客户端。
mysql -h localhost -u 用户数据库
或由您的库代码解释的 url。
【讨论】:
-p 参数。添加流程确实有助于使这些信息更有用。
man netstat。
netstat -tlpn
它将显示如下列表:
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1393/sshd
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 1859/master
tcp 0 0 123.189.192.64:7654 0.0.0.0:* LISTEN 2463/monit
tcp 0 0 127.0.0.1:24135 0.0.0.0:* LISTEN 21450/memcached
tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN 16781/mysqld
以 root 身份查看所有详细信息。 -t 选项将输出限制为 TCP 连接,-l 用于侦听端口,-p 列出程序名称,-n 显示端口的数字版本而不是命名版本。
这样就可以看到进程名和端口了。
【讨论】:
尝试仅使用-e (--execute) 选项:
$ mysql -u root -proot -e "SHOW GLOBAL VARIABLES LIKE 'PORT';" (8s 26ms)
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| port | 3306 |
+---------------+-------+
将root 替换为您的“用户名”和“密码”
【讨论】:
你可以使用
ps -ef | grep mysql
【讨论】:
3306 是 mysql 的默认端口。检查它:
netstat -nl|grep 3306
它应该给出这个结果:
tcp 0 0 127.0.0.1:3306 0.0.0.0:* 听
【讨论】:
我同意@bortunac 的解决方案。 my.conf 是特定于 mysql 的,而 netstat 将为您提供所有侦听端口。
也许两者都用,一个用来确认哪个是为 mysql 设置的端口,另一个用来检查系统是否正在通过那个端口进行监听。
我的客户端使用的是 CentOS 6.6,我在 /etc/ 下找到了 my.conf 文件,所以我使用了:
grep port /etc/my.conf (CentOS 6.6)
【讨论】:
使用Mysql客户端:
mysql> SHOW GLOBAL VARIABLES LIKE 'PORT';
【讨论】:
对某些人来说更简单的方法:如果您只想检查 MySQL 是否在某个端口上,您可以在终端中使用以下命令。在mac上测试。 3306 是默认端口。
mysql --host=127.0.0.1 --port=3306
如果你成功登录到 MySQL shell 终端,你就很好了!这是我成功登录后的输出。
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 9559
Server version: 5.6.21 Homebrew
Copyright (c) 2000, 2014, 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>
【讨论】:
两个网址都不正确 - 应该是
jdbc:mysql://host:port/database
我认为这是不言而喻的,但使用 Java 连接到数据库需要 JDBC 驱动程序。你需要MySQL JDBC driver。
也许您可以使用 TCP/IP 上的套接字进行连接。查看MySQL docs。
见http://dev.mysql.com/doc/refman/5.0/en/connector-j-reference-configuration-properties.html
更新:
我尝试 telnet 进入 MySQL (telnet ip 3306),但它不起作用:
http://lists.mysql.com/win32/253
我想这就是你的想法。
【讨论】: