默认情况下,LOAD DATA
的LOCAL功能是否可用取决于MySQL客户端库在编译时是否启用了该功能。
- 当只给出
--local-infile
(不带值)时,它启用LOCAL数据加载。 - 当给出
--local-infile=0
时,它禁用LOCAL数据加载。 - 当给出
--local-infile=1
时,它启用LOCAL数据加载(这与只给出--local-infile
效果相同)。
如果LOCAL功能被禁用了(无论是通过默认设置还是通过--local-infile=0
),但您仍然想从特定目录加载文件,可以使用--load-data-local-dir
选项。这个选项允许您指定一个目录,只有这个目录中的文件才能被LOAD DATA LOCAL INFILE
语句加载。
除了客户端设置外,LOAD DATA LOCAL INFILE
的成功使用还要求MySQL服务器也允许本地数据加载。这通常在服务器的配置文件(如my.cnf
或my.ini
)的[mysqld]
部分中设置,确保local-infile
被设置为1
。
.mylogin.cnf
是一个用于存储 MySQL 登录路径(login paths)的配置文件。登录路径是一个选项组(option group),它包含用于指定连接到哪个 MySQL 服务器以及使用哪个账户进行身份验证的选项。
要创建或修改登录路径文件,请使用MySQL_config_editor实用程序。
用于客户端/服务器通信的缓冲区的最大值。默认值为16MB,最大值为1GB。
当使用--safe-updates
选项时,该选项是为了防止你执行可能产生大量数据的操作,特别是那些没有WHERE
子句或限制条件的DELETE
或UPDATE
语句(默认值为1000000)。
启用命名的mysql命令。允许使用长格式命令,而不仅仅是短格式命令。例如,quit和\q都可以识别。使用skip-named-commands--skip-named-commands命名命令可以禁用命名命令。
TCP/IP和套接字通信的缓冲区大小(默认值为16KB。)
用于TCP/IP连接的网络命名空间。如果省略,连接将使用默认(全局)命名空间。
此选项是在MySQL 8.0.22中添加的。它仅在实现网络命名空间支持的平台上可用。
这与--skip auto-rehash具有相同的效果。
在发生错误时不发出蜂鸣声(beep sound)。
用于告诉工具不要读取任何默认选项文件。这通常包括在启动过程中会被考虑的默认配置文件,如 my.cnf
(在Unix/Linux系统中)或 my.ini
(在Windows系统中)。
如果程序启动失败是因为从某个选项文件中读取了未知选项,那么使用 --no-defaults
选项可以阻止程序读取这些默认选项文件。
例外情况是.mylogin.cnf文件在任何情况下都会被读取(如果存在的话)。这允许以比在命令行上更安全的方式指定密码,即使不使用默认值。要创建.mylogin.cnf,请使用mysql_config_editor实用程序。
忽略除了在默认数据库与命令行上指定的数据库相同时执行的语句之外的所有语句
基于 USE
语句来过滤 SQL 语句的方法是非常基础的,并且应该谨慎使用。
当使用 mysql -u username -p db_name
命令连接到 MySQL 并指定了一个数据库 db_name
时,MySQL 会首先执行一个隐式的 USE db_name;
语句,将当前数据库上下文设置为 db_name
。
之后,当 MySQL 读取并处理您的 SQL 输入时,如果遇到 USE
语句,它会检查该语句指定的数据库名是否与命令行上指定的数据库名相同。如果相同,MySQL 会接受并尝试执行 USE
语句之后的 SQL 语句(这些语句将在新的数据库上下文中执行)。如果不同,MySQL 会忽略 USE
语句之后的 SQL 语句,直到遇到下一个 USE
语句或输入的结束。
重要的是要注意,MySQL 在决定是否接受或拒绝 USE
语句之后的 SQL 语句时,并不考虑这些 SQL 语句的具体内容。它只关心 USE
语句指定的数据库名是否与命令行上指定的数据库名相匹配。
假设调用mysql来处理这组语句:
DELETE FROM db2.t2;
USE db2;
DROP TABLE db1.t1;
CREATE TABLE db1.t1 (i INT);
USE db1;
INSERT INTO t1 (i) VALUES(1);
CREATE TABLE db2.t1 (j INT);
如果命令行是mysql --force --one-database db1
,以下是 MySQL 如何处理输入 SQL 语句的:
-
DELETE 语句:即使 DELETE 语句中引用的表位于不同的数据库,但因为命令行上指定了
db1
并且这是当前默认数据库,所以 DELETE 语句会在db1
数据库中执行(假设表名在db1
中是唯一的,或者它确实引用了db1
中的表)。 -
DROP TABLE 和 CREATE TABLE 语句:如果这两个语句位于一个
USE db2;
语句之后(其中db2
不是db1
),那么这些语句将尝试在db2
数据库中执行,而不是db1
。 -
INSERT 和 CREATE TABLE 语句:如果当前默认数据库是
db1
(由于命令行选项),那么这些语句将在db1
数据库中执行。即使 CREATE TABLE 语句尝试在不同于db1
的数据库中创建表行。
使用给定的命令对查询输出进行分页。如果省略该命令,则默认pager为PAGER
环境变量的值。有效的pager有less、more、cat[>filename]等。此选项仅适用于Unix,并且仅适用于交互式模式。
使用 --skip-pager命令可以禁用分页。
用于连接到服务器的MySQL帐户的密码。密码值是可选的。如果没有给出,mysql会提示输入一个。如果给出,则--password=或-p与其后面的密码之间不得有空格。如果未指定密码选项,则默认情况下不发送密码。
在命令行上指定密码应该被认为是不安全的。为了避免在命令行中提供密码,请使用选项文件。
要明确指定不用密码,并且不需要mysql提示输入密码,请使用--skip-password选项。
--password1[=pass_val]
MySQL账户连接服务器时使用的多因素认证(multifactor authentication)的第一个因素的密码。这个密码值是可选的。如果没有给出,mysql会提示输入一个。如果给定,--password1=和它后面的密码之间不能有空格。如果没有指定密码选项,默认情况下不发送密码。
在命令行上指定密码应该被认为是不安全的。为了避免在命令行中提供密码,请使用选项文件。
要明确指出不用密码并且不需要mysql提示输入密码,请使用--skip-password1选项。
--password1和-password是同义词,--skip-password1与--skip-password也是同义词。
--password2[=pass_val]
MySQL账户连接服务器时使用的多因素认证(multifactor authentication)的第二个因素的密码
此选项类似于--password1。
--password3[=pass_val]
MySQL账户连接服务器时使用的多因素认证(multifactor authentication)的第三个因素的密码
此选项类似于--password1。
在Windows上,您可以使用命名管道(named pipe)连接到MySQL服务器。但是,这个选项仅当MySQL服务器启动时启用了named_pipe
系统变量以支持命名管道连接时才适用。此外,进行连接的用户必须是named_pipe_full_access_group
系统变量指定的Windows组的成员。
在Windows上,authentication_kerberos_client
认证插件支持一个插件选项,它允许客户端用户在运行时设置两个可能的值:SSPI
和GSSAPI
。
这个客户端插件选项的默认值是SSPI
(Security Support Provider Interface),它能够从Windows的内存缓存中获取凭据。这是Windows平台上Kerberos认证的一种常见方式。
另一方面,客户端用户也可以选择通过Windows上的MIT Kerberos库支持GSSAPI
(Generic Security Service Application Program Interface)模式。GSSAPI能够获取之前使用kinit
命令生成的缓存凭据。这对于那些需要与其他支持GSSAPI的系统(如Linux或UNIX系统)进行互操作的Windows环境可能是有用的。GSSAPI能够获取之前通过kinit
命令生成的缓存凭据。
当使用 --default-auth
选项来指定一个认证插件,但 MySQL 客户端无法找到该插件时,您可能需要指定一个目录来让 MySQL 客户端在该目录中查找插件。这可以通过 --plugin-dir
选项来实现。
对于TCP/IP连接,要使用的端口号。
打印程序名称及其从选项文件中获得的所有选项。
将提示设置为指定的格式。默认为mysql>。