오류: 로컬 데이터 로딩이 비활성화되었습니다. 클라이언트 측과 서버 측 모두에서 활성화해야 합니다.
다음과 같은 가장 명백한 질문 외에는 다른 사람들이 유사한 질문에 대해 제공한 답변을 이해할 수 없습니다.
mysql> SET GLOBAL local_infile=1;
Query OK, 0 rows affected (0.00 sec)
mysql> SHOW GLOBAL VARIABLES LIKE 'local_infile';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| local_infile | ON |
+---------------+-------+
1 row in set (0.01 sec)
이것은 정확한 코드가 제공되었다는 것을 의미합니다."클라이언트"측과 "서버"측에서 로컬 데이터를 활성화하기 위해 필요한 작업을 단계별로 설명해 주시면 감사하겠습니다.클라이언트 측에서 로컬 데이터를 활성화한 것 같은데 "서버 측"을 활성화하기 위해 컴퓨터에 어떤 명령을 내려야 하는지 모르겠습니다.저는 기술에 전혀 정통하지 않기 때문에 MySQL 워크벤치에 데이터가 업로드된 지점을 파악하고 싶을 뿐입니다.
ERROR 3948 (42000): Loading local data is disabled; this must be enabled on both the client and server sides
CREATE TABLE toys (
uniq_id VARCHAR(1000),
product_name VARCHAR(1000),
manufacturer VARCHAR(1000),
price VARCHAR(1000),
number_available_in_stock VARCHAR (1000),
number_of_reviews INT,
number_of_answered_questions INT,
average_review_rating VARCHAR(1000),
amazon_category_and_sub_category VARCHAR(1000),
customers_who_bought_this_item_also_bought VARCHAR(1000),
description VARCHAR(1000),
product_information VARCHAR(1000),
product_description VARCHAR(1000),
items_customers_buy_after_viewing_this_item VARCHAR(1000),
customer_questions_and_answers VARCHAR(1000),
customer_reviews VARCHAR(1000),
sellers VARCHAR(1000)
);
LOAD DATA LOCAL INFILE ‘/Users/BruddaDave/Desktop/amazonsample.csv’ INTO TABLE toys
FIELDS TERMINATED BY ‘,’
LINES TERMINATED BY ‘\n’
IGNORE 1 LINES
(uniq_id, product_name, manufacturer, price, number_available_in_stock, number_of_reviews, number_of_answered_questions, average_review_rating, amazon_category_and_sub_category, customers_who_bought_this_item_also_bought, description, product_information, product_description, items_customers_buy_after_viewing_this_item, customer_questions_and_answers, customer_reviews, sellers)
;
명령줄 셸을 사용하여 .csv 파일을 MySQL로 Import할 수 있으면 좋겠습니다.
LOCAL 기능이 서버측 또는 클라이언트측에서 디세블로 되어 있는 경우 LOAD DATA LOCAL 문을 발행하려고 하는 클라이언트는 다음 오류 메시지를 받습니다.
ERROR 3950 (42000): Loading local data is disabled; this must be
enabled on both the client and server side
텍스트 파일 펫을 로드하고 싶을 때도 같은 문제가 발생하였습니다.mysql의 튜토리얼에 따라 애완동물 테이블에 txt를 추가합니다.https://dev.mysql.com/doc/refman/8.0/en/loading-tables.html
온라인으로 검색한 후 다음 순서로 수정했습니다.
- 다음 명령을 사용하여 글로벌 변수를 설정합니다.
mysql> SET GLOBAL local_infile=1;
Query OK, 0 rows affected (0.00 sec)
- 현재 서버 종료:
mysql> quit
Bye
- local-infile system variable을 사용하여 서버에 접속합니다.
mysql --local-infile=1 -u root -p1
이 변수는 LOAD DATA 문의 서버 측 LOCAL 기능을 제어합니다.local_infile 설정에 따라 서버는 클라이언트 측에서 LOCAL이 네이블로 되어 있는 클라이언트에 의한 로컬 데이터 로드를 거부 또는 허용합니다.LOAD DATA LOCAL 문을 명시적으로 거부 또는 허용하려면(빌드 시 또는 런타임에 클라이언트프로그램 및 라이브러리가 어떻게 설정되어 있는지에 관계없이) local_infile을 각각 비활성화 또는 활성화하여 mysqld를 시작합니다.local_infile은 런타임에도 설정할 수 있습니다.
- 데이터베이스를 사용하여 파일을 테이블에 로드합니다.
mysql> use menagerie
Database changed
mysql> load data local infile '/path/pet.txt' into table pet;
Query OK, 8 rows affected, 7 warnings (0.00 sec)
작동합니까?
참고 자료:
https://dev.mysql.com/doc/refman/8.0/en/load-data-local-security.html https://dev.mysql.com/doc/refman/8.0/en/source-configuration-options.html#option_cmake_enabled_local_infile https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_local_infile
local_infile이 비활성화 또는 활성화 되어 있는지 확인할 수 있습니다.그러니까, 이걸 시도해봐
mysql> show global variables like 'local_infile';
그게 나타나면...
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| local_infile | OFF |
+---------------+-------+
(this means local_infile is disable)
이것으로 유효하게 합니다.
mysql> set global local_infile=true;
그런 다음 다시 확인하고 mysql 서버에서 종료합니다.
mysql> exit
이제 local_infile을 사용하여 서버를 연결/로그인해야 합니다.이를 위해 터미널 명령줄에서 이 코드를 실행합니다.
mysql --local_infile=1 -u root -ppassword DB_name
이제 로컬 파일에서 데이터를 로드합니다.
mysql> load data local infile 'path/file_name.extention' into table table_name;
내 PC에 작업 중이야. 이거 해봐.감사합니다.
Ubuntu 20.04 / MySQL 8에서 이 문제를 수정해야 했던 것은 다음과 같습니다.
nano /etc/mysql/mysql.conf.d/mysqld.cnf
-
[mysqld]
츠키다
local_infile = 1
- 파일 하단에 다음 두 줄을 추가합니다.
[client]
local_infile = 1
- 해 주세요.
SET GLOBAL local_infile=1;
메모: 위 내용을 수정하여 다음 사항을 확인합니다.local_infile=1
붙습니다.[mysqld]
이렇게 달리기를 할 가 없어진다.SET GLOBAL local_infile=1;
각 리부트 후에.
my.cnf
삭제:
[client]
local_infile=1
단말기에서 다음 명령을 입력합니다.
SHOW GLOBAL VARIABLES LIKE 'local_infile';
의 0
oefalse
명령어 '하다'를 합니다.
SET GLOBAL local_infile = TRUE;
MySQL 8.0.20 기본 설치의 경우:
i) C:\ProgramData\My에 있는 초기화 파일을 찾습니다.SQL\MySQL Server 8.0\my.ini.
ii) 메모장에서 my.ini 파일을 엽니다.
iii) [CLIENT]섹션에서 [client], [mysql], [SERVER]섹션에서 [mysqld] 헤더를 찾습니다.
iv) 각 헤더 아래에 다음 문장을 추가합니다.
local_infile=온
v) 파일을 저장하고 Windows 로컬 서비스에서 MySQL80 서비스를 재시작합니다.
그건 작동할 거야.
질문에서 말한 것처럼 클라이언트와 서버 모두에서 활성화 되어야 하므로 내 경우 서버 측에서 활성화 할 수 있었습니다.
SET GLOBAL local_infile = true;
위의 사용(서버를 다시 시작할 때 꺼짐 상태였던 영구적이지 않음) 때문에 아래를 my.cnf에 추가합니다.
[mysqld]
local-infile
이것은 동작하고 서버측도 괜찮기 때문에 클라이언트측에서는 (내 것은 스프링 어플리케이션이었다)를 추가해야 합니다.
allowLoadLocalInfile=true
이것은 접속 문자열의 끝에 있습니다.이것을 추가한 후에 올바르게 동작하는 것이 아래에 내 접속 문자열입니다(문자열의 끝에 있는 것을 알 수 있습니다).
jdbc.url=jdbc:mysql://127.0.0.1:<port>/<dbname>?autoReconnect=true&zeroDateTimeBehavior=convertToNull&useUnicode=yes&characterEncoding=UTF-8&allowLoadLocalInfile=true
위의 순서를 모두 실행해도, 에러 코드 2068이 표시된다. 액세스 제한으로 인해 LOAD DATA LOCAL INFILE 파일 요청이 거부되었습니다.해결책은 SQL 문에서 "LOCAL"이라는 단어를 삭제하는 것이었습니다.
데이터 파일 로드...
3단계에서 막힌 사용자의 경우:
mysql --local-infile=1 -u 루트 -p1
내가 그랬던 것처럼, 내가 한 일은 이렇다.
- 유형
cd "C:\Program Files\My"SQL\MySQL Server 8.0\bin"
명령 프롬프트에 표시됩니다.
- 유형
mysql --local_infile=1 -u root -pABC menagerie
여기서 ABC는 MySQL 비밀번호, menagerie는 작업 중인 데이터베이스입니다(ABC와 menagerie는 각각 비밀번호와 데이터베이스 이름으로 바꿉니다).
- MySQL이 명령 프롬프트에서 열립니다.다음과 같이 명령을 입력할 수 있습니다.
mysql> menagerie 사용
데이터베이스가 변경되었습니다.
mysql> 로컬 파일 '/path/pet.txt'를 테이블 페트에 로드합니다.
쿼리 OK, 영향을 받는 행 8개, 경고 7개(0.00초)
잘 될 거야
Ubuntu 20.04 / MySQL 8: 이 접근방식으로 문제를 해결했습니다.
- systemctl stop mysql
- nano /etc/mysqld/mysqld.cnf
- unter [ mysqld ]local_infile = 1 추가
- systemctl start mysql 또는 restart mysql을 중지한 경우 다시 시작합니다.
SQL 스크립트에서 이 글로벌 설정 변경을 실행하면 도움이 됩니다.
SET GLOBAL local_infile=1;
PyMySQL과 SQL Chemy에서 문제가 발생했습니다.이게 작동하게 된 몇 가지 이유가 있습니다.
DB 엔진에 연결하는 방법은 다음과 같습니다.
connect_args = ssl_args connect_args['local_infile'] = True qry_engine = create_engine('mysql+pymysql://' + db_uid + ':' + db_pw + '@' + db_addr, connect_args=connect_args, pool_recycle=3600, echo=False)
ssl_args는 내 ssl 파라미터를 포함하는 딕셔너리입니다(SSL을 사용하여 연결하지 않지만 connect_args가 사전을 예상하고 있는 경우 생략할 수 있습니다).
데이터를 로드할 때 다음을 실행해야 합니다.
sql_stmt = 'SET GLOBAL local_infile = TRUE' common.qry_engine.execute(text(sql_stmt)) sql_stmt = "LOAD DATA LOCAL INFILE '" + filepath + "' INTO TABLE " + self.tst_tbl.tbl.fullname common.qry_engine.execute(text(sql_stmt))
SET GLOBAL 명령어를 사용하지 않고 시도하면 "클라이언트와 서버 양쪽에서 활성화해야 합니다"라는 메시지가 나타납니다.
언급URL : https://stackoverflow.com/questions/59993844/error-loading-local-data-is-disabled-this-must-be-enabled-on-both-the-client
'programing' 카테고리의 다른 글
Java 9 컴파일러의 --release 플래그는 무엇입니까? (0) | 2022.09.16 |
---|---|
바이트의 적절한 휴지 상태 주석 [] (0) | 2022.09.16 |
마지막 이후의 모든 정보를 수집하는 정규 표현식 / (1) | 2022.09.16 |
상태가 렌더링되기 전에 Vue.js/vuex getters 오류가 발생했습니다. (0) | 2022.08.28 |
vuex 디스패치 응답 처리 방법 (0) | 2022.08.28 |