Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
40
Help us understand the problem. What is going on with this article?
@bohebohechan

[ MySQL ] データをCSVでエクスポートしようとして、secure-file-privに引っかかった件

More than 3 years have passed since last update.

まぁ、お恥ずかしいお話ですが、また自分が困りそうなので残しておきます。

◆ 今日やること

Macでローカルに持っているMySQLサーバのデータをエクスポートしようかと。

◆ バージョン

mysql  Ver 14.14 Distrib 5.7.17, for osx10.11 (x86_64) using  EditLine wrapper

◆ データをエクスポートするまでの話

--secure-file-priv問題

今まで、インポート、エクスポートでそんなエラー出たことなかった・・・ということに遭遇。

** ERROR 1290 (HY000): The MySQL server is running with the --secure-file-priv option so it cannot execute this statement **

mysql> SELECT 1 INTO OUTFILE '/home/mysql/test.txt';
ERROR 1290 (HY000): The MySQL server is running with the --secure-file-priv option so it cannot execute this statement

簡単に抜粋すると、LOAD DATA and SELECT ... INTO OUTFILE statements and the LOAD_FILE() などを使う、データのインポートとエクスポートの利用を制限します。

これらの操作はFILE権限を持つユーザーから許可されるものです。

secure_file_priv とは

空であれば、何も影響しませんが、セキュアな設定ではありません。
MySQL5.7.6前まではデフォルトで空でしたが、5.7.6以降は、プラットフォームに依存した値で、INSTALL_LAYOUT CMake optionの値によります。

今回は

LocalのMacなので、とりあえず空にすることにしました。

  • 現在の値
mysql> SELECT @@global.secure_file_priv;
+---------------------------+
| @@global.secure_file_priv |
+---------------------------+
| NULL                      |
+---------------------------+
1 row in set (0.00 sec)
  • /etc/my.cnfを作り、空の設定に
sudo cp /usr/local/opt/mysql/support-files/my-default.cnf /etc/my.cnf
sudo vim /etc/my.cnf
[mysqld]
secure-file-priv = ""
mysql.server restart
  • 空になりました
mysql> SELECT @@global.secure_file_priv;
+---------------------------+
| @@global.secure_file_priv |
+---------------------------+
|                           |
+---------------------------+
1 row in set (0.00 sec)

先頭カラムつきでエクスポート

エクスポートする時に、先頭にカラム名をつけたい場合ってあるんですよ。
その場合のやり方。もっとすんなりな方法はないのだろうか。

SELECT 'ColName1', 'ColName2', 'ColName3'
UNION ALL
SELECT ColName1, ColName2, ColName3
    FROM YourTable
    INTO OUTFILE '/path/outfile'

以下でエクスポート完了しました。

select 'id','name','kana','en_name','history'
union all
select od,name,kana,en_name,history
from composers into  outfile "/tmp/composers.csv" fields terminated by ',' optionally enclosed by '"';

ʅ( ´・◡・`)ʃ

40
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
bohebohechan
developer & founder of First Four Notes, LLC. I write 4 panel comic on Toyo-Keizai Online. http://toyokeizai.net/category/diary
firstfournotes
「音楽を演奏する人」、「音楽を聴く人」をソフトウエアとIoTの力で、より幸せにすることを目指してます。

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
40
Help us understand the problem. What is going on with this article?