Amazon Aurora では MySQLのINTO OUTFILEが使えない

概要

個人的メモ。ちょっとハマった。

  • 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 件のコメント :

コメントを投稿