错误1148:此MySQL版本不允许使用used命令

时间:2013-08-26 06:11:03

标签: mysql sql import

我正在尝试使用

将数据加载到mysql数据库中
LOAD DATA LOCAL
INFILE A.txt
INTO DB
LINES TERMINATED BY '|';

这个问题的主题是我得到的回应。我理解默认情况下本地数据卸载是关闭的,我必须使用命令local-infile=1启用它,但我不知道在哪里放置此命令。

12 个答案:

答案 0 :(得分:76)

您可以在设置客户端连接时将其指定为附加选项:

mysql -u myuser -p --local-infile somedatabase

这是因为该功能打开了一个安全漏洞。因此,您必须以明确的方式启用它,以防您真正想要使用它。

客户端和服务器都应启用local-file选项。否则它不起作用。要为服务器端服务器上的文件启用它,请在my.cnf配置文件中添加以下内容:

loose-local-infile = 1

答案 1 :(得分:23)

我找到了答案here

这是因为服务器变量local_infile设置为 FALSE | 0 。从document进行引用。

您可以通过执行以下操作进行验证:

SHOW VARIABLES LIKE 'local_infile';

如果您具有SUPER特权,则可以通过执行以下命令来启用它(无需使用新配置重新启动服务器):

SET GLOBAL local_infile = 1;

答案 2 :(得分:12)

http://dev.mysql.com/doc/refman/5.6/en/load-data-local.html

将它放在my.cnf中 - [client]部分应该已存在 (如果你不太担心安全问题)。

[client]
loose-local-infile=1

答案 3 :(得分:6)

所有这些并没有在我全新的Ubuntu 15.04上为我解决。

我删除了LOCAL并获得了此命令:

LOAD DATA
INFILE A.txt
INTO DB
LINES TERMINATED BY '|';

然后我得到了:

MySQL said: File 'A.txt' not found (Errcode: 13 - Permission denied)

这导致我this answer from Nelson to another question on stackoverflow为我解决了这个问题!

答案 4 :(得分:5)

还为此问题苦苦挣扎,尝试使用Windows上的 MySQL Workbench 从我的本地计算机上将.csv数据上传到AWS RDS实例中。

我需要添加的内容是在“连接”>“高级”>“其他”中添加OPT_LOCAL_INFILE=1。请注意,CAPS是必需的。

我在PeterMag in AWS Developer Forums处找到了这个答案。


有关更多信息:

SHOW VARIABLES LIKE 'local_infile';已返回ON 查询是:

LOAD DATA LOCAL INFILE 'filepath/file.csv' 
    INTO TABLE `table_name`
    FIELDS TERMINATED BY ',' 
    ENCLOSED BY '"'
    LINES TERMINATED BY '\n'
    IGNORE 1 ROWS;

从上面引用的答案源中复制:

显然,这是MYSQL Workbench V8.X中的错误。除了 该线程前面显示的配置,您还需要更改 工作台中的MYSQL连接如下:

  1. 转到MYSQL的“欢迎”页面,其中显示了您的所有连接
  2. 选择“管理服务器连接”(小扳手图标)
  3. 选择您的连接
  4. 选择“高级”标签
  5. 在“其他”框中,添加OPT_LOCAL_INFILE = 1

现在,我可以在MYSQL RDS上使用LOAD DATA LOCAL INFILE查询。它似乎 不需要File_priv权限。*

答案 5 :(得分:1)

在AWS MySQL 8.0 RDS中导入CSV文件时遇到相同的问题。

  

