如何使用MySQL命令行客户端连接到备用端口号?

19

我的MySQL数据库被设置为监听TCP端口3307而非3306。我正尝试使用mysqldump命令,我将命令行写成了这样:

mysqldump -u root -p database > "path_to_dumpfile\database.sql"

然后,我被提示输入密码,然后收到以下错误消息:

ERROR 2002 (HY000): Can't connect to MySQL server on '127.0.0.1' (36)

我是不是做错了什么?或者有没有我没按照的步骤?

12
改为-h localhost --port=3307。加上-p选项会强制让MySQL命令行工具提示输入密码。 - Marc B
3
在所有MySQL命令行工具中使用大写字母P的选项-P可以指定端口。这是Marc B指出的--port选项的缩写。 - Toddius Zho
8个回答

15

尝试在命令行中添加--port=port_num-P port_num,例如:

mysqldump -u root --port=3307 -p database > ..\path_to_dumpfile\database.sql

我建议您查看MySQL手册,了解mysqldump命令的其他可能参数,链接如下。

来源:https://dev.mysql.com/doc/refman/8.0/en/mysqldump.html


13

我也遇到了同样的问题,使用了--port参数后,我按照serverfault答案中的建议解决了问题:

当给出localhost参数时,MySQL会使用sockets。改用127.0.0.1代替。


无法工作,127.0.0.1仍然连接到我的3306 mysqld。 - marc40000
是的。停止我的3306实例,我可以使用添加端口参数的方式转储3307实例。对我来说,使用localhost或127.0.0.1没有任何变化。 - marc40000
我试图使用DBeaver从AWS RDS通过Termius进行端口转发来导出数据库。我将'localhost'改为'127.0.0.1',并且按预期工作。谢谢! - Enrique René

6

正如其他人建议的那样,问题可能是在使用localhost/127.0.0.1时使用了错误的协议。

因此,除了--port=3307之外,还需要添加协议。

尝试:

--protocol=TCP --port=3307

来自 man mysqldump:

--protocol={TCP|SOCKET|PIPE|MEMORY}

连接到服务器时使用的连接协议。当其他连接参数通常会导致使用不想要的协议时,它非常有用。有关允许的值的详细信息,请参见第4.2.2节“连接到MySQL服务器”。


2

我有一个类似的问题,我的服务器上运行着两个mysql实例,一个在3306端口,另一个在3307端口。尽管我指定了端口为3307,但似乎mysqldump连接到的是在3306端口的实例。我的解决方法是关闭在3306端口上运行的实例。我只能认为这是mysqldump识别正在运行的实例的bug。


1
我的解决方法是关闭在3306端口运行的实例:这不能被视为解决方法,因为如果我还需要3306实例,它将无法工作。 - Stefano

1

我知道我对这个帖子来说有些晚了,但是它可能会在将来帮助某个人。

echo off 

set TIMESTAMP=%DATE:~10,4%%DATE:~4,2%%DATE:~7,2%

"C:\Program Files\MySQL\MySQLWorkbench6.3CE\mysqldump.exe" -uroot -ppassword -hlocalhost -P3307 ecommerce  > C:\Users\User\Desktop\backmeup\destination_\ecommerce.%TIMESTAMP%.sql 

众所周知,-p代表密码,而-P代表端口。
由于某些原因,如果我使用像-u root -p password等带有空格的命令,它仍会报错。
另外,对我来说,使用--databases也无法正常工作。相反,我添加了:
echo off 

set TIMESTAMP=%DATE:~10,4%%DATE:~4,2%%DATE:~7,2%

    "C:\Program Files\MySQL\MySQLWorkbench6.3CE\mysqldump.exe" -uroot -ppassword -hlocalhost -P3307 ecommerce  > C:\Users\User\Desktop\backmeup\destination_\ecommerce.%TIMESTAMP%.sql 
    "C:\Program Files\MySQL\MySQLWorkbench6.3CE\mysqldump.exe" -uroot -ppassword -hlocalhost -P3307 equipment_rent  > C:\Users\User\Desktop\backmeup\destination_\equipment_rent.%TIMESTAMP%.sql 

1

mysqldump -u 这里放用户名 -p -h localhost --port=3306 数据库名 > 文件名.sql


0

对于*nix客户端,请使用--host=127.0.0.1并显式提供--port=3307

mysqldump --host=127.0.0.1 --port=3307 -u root -p database > "path_to_dumpfile\database.sql"

这是来自MySQL文档的内容:

仅使用或检查与所选传输协议相关的连接选项。其他连接选项将被忽略。例如,在Unix上使用--host=localhost时,即使给出--port或-P选项指定TCP/IP端口号,客户端也会尝试使用Unix套接字文件连接到本地服务器。

为确保客户端与本地服务器建立TCP/IP连接,请使用--host或-h指定主机名值为127.0.0.1(而不是localhost)或本地服务器的IP地址或名称。


-1

使用mysqldump命令备份所有数据库,包括存储过程。命令如下:

mysqldump --host 192.168.1.1 --port 3307 -u root -pYourrootpassword --routines --all-databases |gzip > /yourbackuppath/filename_date +%d.sql.gz


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接