source

MySQL에서 --secure-file-priv를 해결하려면 어떻게 해야 합니까?

factcode 2022. 9. 4. 14:26
반응형

MySQL에서 --secure-file-priv를 해결하려면 어떻게 해야 합니까?

MySQL을 .LOAD DATA절을 클릭합니다.「 」 「 」 、 「 」

LOAD DATA INFILE "text.txt" INTO table mytable;

다음 오류가 발생하였습니다.

MySQL 서버가 --secure-file-priv 옵션으로 실행 중이므로 이 문을 실행할 수 없습니다.

이 오류에 대처하려면 어떻게 해야 하나요?

같은 에러 메세지에서 다른 질문을 확인했지만, 해결 방법을 찾을 수 없습니다.

MySQL 5.6을 사용하고 있습니다.

그것은 의도한 대로 작동하고 있다.MySQL 서버가 --secure-file-priv 옵션으로 시작되었습니다.이 옵션은 파일을 로드할 수 있는 디렉토리를 제한합니다.LOAD DATA INFILE.

SHOW VARIABLES LIKE "secure_file_priv";이치노

두 가지 옵션이 있습니다.

  1. 을 에서 합니다.secure-file-priv.
  2. 「」를 무효로 .secure-file-priv이것은 기동시에 삭제할 필요가 있습니다.동적으로 변경할 수 없습니다.이를 수행하려면 MySQL 시작 매개 변수(플랫폼에 따라 다름)와 my.ini를 확인하십시오.

이 문제를 해결한 것은LOCALoption()을 선택합니다.

LOAD DATA LOCAL INFILE "text.txt" INTO TABLE mytable;

자세한 내용은 이쪽에서 확인하실 수 있습니다.

LOCAL을 지정하면 파일은 클라이언트호스트의 클라이언트프로그램에 의해 읽혀져 서버로 송신됩니다.파일은 정확한 위치를 지정하기 위해 전체 경로 이름으로 지정할 수 있습니다.상대 경로 이름으로 지정될 경우 클라이언트 프로그램이 시작된 디렉토리를 기준으로 이름이 해석됩니다.

Ubuntu 14 및 Mysql 5.5.53 에서는, 이 설정은 디폴트로 유효하게 되어 있는 것 같습니다.하려면 , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , .secure-file-priv = "" groupmysqld의 .cnf 파일로 이동합니다:-cnf:-).

[mysqld]
secure-file-priv = ""

@는 @vhu를 SHOW VARIABLES LIKE "secure_file_priv";은 되돌아왔다.C:\ProgramData\MySQL\MySQL Server 8.0\Uploads\그래서 꽂아도 안 되더라고요.

에 때my.ini조금 되었습니다.file direct는 file direct입니다.

C:/ProgramData/MySQL/MySQL Server 8.0/Uploads

그리고 그걸 작동시켰더니 작동했어요.유일한 차이점은 슬래시의 방향이었다.

MySQL5.7.11을 Debian에서 작업하고 있는데 디렉토리를 보기 위해 작동한 명령어는 다음과 같습니다.

mysql> SELECT @@global.secure_file_priv;

7에서는, Windows 7 을 무효로 하기 동작했습니다.secure-file-priv(vhu의 답변에서 옵션 2번):

  1. 서버 하려면 MySQL 서버 를 종료해야 .services.msc.
  2. ★★★★★★★★★★★★★★★로 이동C:\ProgramData\MySQL\MySQL Server 5.6 )ProgramData
  3. '열다'를 열어보세요.my.ini이치노
  4. 'secure-file-priv'를 검색합니다.
  5. 줄의 선두에 '#'을 추가하여 줄에 코멘트를 추가합니다.MySQL Server 5.7.16을 사용합니다.빈 해요. - 하다, 하다, 요.secure-file-priv=""
  6. 파일을 저장합니다.
  7. 로 이동하여 서버 합니다.services.msc.

