CentOS(Linux)上の/var/lib/mysqlディレクトリ上(MySQLデフォルトのデータディレクトリ)へ、
CSVファイル「Test.csv」(文字コードWindows-31J(CP932))を、
アップロードしてから、
以下のJavaプログラム(エラー処理内容だけは省略していますが・・・)
↓
final Runtime rt = Runtime.getRuntime();
final Process pr = rt.exec("chown mysql:mysql" + " "
+ "/var/lib/mysql/Test.csv");
try {
pr.waitFor();
final int intRet = pr.exitValue();
if (intRet != 0) {
return;
}
} catch (final Exception ex2) {
return;
}
を実行して、
アップロード後の「Test.csv」ファイルの「所有者」、および「グループ」を、
元々の「root」から、「mysql」に変更させて、
その後、
MySQLコマンドの「LOAD DATA INFILE」を実行すると、
なぜか、
以下のエラーが発生します。
↓
java.sql.SQLException: Access denied for user 'SYSASA'@'localhost' (using password: YES)
なお、別のやり方として以下のテストも試してみました。
↓
上記のJavaプログラムを実行せずに、
アップロード後のファイルを直接、
CentOS上から手作業(プロパティ)で、
アップロード後の「Test.csv」ファイルの「所有者」、および「グループ」を、
元々の「root」から、「mysql」に変更させてから、
その後、
MySQLコマンドの「LOAD DATA INFILE」を実行すると、
問題無く、インポート出来ています。
そこで、
ご質問内容なのですが、
Javaプログラムを利用しているか、していないか
だけの違いで、
なぜか、上記致しましたJavaプログラムで、
アップロード後の「Test.csv」ファイルの「所有者」、および「グループ」を、
元々の「root」から、「mysql」に変更させてから、
MySQLコマンドの「LOAD DATA INFILE」を実行すると、
上記のエラーになります。
何がエラーの原因なのでしょうか?
もしお気づきの点などございましたら、
ぜひ教えてください。
お世話になります。
以上、宜しくお願い致します。
No.1ベストアンサー
- 回答日時:
OSのファイルシステムの所有者や権限と、MySQLのアカウントや権限の話がごちゃ混ぜになっているような。
。。JAVAでMySQLに接続する時、どういう指定になっているのでしょうか?
JAVAを使用せず、手作業で接続する時、どういう指定になっているのでしょう?
この回答への補足
お世話になっております。
さっそくご質問をいただいておりました2点を以下にご回答させていただきます。
(1)JAVAでMySQLに接続する時、どういう指定になっているのでしょうか?
●以下のような指定に致しております。
public String import_CsvFile(final String strCsvFileName)
throws NamingException, SQLException {
String strMessage = null;
Connection conn = null;
PreparedStatement pstmt = null;
try {
final Context context = new InitialContext();
final DataSource ds = (DataSource) context
.lookup("java:cmp/ev/jdbc/ace");
conn = ds.getConnection();
// クライアントPC内のCSVファイル(Test.csv)(文字コードWindows-31J(CP932)(俗に言うExcelのCSV形式ファイル))を読み込みながら、
// MySQLのテーブル(TestTable)(文字コードUTF-8)内へインポート
final StringBuffer sbSql = new StringBuffer();
sbSql.append("LOAD DATA INFILE"); // MySQLのコマンドを指定
sbSql.append(" ?"); // インポート元のCSVファイル名を指定
sbSql.append(" INTO TABLE TestTable"); // インポート先のMySQLテーブル名を指定(文字コードUTF-8のテーブル)
sbSql.append(" character set cp932"); // 文字コードがWindows-31J(CP932)のCSVファイル
sbSql.append(" FIELDS TERMINATED BY ','"); // 区切り文字がカンマのCSVファイル
sbSql.append(" ENCLOSED BY '\"'"); // 全ての各文字列をダブルコーテーションで囲んでいるCSVファイル
sbSql.append(" LINES TERMINATED BY '\r\n'"); // 1件(1レコード)ごとの改行文字が、「印字位置を行頭に戻す」「1行進める」というWindows標準の改行コード(CRLF)
sbSql.append(" IGNORE 1 LINES"); // CSVファイルの先頭1件(1レコード)のみをスキップして、それ以降を読み込ませている
pstmt = conn.prepareStatement(sbSql.toString());
pstmt.setString(1, strCsvFileName);
final int intResult = pstmt.executeUpdate();
(2)JAVAを使用せず、手作業で接続する時、どういう指定になっているのでしょう?
●以下のような指定に致しております。
上記(1)のJavaプログラムの前に、昨日質問で掲載したJavaプログラムがあるのですが、
そのプログラムをコメント化(無効化)して、
CSVファイルの属性のみを、CentOSのXWindow上のKonqueror(KDE3.5)ツールを利用して、
CSVファイルを右クリックし、「プロパティ」-「許可情報」タグをクリックし、
画面内の所有者欄内のユーザ、グループを、元のrootから→mysqlに手作業で変更して
から、上記(1)のJavaプログラムを実行してMySQLテーブル内にインポート出来ていました。
お世話になっております。
その後、MySQLの書籍などを調べたところ、
「ファイルをインポートするには、FILE権限が必要です」
とあった為、phpMyAdminツールで、
mysqlデータベース内、userテーブル内の、
「File_Priv」フィールドの値を、Nから→Yに変更して保存後、
MySQLサービスをリブートした後で、
プログラムはそのままで、再度インポートを試したところ、
エラーが解消されて、無事にインポート出来るようになりました。
(所有者とグループはrootのままでOKでしたので、
それはエラー原因ではなかったようです・・・)
今回、ご回答いただきましたおかげで、
私の方では基本に立ち返って、いろいろと見直しをすることで、
上記のエラー原因を発見することにつながりました。
また機会がございましたら、
宜しくお願い致します。
本当にご回答いただきまして、ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- MySQL 参考書に従って入力したつもりでしたが、最後はエラーがでました。 1 2022/09/28 03:45
- その他(プログラミング・Web制作) mariadbでのエラー 1 2022/11/15 12:31
- MySQL mysqlがインストールされているのかどうか 1 2023/06/05 14:19
- MySQL mysqlがインストールされているのかわかりません 1 2023/06/05 02:26
- その他(プログラミング・Web制作) pythonのこのエラーがわかりません 3 2022/11/16 14:54
- XML PHP.laravelについて 1 2023/07/06 15:26
- MySQL `picture` varchar(255) のコマンドで間違いないでしょうか? 1 2022/11/21 04:08
- MySQL データベースの複製の仕方(mysql) 2 2023/05/30 18:24
- PostgreSQL PostgressからMySQL(MariaDB)へ構造を変更する際のTimestamp等について 2 2023/04/04 12:09
- その他(プログラミング・Web制作) データ解析ソフトRでのファイル入力read.csvがエラーになります 7 2022/03/27 22:11
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・「みんな教えて! 選手権!!」開催のお知らせ
- ・漫画をレンタルでお得に読める!
- ・【選手権お題その2】この漫画の2コマ目を考えてください
- ・2024年に成し遂げたこと
- ・3分あったら何をしますか?
- ・何歳が一番楽しかった?
- ・治せない「クセ」を教えてください
- ・【大喜利】看板の文字を埋めてください
- ・【大喜利】【投稿~12/17】 ありそうだけど絶対に無いことわざ
- ・【選手権お題その1】これってもしかして自分だけかもしれないな…と思うあるあるを教えてください
- ・【穴埋めお題】恐竜の新説
- ・我がまちの「給食」自慢を聞かせてっ!
- ・冬の健康法を教えて!
- ・一番好きな「クリスマスソング」は?
- ・集合写真、どこに映る?
- ・自分の通っていた小学校のあるある
- ・フォントについて教えてください!
- ・これが怖いの自分だけ?というものありますか?
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・10代と話して驚いたこと
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
sql*loader 数値のロード
-
作成したレコードセットのCSV出...
-
SQLサーバーにcsv.ファイル...
-
MySQL Date型にNULLが設定でき...
-
データベースファイル(.db)を開...
-
PL/SQLで@ファイル名が反応しま...
-
PL/SQLをWindowsのBATファイル...
-
あるDBから別のDBのテーブルをs...
-
DBファイルの中身を直接見れな...
-
同じSQL文で極端に検索が遅くな...
-
イラストレーターでヒラギノの...
-
mySQLのデータベースにhtmlのコ...
-
mysqlにおけるホストのパーセン...
-
create databaseがうまくいきま...
-
sqlplus で テキストファイルに...
-
ODBC登録の権限について
-
phpmyAdminでmySQLのdumpデータ...
-
XOOPSのインストールがうまく行...
-
MySQLではカーソルを使うことが...
-
サーバーに接続できない
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
sql*loader 数値のロード
-
作成したレコードセットのCSV出...
-
MySQLで連続csvファイルを読み...
-
MySQL Date型にNULLが設定でき...
-
CSVを1行しかインポートしない...
-
sqlite3でcsvのインポートがで...
-
SQLサーバーにcsv.ファイル...
-
MySQLのLOAD文を使ってCSV...
-
BAT処理でCSVデータのインポート
-
MySQLにEXCELやCSVなどでの一括...
-
insertを用いてテーブルにレコ...
-
データベースファイル(.db)を開...
-
PL/SQLで@ファイル名が反応しま...
-
あるDBから別のDBのテーブルをs...
-
PL/SQLをWindowsのBATファイル...
-
同じSQL文で極端に検索が遅くな...
-
DBファイルの中身を直接見れな...
-
mySQLのデータベースにhtmlのコ...
-
SQLServerのselect文でデータ数...
-
mysqlにおけるホストのパーセン...
おすすめ情報