お世話になります。
調べる緒もおぼつかない状況となっておりますので、
何卒お力添え頂ければ幸いでございます。
現在、CentOS7にて、PHP + MariaDB(mariadb-5.5.52-1.el7.x86_64)を使って、データを蓄積しています。
DBは1点で、テーブルはusers(ユーザー)と enquetes(アンケート)の2点。
行数は10000件ほど。
内容は、ユーザーの名前と住所電話番号というものです。
運用自体は問題ありませんでした。あとは収集した情報を「CSV形式」でダンプするだけ...となったところで、普段ならコマンド1つで簡単に済むことですが、ここで長時間つまづいております....。
まずは、
mysqldump -u root -p somedb users --tab=/tmp/users.csv --fields-terminated-by=","
としました。
出力はされるものの、どうしてもなぜか「構造部分だけのSQL文」として出力されます。
上記の「fields-terminated-by」を抜いてみたり「users.csv」のファイル名を変えてみたりしても、なぜか構造部分だけで、データが無いSQL文になります。
いずれにせよ、どうしてもCSVとして取得しなければならず、
幾度か試してみても出来ず...これはあきらめました。
次に、
MariaDBに DBのroot権限で
select * from users where delete_at is null INTO OUTFILE '/tmp/users0101_0101.csv' FIELDS TERMINATED BY '\t';
としました。
ここからとてもわからない状態になりました。
まず、結果として
Query OK, 9999 rows affected (0.05 sec)
となるものの、肝心のファイルは「/tmp/」上にはできておらず、
しかし再度上記コマンドを打つと、
ERROR 1086 (HY000): File 'users00101_0101.csv' already exists
となります。(mysqlのダンプは勝手に上書きはしない、というのは正しい動きですが)
権限の問題で見えないのか?と思い、
CentOS上の「root」権限になって/tmp/を眺めても、やはりありません。
/tmp/の権限がおかしいのかと思いましたが、
drwxrwxrwx. 12 root root 4999 4月 1 00:00 tmp
権限は全部与えてあります。
上記のSQL文で、
・where delete_at is null
・FIELDS TERMINATED BY '\t'
をそれぞれ削除してみましたが、同じでした。
少しググると、
/etc/my.cnf
にある、
[mysqld] datadir=/var/lib/mysql ...
「/var/lib/mysql」が、デフォルトの出力先になっていて、ここに出力されているケースがあるようです。("/tmp/a.csv"としても)
しかし、私の環境ではここにも、その下層のディレクトリにも該当ファイルはありませんでした。
上記「/etc/my.cnf」内で「datadir」を別な箇所で上書きしているのか?と思い、
上記記述以降の「datadir=」(includeしているファイルも含めて)探しましたが、
結局「datadir」は上記の記述のみでした。
付け焼き刃な知識ですが、
普段私はファイルの捜索には「locate ファイル名」を使います。
作成したばかりのファイルを探すので「undatedb」をして、インデックスを作り直して、
locate ファイル名 で探したのですが、これもどうしても見つかりません。
しかし、改めてMariaDBの中でOUTFILEをすると「すでに存在する」と怒られます。
ググっても、そもそもファイルが行方不明になっている人があまりおらず
(あっても上記のdatadirにあった方のみ)
調べる糸口も、心細くなってきました。。。
長々となってしまいましたが、
ヒント、試してみたほうが良いこと、でも結構ですので、
コメントいただければ幸いです。
よろしくお願いいたします。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/06/20 01:07