파일이 머신에 로컬인 경우 명령어로 LOCAL을 사용합니다.

LOAD DATA LOCAL INFILE "text.txt" INTO table mytable;

이 스레드는 이 투고 시점에서 57만 번 재생되었습니다.솔직히 언제 MySQL이 지나치게 보호적인 불합리한 엄마가 되었나요?얼마나 시간이 걸리는 보안 시도인가. 우리를 가두는 역할만 할 뿐이다!

많은 검색과 시도 끝에 모든 것이 실패했습니다.솔루션:

나에게 효과가 있었던 것은, 다음과 같습니다.

  1. ..csvPhpMyAdmin(cmd)
  2. 생성하다.sqlfilename을 클릭합니다.
  3. ..sqlfilename을 클릭합니다.
  4. ★★★.sqlMySQL Workbench 。

나한테 효과가 있었던 건

  1. 폴더 .secure-file-priv.

    해당 유형을 찾으려면:

    mysql> show variables like "secure_file_priv";  
    
  2. '아예'가 .local_infile = 1.

    입력:

    mysql> show variables like "local_infile";
    

    다음과 같은 경우:

    +---------------+-------+
    | Variable_name | Value |
    +---------------+-------+
    | local_infile  | OFF   |
    +---------------+-------+
    

    그런 다음 한 번의 입력으로 설정합니다.

    mysql> set global local_infile = 1;
    
  3. 파일의 전체 경로를 지정합니다.내 경우:

    mysql> load data infile "C:/ProgramData/MySQL/MySQL Server 8.0/Uploads/file.txt" into table test;
    

'secure-file-priv'에서도 같은 문제가 발생하였습니다..ini 파일의 코멘트는 기능하지 않고, 「secure-file-priv」로 지정된 디렉토리의 파일 이동도 기능하지 않습니다.

마지막으로 dbc의 제안대로 'secure-file-priv'를 빈 문자열과 동일하게 하는 것이 성공했습니다.그래서 만약 누군가가 위의 답을 시도했다가 막히면, 바라건대 이렇게 하는 것이 도움이 될 것이다.

mysql 8.0 버전의 경우 다음을 수행할 수 있습니다.

mysql.server stop
mysql.server start --secure-file-priv=''

맥하이 시에라에서 작동했어요

Ubuntu에서 실행 중인 경우 MySQL이 폴더에 쓸 수 있도록 Apparmor를 구성해야 할 수도 있습니다. 예를 들어 다음과 같습니다.

다음 행을 /etc/apparmor.d/usr.sbin.mysqld 파일에 추가합니다.

