概要
個人的メモ。ちょっとハマった。
- DBエンジンにAmazon Auroraを使っているシステムで、毎月1日に集計を行い結果をCSVに保存したい
- 開発環境(CentOS 6.X + MySQL)では問題ないのに、本番環境(AmazonLinux + Aurora)ではエラーが発生
- 原因はINTO OUTFILE
@開発環境
スキーマごとにCSVファイルを分けたかったので、下記の様なバッチを作って、cronから起動することにしました。
#!/bin/bash host="localhost" pw="password" output="/var/sh/result/" extension=".csv" # hogeから始まるスキーマを取得 mysql -N -s -h $host -u appuser -p$pw mysql -e "SHOW DATABASES LIKE 'hoge%';" | while read line ; do mysql -h $host -u appuser -p$pw mysql <<EOF USE ${line}; SELECT '店舗コード' , 'システム区分' , '店舗名' , '送信日時' UNION SELECT shop.code , shop.system_type , shop.name , MAX(send_date) FROM shop GROUP BY shop.code INTO OUTFILE '$output$line$extension' CHARACTER SET 'sjis' FIELDS TERMINATED BY ',' ; EOF done
@本番環境
開発環境では問題なく動きました。 が、本番環境では下記エラーが発生します。
ERROR 1045 (28000) at line 3: Access denied for user 'appuser'@'%' (using password: YES)
対象スキーマの数だけエラーが起こっているので、SHOW DATABASES は成功してそうと当たりをつけました。
ということは、接続情報は問題ないはず。
各スキーマに対して実行しているSQLを変えていく中で、INTO OUTFILEが原因と判明。
ググると、こんな記事もありました。
◆AmazonRDSのテーブルをCSV形式でエキスポートする
SQL内で出力するのは諦め、下記に修正することで目的達成!!
#!/bin/bash # 接続先はAuroraに合うように、よしなに変更 host="aurora.host" pw="password" output="/var/sh/result/" extension=".csv" # hogeから始まるスキーマを取得 mysql -N -s -h $host -u appuser -p$pw mysql -e "SHOW DATABASES LIKE 'hoge%';" | while read line ; do mysql -h $host -u appuser -p$pw nxbox <<EOF > $output$line$extension USE ${line}; SELECT shop.code AS '店舗コード' , shop.system_type AS 'システム区分' , shop.name AS '店舗名' , MAX(send_date) AS '送信日時' FROM shop GROUP BY shop.code ; EOF done
0 件のコメント :
コメントを投稿