Introduction
最近SQLを勉強し始めたので自分のメモ代わりに得た知識を書こうと思います。
OSはwindowsでMYSQL server 5.7を使っています。
LOAD DATA INFILE
CSVファイルをLOAD DATA INFILEで取り込おうとしたらエラーが出ました。エラーメッセージではsecure_file_privがどうのこうの......
ではまずsecure_file_privとはなんなのか確認していきます。
secure_file_priv
secure_file_privはデフォルトで設定される項目の一つです。
secure_file_privがデフォルトで設定されているときは、その設定されているディレクトリにあるファイルしか読み取れません。
secure_file_privの値の確認は
mysql> SELECT @@global.secure_file_priv
で確認できます。
windowsの場合はProgramData/MySQL server 5.7/uploadsが指定されているようです。
CSVファイルのIMPORT
では実際にuploadsの中にあるcsv fileをimportするcodeは以下です。取り込みたいファイルをselect@@global.secure_file_privで得られたディレクトリに置いておくのを忘れないでください。
C:/ProgramData/MySQL/MySQL server 5.7/Uploads/に入っているfile.csvをdbというデータベースのtabというtableにimportします。
DATA LOAD INFILE 'C:/ProgramData/MySQL/MySQL Server 5.7/Uploads/
file.csv' INTO TABLE db.table
selec @@global.secure_file_privで指定されているディレクトリ以外からファイルを取り込む方法は以下に記しておきます。
secure_file_privの変更
secure_file_privを変更したい、もしくはどのディレクトリからもcsvファイルを取り込みたいときは以下のようなことをします。
C:/ProgramData/MySQL/MySQL server 5.7 のmy.iniというファイルを開く
125行目くらいにあるsecure_file_priv="C:/ProgramData/MySQL/MySQL server 5.7/Uploads/"の行を見つけます。
secure_file_priv="C:/ProgramData/MySQL/MySQL server 5.7/Uploads/" の" "の間に指定したいディレクトリのpathを書きます。どのディレクトリからもimportしたいときは空白にしてください。
MySQLを再起動します。
SELECT @@global.secure_file_privを実行し、指定したディレクトリのpathが入っていればOKです。
ProgramdDataの場所がわからない場合は以下を参考にしてください。
ProgramDataの場所
uploadsにファイルを入れなければいけないのは分かったが、そもそもProgramDataが見つからない。
ProgramDataは隠しファイルになっているのでデフォルトのままでは表示されないことになっています。
ですので、隠しファイルを表示するように設定する必要があります。
ファイルを開くところに行き、
表示 -> 隠しファイル のところチェック!!
これだけです。(^▽^)/
Reference
https://fisproject.jp/2016/03/mysql5-7-import-from-csv/
http://androidlover.net/android-emulator/bluestacks/windows-hidden-programdata-folder-appear.html