/var/lib/mysql-files/* rw

다음으로 /etc/mysql/my.cnf 섹션에 다음 2개의 설정 행을 추가합니다.

[client]
loose-local-infile = 1

[mysqld]
secure-file-priv = ""

SQL은 다음과 같습니다.

select id from blahs into outfile '/var/lib/mysql-files/blahs';

그것은 나에게 효과가 있었다.행운을 빕니다.

노드를 작성했습니다.노드를 실행 중인 경우 JS 가져오기 스크립트JS 및 사용자 데이터는 다음 형식(큰따옴표 + 쉼표 및 \n 새 줄)입니다.

INSERT INTO <your_table> VALUEs( **CSV LINE **)

이것은 http://localhost:5000/import에서 실행되도록 설정되어 있습니다.

쿼리 문자열을 만듭니다.

"city","city_ascii","lat","lng","country","iso2","iso3","id"
"Tokyo","Tokyo","35.6850","139.7514","Japan","JP","JPN","1392685764",
...

server.displaces

const express = require('express'),
   cors = require('cors'),
   bodyParser = require('body-parser'),
   cookieParser = require('cookie-parser'),
   session = require('express-session'),
   app = express(),
   port = process.env.PORT || 5000,
   pj = require('./config/config.json'),
   path = require('path');

app.use(bodyParser.json());
app.use(cookieParser());
app.use(cors());


app.use(
   bodyParser.urlencoded({
      extended: false,
   })
);

var Import = require('./routes/ImportRoutes.js');

app.use('/import', Import);
if (process.env.NODE_ENV === 'production') {
   // set static folder
   app.use(express.static('client/build'));

   app.get('*', (req, res) => {
      res.sendFile(path.resolve(__dirname, 'client', 'build', 'index.html'));
   });
}

app.listen(port, function () {
   console.log('Server is running on port: ' + port);
});

Import Routes 。js

const express = require('express'),
   cors = require('cors'),
   fs = require('fs-extra'),
   byline = require('byline'),
   db = require('../database/db'),
   importcsv = express.Router();

importcsv.use(cors());

importcsv.get('/csv', (req, res) => {

   function processFile() {
      return new Promise((resolve) => {
         let first = true;
         var sql, sqls;
         var stream = byline(
            fs.createReadStream('../PATH/TO/YOUR!!!csv', {
               encoding: 'utf8',
            })
         );

         stream
            .on('data', function (line, err) {
               if (line !== undefined) {
                  sql = 'INSERT INTO <your_table> VALUES (' + line.toString() + ');';
                  if (first) console.log(sql);
                  first = false;
                  db.sequelize.query(sql);
               }
            })
            .on('finish', () => {
               resolve(sqls);
            });
      });
   }

   async function startStream() {
      console.log('started stream');
      const sqls = await processFile();
      res.end();
      console.log('ALL DONE');
   }

   startStream();
});

module.exports = importcsv;

db.filename은 설정 파일입니다.

const Sequelize = require('sequelize');
const db = {};
const sequelize = new Sequelize(
   config.global.db,
   config.global.user,
   config.global.password,
   {
      host: config.global.host,
      dialect: 'mysql',
      logging: console.log,
      freezeTableName: true,

      pool: {
         max: 5,
         min: 0,
         acquire: 30000,
         idle: 10000,
      },
   }
);

db.sequelize = sequelize;
db.Sequelize = Sequelize;

module.exports = db;

면책사항:이것은 완벽한 솔루션이 아닙니다.저는 타임라인 아래에 있고 Import할 데이터가 많은 개발자에게만 게시합니다.이러한 문제가 발생하고 있습니다.나는 이것에 많은 시간을 허비했고 나는 또 다른 시간을 허비하고 싶다.

이것 때문에 여러 가지 문제가 있었어요.my.cnf와 이 문제의 다른 버전이 보여주려고 했던 모든 종류의 이상한 것들을 바꾸고 있었습니다.

나에게 효과가 있었던 것:

내가 받고 있는 오류

The MySQL server is running with the --secure-file-priv option so it cannot execute this statement

/usr/local/mysql/support-files/mysql.server를 열고 다음 행을 변경하여 수정할 수 있습니다.

$bindir/mysqld_safe --datadir="$datadir" --pid-file="$mysqld_pid_file_path" -- $other_args >/dev/null &
  wait_for_pid created "$!" "$mysqld_pid_file_path"; return_value=$?

로.

$bindir/mysqld_safe --datadir="$datadir" --pid-file="$mysqld_pid_file_path" --secure-file-priv="" $other_args >/dev/null &
  wait_for_pid created "$!" "$mysqld_pid_file_path"; return_value=$?

macOS Catalina에서는 다음 절차에 따라 설정했습니다.secure_file_priv

1. MySQL 서비스를 중지합니다.

 sudo /usr/local/mysql/support-files/mysql.server stop

2. MYSQL 연결 --secure_file_priv 시스템 변수 재시작

sudo /usr/local/mysql/support-files/mysql.server start --secure-file-priv=YOUR_FILE_DIRECTORY

주의: 빈 값을 추가하면 문제가 해결됩니다.MYSQL은 데이터를 디렉토리 /usr/local/mysql/data/YOUR_DB_TABLE/EXPORT_FILE로 내보냅니다.

sudo /usr/local/mysql/support-files/mysql.server start --secure-file-priv=

고마워요.

이것은 나에게 효과가 있었습니다(LOAD DATE INFILE...라는 문장에서 현재 MySQL 버전에서 LOCAL을 사용할 수 없다는 추가적인 문제가 있었습니다).)

sudo /usr/local/mysql/support-files/mysql.server start --secure-file-priv='' --local-infile

위의 내용은 제 기계상의 지정된 경로에 적용됩니다.경로를 조정해야 할 수도 있습니다.

다음으로 다음을 사용합니다.

mysql -u root -p

한 가지 중요한 점은 MySQL 데이터 폴더에 CSV가 있어야 한다는 것입니다.내 컴퓨터에서는 /usr/local/mysql-8.0.18-macos10.14-x86_64/data에 있습니다.

데이터 폴더에서 CSV를 삭제하기 위해 필요한 경우 폴더 사용 권한을 변경할 수 있습니다.

셋업:
MacOS Catalina 버전 10.15.5
MySQL 버전 8.0.18

MySQL은 이 시스템 변수를 사용하여 파일을 가져올 수 있는 위치를 제어합니다.

mysql> SHOW VARIABLES LIKE "secure_file_priv";
+------------------+-------+
| Variable_name    | Value |
+------------------+-------+
| secure_file_priv | NULL  |
+------------------+-------+

따라서 문제는 다음과 같은 시스템 변수를 변경하는 방법입니다.secure_file_priv.

  1. 셧다운mysqld
  2. sudo mysqld_safe --secure_file_priv=""

다음과 같이 표시됩니다.

mysql> SHOW VARIABLES LIKE "secure_file_priv";
+------------------+-------+
| Variable_name    | Value |
+------------------+-------+
| secure_file_priv |       |
+------------------+-------+

Linux 에서는 my.cnf 파일을 편집해야 합니다.

/etc/mysql/my.cnf

및 변경26 line numberparam은 다음과 같습니다.

secure-file-priv= <your data path directory like /home/user/data>

그런 다음 MySQL을 다시 시작하고 다시 시도하십시오.

도커에서는 my.cnf 파일을 my.cnf 파일과 함께 컨테이너에 마운트해야 합니다.이 명령어는 docker-download 또는 수동으로 추가해야 합니다.

volumes:
  - ./persistent:/var/lib/mysql
  - ./conf/my.cnf:/etc/mysql/my.cnf

다음으로 /conf/my.cnf를 호스트에서 변경하고 상위 접근법과 마찬가지로 secure-file-priv 파라미터를 설정합니다.또한 데이터를 mysql 컨테이너에 마운트하고 해당 경로를 secure-file-priv 파라미터로 설정하고 서비스를 재시작해야 마지막으로 데이터를 로드할 수 있습니다.

다음 명령을 사용하여 설정을 확인할 수 있습니다.

SHOW VARIABLES LIKE "secure_file_priv";

Windows 10에서 이 문제가 발생했습니다. "--secure-file-priv in MySQL" 이 문제를 해결하기 위해 다음을 수행했습니다.

  1. 윈도우 검색(왼쪽 아래)에서 "powershell"을 입력했습니다.
  2. powershell을 오른쪽 클릭하여 admin으로 실행.
  3. 서버 bin 파일로 이동.(C:\Program Files\My)SQL\MySQL Server 5.6\bin);
  4. ./mysqld 라고 입력.
  5. "Enter"를 누릅니다.

서버는 예상대로 기동했습니다.

컨피규레이션파일을 변경하지 않고,

  1. secure_file_priv@ 게시된 @vhu를 합니다.SHOW VARIABLES LIKE "secure_file_priv".
  2. 예를 들어 과 같습니다.select * from table into outfile 'secure_file_priv_PATH/OUTPUT-FILE' ... rest of your query

이것은 ubuntu 18.04 LTS mysql 5.7.29의 mysql 쉘에서 작동했습니다.

는 가했 the the the를 추가했다.LOCAL하다

Loading local data is disabled - this must be enabled on both the client and server sides

이 문제를 해결하기 위해 나는 여기 있는 세 가지 단계를 따랐습니다.

설명하겠습니다.secure_file_priv:

여기 하겠습니다.LOAD DATA:

경우 하고 있기 에 MySQL 설정 .secure_file_priv.

  • 이 더 하기 위해secure_file_priv에서 그 .
  • MySQL의 Docker Hub에 대한 의견을 읽어보십시오.https://hub.docker.com/_/mysql

(도커) mysql 기본값을 확인하려면:

$ docker run -it --rm mysql --verbose --help
Variables (--variable-name=value)
and boolean options {FALSE|TRUE}          Value (after reading options)
----------------------------------------- -----------------------------
...
local-infile                              FALSE
...
secure-file-priv                          NULL
...

실제로 컨피규레이션파일에는 다음과 같이 표시됩니다.

root@a2b1e0c46541:/# cat /etc/mysql/my.cnf
#
# (...license...)
#
# The MySQL  Server configuration file.
#
# For explanations see
# http://dev.mysql.com/doc/mysql/en/server-system-variables.html

[mysqld]
pid-file        = /var/run/mysqld/mysqld.pid
socket          = /var/run/mysqld/mysqld.sock
datadir         = /var/lib/mysql
secure-file-priv= NULL

# Custom config should go here
!includedir /etc/mysql/conf.d/

공식 이미지 사용(README 설명 참조):

$ docker run --name mysql -e MYSQL_ROOT_PASSWORD=secret -d mysql \
         --secure_file_priv=/data

「」를 LOCAL INFILE합니다.local_infile=TRUE.

여러분도 할 수 예요.LOAD DATA INFILE '/data/data.csv' INTO TABLE some_table.

메모: 같은 태스크에서 (위의) "INFILE" 문제가 해결된 후 CSV 데이터에 빈 값이 있는 문제가 발생했습니다. 질문에 대한 답변(및 질문)은 매우 도움이 됩니다.https://stackoverflow.com/a/5968530/687896

MySQL 5.6.23을 실행하는 MacOS Mojave의 경우 파일을 쓰지만 로드하지 않는 문제가 있었습니다(이전 버전의 Mac OS에서는 볼 수 없었습니다).이 질문에 대한 대부분의 답변은 다른 시스템에 대한 것이었기 때문에 다른 Mac 사용자에게 도움이 될 경우에 대비하여 이 문제를 해결한 my.cnf 파일을 게시해야겠다고 생각했습니다./etc/my.cnf 입니다.

[client]
default-character-set=utf8

[mysqld]
character-set-server=utf8
secure-file-priv = ""
skip-external-locking

(국제화는 질문과는 무관합니다.)

그 외에는 필요 없습니다.MySQL 서버를 껐다가 다시 켜면 됩니다(Mac에 대해 설명 중).

여기서도 같은 문제에 직면했습니다. ERRORCODE 2. 네, 대부분의 답변은 일리가 있지만 가장 간단한 방법을 시도했습니다.

파일 경로에 이중 슬래시를 사용했습니다.

질문 전체를 포함한 샘플 패스와 함께 >> Try IT를 사용해보고, 그것이 당신에게 효과가 있었는지 모든 사람에게 알려주세요.

INFILE 이이 load load load load load"E:\Irfan One Drive \드라이브 Qtech\문서 1개 \ 플 suppliers suppliers suppliers suppliers \HB \ hot \ Transfer. " INTO TABLE Hotel Transfer Zone . csv " h h h h 。temp_hb_transfer로 끝나는 (옵션으로 로 )
'\n'로

언급URL : https://stackoverflow.com/questions/32737478/how-should-i-resolve-secure-file-priv-in-mysql

반응형