143

Ubuntu 12 LTS で Mysql 5.5 を実行しています。my.cnf で LOAD DATA LOCAL INFILE を有効にするにはどうすればよいですか?

さまざまな場所で構成に local-infile を追加しようとしましたが、「使用されたコマンドはこの MySQL バージョンでは許可されていません」というメッセージが引き続き表示されます。

4

19 に答える 19

202

MySQL 5.5のマニュアルページから:

LOCALは、サーバーとクライアントの両方がそれを許可するように構成されている場合にのみ機能します。たとえば、mysqldが--local-infile = 0で開始された場合、LOCALは機能しません。6.1.6項「LOADDATALOCALのセキュリティ問題」を参照してください。

次のオプションを設定する必要があります。

local-infile=1

my.cnfファイルの[mysql]エントリに追加するか、-local-infileオプションを指定してmysqlクライアントを呼び出します

mysql --local-infile -uroot -pyourpwd yourdbname

「ローカル入力ファイル」機能サーバー側を有効にするには、 [mysqld]セクションにも同じパラメーターが定義されていることを確認する必要があります。

これはセキュリティ上の制限です。

于 2012-05-25T23:25:35.273 に答える
67

編集する必要がある my.cnf ファイルは/etc/mysql/my.cnfファイルです。ただ:

sudo nano /etc/mysql/my.cnf

それから加えて:

[mysqld]
local-infile 

[mysql]
local-infile 

ヘッダー[mysqld][mysql]は既に指定されています。ファイル内でそれらを見つけて、それぞれの下にlocal-infileを追加するだけです。

Ubuntu 12.04 LTS の MySQL 5.5 で動作します。

于 2012-07-18T10:03:10.820 に答える
29

ドライバ php5-mysql をネイティブ ドライバに置き換えます

デビアンで

apt-get install php5-mysqlnd
于 2013-09-20T14:53:13.790 に答える
13

ubuntu での mysql のフレーバーがどのような状況でも機能せず、それでも 1148 エラーが発生する場合は、load data infileコマンド ラインからコマンドを実行できます。

端末ウィンドウを開く

走るmysql -u YOURUSERNAME -p --local-infile YOURDBNAME

mysqluser パスワードを挿入するように求められます

MySQLMonitor を実行すると、コマンド プロンプトが表示されます。mysql>

コマンドを実行しますload data infile(セミコロンで終わることを忘れないでください;

このような:

load data local infile '/home/tony/Desktop/2013Mini.csv' into table Reading_Table FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\n';
于 2013-08-05T23:21:26.203 に答える
7

また、他の読者の場合、Django でこれを実行しようとしていて、サーバーが local_infile を許可している場合 (mysql クライアント経由で SHOW VARIABLES と入力して確認できます)、これをsettings.pyファイルに追加できます (python MySQLdb では実行されないため)。 t はデフォルトで .my.cnf ファイルを読み取ります):

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'mydb',
        'USER': 'myname',
        'PASSWORD': 'mypass',
        'HOST': 'myserver',
        'PORT': '3306',
        'OPTIONS' : {
            'local_infile':1,
        },
    }
}
于 2013-08-05T21:45:16.080 に答える
3

csv ファイルが dbと同じ場所にある場合は、LOAD DATA INFILEのLOCALを削除する必要があります。そうしないと、エラーが発生します。

使用されたコマンドは、この MySQL バージョンでは許可されていません

于 2015-01-12T14:00:24.830 に答える
3

mysqli 接続を確立する方法に注意する必要があります。このソリューションの完全な功績は、ソースのホルヘ・アルバレンケに与えられます

それを修正するために、私はしなければなりませんでした:

  • my.cnf の [mysqld] および [mysql] セクションに local-infile=1 を追加します (上記のコメントで説明されているように)。
  • mysqli_real_connect 関数 ( PHP ドキュメント) を使用します。

問題は、その関数を使用すると、LOAD DATA LOCAL INFILE のサポートを明示的に有効にできることです。例(手続き型):

$link = mysqli_init();
mysqli_options($link, MYSQLI_OPT_LOCAL_INFILE, true);
mysqli_real_connect($link, $host, $username, $password, $database);

またはオブジェクト指向

$mysqli = mysqli_init();
$mysqli->options(MYSQLI_OPT_LOCAL_INFILE, true);
$mysqli->real_connect($host, $username, $password, $database);
于 2014-10-10T13:20:08.170 に答える
1

config を変更する必要のない以下の方法を使用し、mysql-5.5.51-winx64 および 5.5.50-MariaDB でテストしました。

'load data...' を .sql ファイルに入れます (例: LoadTableName.sql)

LOAD DATA INFILE 'D:\\Work\\TableRecords.csv' INTO TABLE tbl1 FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\r\n' IGNORE 1 LINES (col1,col2);

それから:

mysql -uroot -pStr0ngP@ss -Ddatabasename -e "source D:\Work\LoadTableName.sql"
于 2016-08-13T16:49:35.360 に答える
1

これは私にとって少し奇妙でした。ある日から次の日まで、何日も機能していたスクリプトが機能しなくなりました。新しいバージョンの mysql や何らかのアップグレードはありませんでしたが、同じエラーが発生していたので、CSV ファイルを最後に試してみると、スクリプトごとに期待される ( の代わりに行末が \n を使用していることに気付きました) ) \r\n そのため、正しい EOL で保存し、問題なくスクリプトを再度実行します。

mysqlが私に言うのはちょっと奇妙だと思います。理由が完全に異なるため、使用されたコマンドはこのMySQLバージョンでは許可されていません。

私の作業コマンドは次のようになります。

LOAD DATA LOCAL INFILE 'file-name' IGNORE INTO TABLE table-name CHARACTER SET latin1 FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '\"' LINES TERMINATED BY '\r\n' IGNORE 1 LINES.
于 2016-02-04T16:08:44.817 に答える
0

わかりました、ここで奇妙なことが起こっています。これを機能させるために、 /etc/mysql/my.cnf で構成を変更する必要はありません。ターミナルで現在の mysql サービスを再起動するだけです。

sudo service mysql restart

次に、バグを「再現」したい場合は、Apache サービスを再起動するだけです。

sudo service apache2 restart

これは、次のコマンドを入力して再度修正できます。

sudo service mysql restart

そのため、apache2 は、起動時にこの機能を許可しないように何らかの処理を行っているようです (その後、mysql サービスを再起動すると元に戻ります/修正されます)。

Debian ベースのディストリビューションで有効です。

service mysqld restart
service httpd restart

RedHat ベースのディストリビューションで有効

于 2012-09-03T21:26:46.510 に答える