質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Windows

Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

Q&A

1回答

7270閲覧

[MySQL]INTO OUTFILEでcsv出力しようとしてPermission denied

ak1600

総合スコア13

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Windows

Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

0グッド

0クリップ

投稿2020/09/25 01:24

編集2020/09/25 07:19

目的

ローカルで使用しているDBのバックアップをcsv形式で保存したい

実行環境

  • OS:Windows 10 pro (version 1809)
  • MySQL: version 5.7.19

発生している問題・エラーメッセージ

INTO OUTFILEであるテーブルをそのままcsvファイルとしてエクスポートしようとすると
以下のエラーが出力されます。

sql

1C:\Users\username>mysql -u root -p 2Enter password: ******** 3 4(中略) 5 6mysql> use sakila 7Database changed 8mysql> SELECT * 9 -> FROM actor 10 -> INTO OUTFILE "C://Users/username/Desktop/test/test.csv" 11 -> FIELDS 12 -> TERMINATED BY ',' 13 -> ENCLOSED BY '"' 14 -> ; 15ERROR 1 (HY000): Can't create/write to file 'C:\Users\username\Desktop\test\test.csv' (Errcode: 13 - Permission denied)

なお、ユーザ名は仮の名前、エクスポートするデータベースはMySQLサンプルデータ(sakila)を使用しております。

不要かと思われますが、出力するテーブル内容を以下に記載しておきます。

sql

1mysql> SELECT * FROM actor ; 2+----------+-------------+--------------+---------------------+ 3| actor_id | first_name | last_name | last_update | 4+----------+-------------+--------------+---------------------+ 5| 1 | PENELOPE | GUINESS | 2006-02-15 04:34:33 | 6| 2 | NICK | WAHLBERG | 2006-02-15 04:34:33 | 7| 3 | ED | CHASE | 2006-02-15 04:34:33 | 8| 4 | JENNIFER | DAVIS | 2006-02-15 04:34:33 | 9 10(中略) 11 12| 200 | THORA | TEMPLE | 2006-02-15 04:34:33 | 13+----------+-------------+--------------+---------------------+

試したこと

  • アクセス権の確認

Permisson deniedとあるので、ディレクトリへのアクセス権限が無いのだろうと思い
アクセス権を確認しました。

> cd C:\Users\username\Desktop > ls -l drwxr-xr-x 1 username users 0 9月 25 08:50 test (以下略)

以上の通り、対象ディレクトリへの書き込み権限は付与されているようです。
親ディレクトリに対しても同様に確認しましたが、すべて同じアクセス権でした。

  • MySQL:rootユーザの権限確認

今回出力時に使用するrootユーザのサーバ内権限を確認しました。

sql

1mysql> SHOW GRANTS for root@localhost ; 2+---------------------------------------------------------------------+ 3| Grants for root@localhost | 4+---------------------------------------------------------------------+ 5| GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION | 6| GRANT PROXY ON ''@'' TO 'root'@'localhost' WITH GRANT OPTION | 7+---------------------------------------------------------------------+

公式リファレンスによると、ALL PRIVILEGESは「すべてのグローバル権限またはテーブルレベルのすべての権限が付与されます」との記述があります。
すべての権限が付与されているならば、当然ファイル書き込みも可能であると思うのですが。

  • my.iniの設定値変更

また、この記事を参考にし、
C:\ProgramData\MySQL\MySQL Server 5.7\my.iniにてsecure-file-priv=""と設定、MySQLの再起動を行いました。
よって、ファイル出力できるディレクトリに制限は無いと考えているのですが...

エラー内容などで調べましたが未だ解決策がわかりません。
アドバイス、または同じ状況でのトラブルシュートの記事などに心当たりがありましたらご教授願えると幸いです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2020/09/25 01:29

ちなみにパスを test.csv とだけした場合はどうなりますか?
ak1600

2020/09/25 01:38 編集

正常に出力されたようです。 ```sql mysql> SELECT * -> FROM actor -> INTO OUTFILE "test.csv" -> FIELDS -> TERMINATED BY ',' -> ENCLOSED BY '"' -> ; Query OK, 200 rows affected (0.01 sec) ``` しかし、出力先がわからず test.csvを確認できておりません。 MySQLでのデフォルトでの出力先についてもう少し調べてみます。
m.ts10806

2020/09/25 01:41 編集

おそらくMySQLのルートディレクトリかなと。 またはコマンド実行した際に入っていたディレクトリか、どちらか。 権限云々はmysqlユーザがディレクトリ権限がないと言っているように思います。 Apacheとかもそうですけど、サーバなので操作しているユーザ自身ではなく、サーバ自体のユーザになることがままあります。
papinianus

2020/09/25 01:53

↑なんですがデスクトップを短時間 chmod 777 して確認してみていただけないですか?
ak1600

2020/09/25 07:23 編集

@m.ts10806 アドバイスありがとうございます。 サーバ自体のユーザでの権限回りについてまだよくわかっていないようなのでもう少し調べてみます。 (念のため、ユーザ権限に関する追記を行いました) test.csvの出力先についてはまだ判明しておりませんが、平行して調査を進めます。 (少なくともコマンド実行時のディレクトリではなかったようです) 追記:パスを"test.csv"のみにした場合、設定ファイル(my.ini)に記述されているルートディレクトリ内のsakilaディレクトリに出力されておりました。 (C:/ProgramData/MySQL/MySQL Server 5.7/Data/sakila/test.csv)
ak1600

2020/09/25 04:27 編集

@papinianus 出力先のパスを`test.csv`のみとした場合でしょうか? その場合、上述の内容とまったく同じエラーとなります。(出力先がDesktopではないと思われます) 絶対パスで出力先を指定する場合については以下の通りです。 chmod 777を行った後でも結果は変わりませんでした。 ```sql -- フルアクセスに変更 >chmod 777 -v Desktop mode of 'Desktop' changed from 0755 (rwxr-xr-x) to 0777 (rwxrwxrwx) mysql> SELECT * -> FROM actor -> INTO OUTFILE "C://Users/username/Desktop/test/test.csv" -> FIELDS -> TERMINATED BY ',' -> ENCLOSED BY '"' -> ; ERROR 1 (HY000): Can't create/write to file 'C:\\Users\username\Desktop\test\test.csv' (Errcode: 13 - Permission denied) ```
YT0014

2020/10/03 16:35

C:の直後、"//"と2つ重ねてありますが、1つが正しいのではないでしょうか?
ak1600

2020/10/05 06:01

@YT0014 Windowsでのパス表記において、 "C://Users/username/Desktop/test/test.csv"と "C:/Users/username/Desktop/test/test.csv"は同じ場所を指すようです。 (一応2通りのSQL文を試しましたが結果は同じでした) 表記ゆれで混乱させてしまい申し訳ありません。
guest

回答1

0

ERROR 1 (HY000): Can't create/write to file 'C:\Users\username\Desktop\test\test.csv' (Errcode: 13 - Permission denied)

まずはその書き込もうとしているファイルのフォルダは存在してるでしょうか。
ファイル書き込み操作はフォルダまでは作成しないので、そのフォルダが存在しない場合は書き込みエラーとなります

投稿2020/09/25 02:39

y_waiwai

総合スコア87774

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ak1600

2020/09/25 02:52

フォルダは作成した状態で処理を行っております。 (testフォルダを作成せず処理を行った場合、`Errcode: 2 - No such file or directory`とエラー内容が変わりました)
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問