概要
個人的メモ。ちょっとハマった。
- 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 件のコメント :
コメントを投稿