【MySQL精通之路】MySQL的使用(3)-命令行连接

本节介绍使用命令行选项 来指定如何为MySQLmysqldump等客户端建立MySQL服务器的连接。

有关使用类似URI的连接字符串或键值对建立连接的信息,对于MySQL Shell等客户端,请参阅"使用类似URI字符串或键值配对连接到服务器"。

有关无法连接的其他信息,请参阅"连接到MySQL的问题疑难解答"。

客户端程序要连接到MySQL服务器,必须使用正确的连接参数,例如服务器运行的主机名以及MySQL帐户的用户名和密码。

每个连接参数都有一个默认值,但您可以根据需要使用命令行或选项文件中指定的程序选项来替代默认值。

这里的示例使用mysql客户端程序,但这些原则适用于其他客户端,如mysqldump、mysqladmin或mysqlshow。

此命令调用mysql时不指定任何显式连接参数:

mysql

默认主机名为localhost。在Unix上,这有一个特殊的含义,如后所述。

默认用户名在Windows上为ODBC,在Unix上为Unix登录名。

没有发送密码,因为既没有给出--password也没有给出-p。

对于mysql,第一个nonoption参数被作为默认数据库的名称。因为没有这样的参数,mysql不选择默认数据库。

要明确指定主机名和用户名以及密码,请在命令行中提供适当的选项。若要选择默认数据库,请添加数据库名称参数。示例:

sql 复制代码
mysql --host=localhost --user=myname --password=password mydb
mysql -h localhost -u myname -ppassword mydb

对于密码选项,密码值是可选的:

如果使用--password或-p选项并指定密码值,则--password=或-p与后面的密码之间不得有空格。

如果使用--password或-p但未指定密码值,则客户端程序会提示您输入密码。输入密码时不会显示密码。这比在命令行上提供密码更安全,因为命令行可能使系统上的其他用户能够通过执行ps等命令来查看密码行。

请参阅"密码安全的最终用户指南"。

【MySQL精通之路】安全(2)-密码安全-CSDN博客

要明确指定没有密码,并且客户端程序不应提示输入密码,请使用**--skip password选项**。

如前所述,在命令行中包含密码值是一种安全风险。若要避免此风险,请指定--password或-p选项,但不包含以下任何密码值:

sql 复制代码
mysql --host=localhost --user=myname --password mydb
mysql -h localhost -u myname -p mydb

当提供的--password或-p选项没有密码值时,客户端程序会打印一个提示并等待您输入密码。

(在这些示例中,mydb不会被解释为密码,因为它与前面的password选项之间有一个空格。)

在某些系统上,MySQL用于提示输入密码的库例程会自动将密码限制为八个字符。

这个限制是系统库的属性,而不是MySQL。

在内部,MySQL对密码的长度没有任何限制。

要绕过受其影响的系统的限制,请在配置文件中指定您的密码

请参阅"使用选项文件"。

【MySQL精通之路】MySQL的使用(2)-配置-CSDN博客

另一种解决方法是将MySQL密码更改为8个或更少字符的值,但这有一个缺点,即较短的密码往往不太安全。

客户端程序确定要建立的连接类型,如下所示:

如果未指定主机或主机为localhost,则会发生到本地主机的连接:

在Windows上,如果服务器启动时启用了shared_memory系统变量以支持共享内存连接,则客户端使用共享内存进行连接。

在Unix上,MySQL程序对主机名localhost进行了特殊处理,与其他基于网络的程序相比,这种方式可能与您所期望的不同:客户端使用Unix套接字文件进行连接。--socket选项或MYSQL_UNIX_PORT环境变量可用于指定套接字名称。
在Windows上,如果主机为。(period),或者TCP/IP未启用且--socket未指定,或者主机为空,如果服务器启动时启用了named_pipe系统变量以支持命名管道连接,则客户端将使用命名管道进行连接。如果不支持命名管道连接,或者进行连接的用户不是named_pipe_full_access_group系统变量指定的Windows组的成员,则会发生错误。
否则,连接将使用TCP/IP。