mysql>将数据本地文件'/tmp/your.csv'装入表test.demo2以','封闭的字段'''以'\ n'终止的行忽略1行;

     

错误1148(42000):此MySQL版本不允许使用命令

1)检查local_infile参数

mysql> SHOW VARIABLES LIKE 'local_infile';

2)从客户端注销,然后使用以下参数重新登录。

mysql -u root -p -h rdsendpoint --local-infile=1

3)运行相同的命令

mysql> LOAD DATA LOCAL INFILE '/tmp/your.csv' INTO TABLE test.demo2 FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\n' IGNORE 1 LINES;


Query OK, 300 rows affected (0.01 sec)

Records: 300  Deleted: 0  Skipped: 0  Warnings: 0

答案 6 :(得分:1)

在使用docker [1]加载数据时遇到此错误。在执行以下后续步骤后,该解决方案开始工作。最初,我创建了数据库和表datavaultfdata。当我尝试导入数据[2]时,出现了错误[3]。然后我做了:

  • SET GLOBAL local_infile = 1;
  • 使用SHOW VARIABLES LIKE 'local_infile';
  • 进行确认
  • 然后,我重新启动mysql会话:mysql -P 3306 -u required --local-infile=1 -p,请参见[4]以创建用户。
  • 重新创建了我的表格,因为这解决了我的问题:
    • use datavault;
    • drop table fdata;
    • CREATE TABLE fdata (fID INT, NAME VARCHAR(64), LASTNAME VARCHAR(64), EMAIL VARCHAR(128), GENDER VARCHAR(12), IPADDRESS VARCHAR(40));
  • 最后,我使用[2]导入了数据。

为了完整起见,我要补充一点,我正在通过docker exec -it testdb sh在容器内运行mysql版本。 mysql版本是用于x86_64上的Linux的 mysql Ver 8.0.17(MySQL Community Server-GPL)这也已通过 mysql.exe版本14.14 Distrib 5.7.14 for Win64(x86_64)进行了测试,这是WAMP64的另一个mysql版本。 [5]中列出了使用的相关命令。


[1] docker run --name testdb -v //c/Users/C/Downloads/data/csv-data/:/var/data -p 3306 -e MYSQL_ROOT_PASSWORD=password -d mysql:latest

[2] load data local infile '/var/data/mockdata.csv' into table fdata fields terminated by ',' enclosed by '' lines terminated by '\n' IGNORE 1 ROWS;

[3] 错误1148(42000):此MySQL版本不允许使用的命令

[4]所需的客户端是使用以下方式创建的:

  • CREATE USER 'required'@'%' IDENTIFIED BY 'password';
  • GRANT ALL PRIVILEGES ON * . * TO 'required'@'%';
  • FLUSH PRIVILEGES;
  • 如果您遇到this errorALTER USER 'required'@'%' IDENTIFIED WITH mysql_native_password BY 'password';
  • ,则可能需要此行Authentication plugin ‘caching_sha2_password’ cannot be loaded

[5]从WAMP64使用mysql的命令:

  • mysql -urequired -ppassword -P 32775 -h 192.168.99.100 --local-infile=1,其中端口是docker ps -a所描述的映射到主机的端口,并且主机IP是使用docker-machine ip获得的(这取决于操作系统以及 Docker < / strong>版本。
  • 如上所述创建数据库 datavault2 和表 fdata
  • load data local infile 'c:/Users/C/Downloads/data/csv-data/mockdata.csv' into table fdata fields terminated by ',' enclosed by '' lines terminated by '\n';
  • 根据我的记录,这是我先前创建 datavault3 fdata 之后的另一种加载文件的方法:mysql -urequired -ppassword -P 32775 -h 192.168.99.100 --local-infile datavault3 -e "LOAD DATA LOCAL INFILE 'c:/Users/C/Downloads/data/csv-data/mockdata.csv' REPLACE INTO TABLE fdata FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n' IGNORE 1 ROWS",并且可以轻松地成功加载数据运行select * from fdata limit 10;后检查。

答案 7 :(得分:0)

带有默认MySQL连接器的SpringBoot 2.1

要解决此问题,请按照说明进行操作

1。 SET GLOBAL local_infile = 1;

要设置此全局变量,请按照MySQL文档中提供的说明进行操作 https://dev.mysql.com/doc/refman/8.0/en/load-data-local.html

2。更改MySQL连接器字符串

allowLoadLocalInfile = true 范例: jdbc:mysql:// localhost:3306 / xxxx?useSSL = false&useUnicode = yes&characterEncoding = UTF-8&allowLoadLocalInfile = true

答案 8 :(得分:0)

请参阅《 MySQL 8.0参考手册》-6.1.6 Security Issues with LOAD DATA LOCAL

在服务器端,运行

*************************************************************
1. Determining whether pyenv is already installed and in PATH
*************************************************************
    - pyenv was not found in PATH.

*********************************************************
2. Determining whether pyenv should be cloned from GitHub
*********************************************************
    - pyenv git repository already cloned to /Users/cispl-reserve/.pyenv-repository. Won't attempt to clone again.

*******************************************
3. Temporarily export necessary pyenv paths
*******************************************

****************************************************************************
4. Checking whether Python can be downloaded (through curl, wget, or aria2c)
****************************************************************************

************************************************************
5. Installing Python 3.7.2. This step may take a few minutes
************************************************************
Downloading openssl-1.0.2k.tar.gz...
-> https://pyenv.github.io/pythons/6b3977c61f2aedf0f96367dcfb5c6e578cf37e7b8d913b4ecb6643c3cb88d8c0
Installing openssl-1.0.2k...
Installed openssl-1.0.2k to /Users/cispl-reserve/.pyenv/versions/3.7.2

Downloading readline-6.3.tar.gz...
-> https://pyenv.github.io/pythons/56ba6071b9462f980c5a72ab0023893b65ba6debb4eeb475d7a563dc65cafd43
Installing readline-6.3...
Installed readline-6.3 to /Users/cispl-reserve/.pyenv/versions/3.7.2

Downloading Python-3.7.2.tar.xz...
-> https://www.python.org/ftp/python/3.7.2/Python-3.7.2.tar.xz
Installing Python-3.7.2...
ERROR: The Python ssl extension was not compiled. Missing the OpenSSL lib?

Please consult to the Wiki page to fix the problem.
https://github.com/pyenv/pyenv/wiki/Common-build-problems


BUILD FAILED (OS X 10.12.1 using python-build 20180424)

Inspect or clean up the working tree at /var/folders/hq/znb1htl568j9rxcgqpgtkg5w0000gp/T/python-build.20190705142457.64163
Results logged to /var/folders/hq/znb1htl568j9rxcgqpgtkg5w0000gp/T/python-build.20190705142457.64163.log

Last 10 log lines:
            install|*) ensurepip="" ;; \
        esac; \
        ./python.exe -E -m ensurepip \
            $ensurepip --root=/ ; \
    fi
Looking in links: /var/folders/hq/znb1htl568j9rxcgqpgtkg5w0000gp/T/tmpobl4rhc0
Collecting setuptools
Collecting pip
Installing collected packages: setuptools, pip
Successfully installed pip-18.1 setuptools-40.6.2
Exiting due to failure

==============================================
II. Creating self-contained EBCLI installation
==============================================
./aws-elastic-beanstalk-cli-setup/scripts/bundled_installer: line 51: /Users/cispl-reserve/.pyenv/versions/3.7.2/bin/python: No such file or directory
./aws-elastic-beanstalk-cli-setup/scripts/bundled_installer: line 28: echo_with_indentation: command not found

在客户端,运行

mysql.server start --local-infile

答案 9 :(得分:0)

最正确的答案是正确的。请首先直接在MySQL CLI中检查它们。如果此方法解决了该问题,则可能需要使其在Python3中运行,只需将其作为参数传递给MySQLdb.connect

self.connection = MySQLdb.connect(
                    host=host, user=settings_DB.db_config['USER'],
                    port=port, passwd=settings_DB.db_config['PASSWORD'], 
                    db=settings_DB.db_config['NAME'],
                    local_infile=True)

答案 10 :(得分:0)

只需一点补充。

在mysql.connector版本8.0.16中找到了另一个轮回 现在,它需要 allow_local_infile = True ,否则您将看到上述错误。 在以前的版本中工作。

conn = mysql.connector.connect(host=host, user=user, passwd=passwd, database=database, allow_local_infile=True)

答案 11 :(得分:0)

如果您正在使用Java8或+版本,JDBC和MySql8并遇到此问题,请尝试以下操作:

将参数添加到连接字符串:

jdbc:mysql://localhost:3306/tempDB?allowLoadLocalInfile=true

还要设置

  

local_infile = 1

在my.cnf文件中。

最新版本的mysql-java-connector可能不允许直接连接到本地文件。因此,使用此参数,您可以启用它。这对我有用。