--protocol选项使您能够使用特定的传输协议,即使其他选项通常会导致使用不同的协议。

也就是说,--protocol显式地指定传输协议并覆盖前面的规则,即使对于localhost也是如此。

仅使用或检查与所选传输协议相关的连接选项。其他连接选项将被忽略。

例如,在Unix上使用--host=localhost时,即使提供了--port或-P选项来指定TCP/IP端口号,客户端也会尝试使用Unix套接字文件连接到本地服务器。

要确保客户端与本地服务器建立TCP/IP连接,请使用--host或-h指定主机名值127.0.0.1(而不是localhost),或本地服务器的IP地址或名称。您还可以通过使用--protocol=TCP选项显式指定传输协议,即使对于localhost也是如此。示例:

sql 复制代码
mysql --host=127.0.0.1
mysql --protocol=TCP

如果服务器配置为接受IPv6连接,则客户端可以使用--host=::1通过IPv6连接到本地服务器

请参阅"IPv6支持"。

在Windows上,要强制MySQL客户端使用命名管道连接,请指定--pipe或--protocol=pipe选项,或指定。(句点)作为主机名。如果服务器启动时未启用named_pipe系统变量以支持命名管道连接,或者进行连接的用户不是named_pipe_full_access_group系统变量指定的Windows组的成员,则会发生错误。如果不想使用默认管道名称,请使用--socket选项指定管道名称。

与远程服务器的连接使用TCP/IP。此命令使用默认端口号(3306)连接到运行在remote.example.com上的服务器:

sql 复制代码
mysql --host=remote.example.com

要明确指定端口号,请使用--port或-P选项:

sql 复制代码
mysql --host=remote.example.com --port=13306

您也可以指定连接到本地服务器的端口号。

但是,如前所述,默认情况下,到Unix上localhost的连接使用套接字文件,因此除非如前所示强制TCP/IP连接,否则任何指定端口号的选项都将被忽略。

对于此命令,程序在Unix上使用一个套接字文件,并忽略--port选项:

sql 复制代码
mysql --port=13306 --host=localhost

要使用端口号,请强制建立TCP/IP连接。例如,通过以下任一方式调用程序:

sql 复制代码
mysql --port=13306 --host=127.0.0.1
mysql --port=13306 --protocol=TCP

有关控制客户端程序如何与服务器建立连接的配置的更多信息,

请参阅"连接到服务器的命令选项"。

【MySQL精通之路】MySQL的使用(3)-连接到服务器的配置-CSDN博客

可以指定连接参数,而无需每次调用客户端程序时在命令行中输入这些参数:

sql 复制代码
[client]
host=host_name
user=user_name
password=password

有关更多信息,请参阅"使用配置文件"。

【MySQL精通之路】MySQL的使用(2)-配置-CSDN博客

可以使用环境变量指定某些连接参数。示例:

要指定mysql的主机,请使用mysql_host。

在Windows上,要指定MySQL用户名,请使用user。

有关支持的环境变量的列表,请参阅"环境变量"。

未完待续...

相关推荐
醇氧8 分钟前
【postgresql】模式(SCHEMA)
数据库·sql·postgresql
zengson_g16 分钟前
如何在 PostgreSQL 中实现数据的去重操作,尤其是对于复杂的数据结构?
数据库·postgresql
zengson_g17 分钟前
如何优化 PostgreSQL 中对于树形结构数据的查询?
数据库·postgresql
鞥牧魂人21 分钟前
数据库——事务管理
服务器·数据库·oracle
冯宝宝^33 分钟前
图书管理系统
服务器·数据库·vue.js·spring boot·后端
失眠的稻草人2591 小时前
【高阶数据结构】B-数、B+树、B*树的原理
数据结构·数据库·b树
令人着迷1 小时前
Redis核心问题总结(一)
数据库·redis·缓存
java6666688882 小时前
Spring Boot与HashiCorp Vault的集成
数据库·spring boot·oracle
Rcnhtin2 小时前
Redis 典型应用——分布式锁
数据库·redis·分布式
叫我DPT2 小时前
数据库开发:mysql基础一
python·mysql·adb·数据库开发