[A-00067]ShellからMySQLでクエリを実行する

シェルスクリプトからmysqlに接続してクエリを実行し、結果をファイルに格納するプログラムのサンプルを記載します。

mysqlにログインするユーザー情報は別ファイルで管理する為、下記に格納します。

MacBook-Pro test % touch /var/tmp/mysql.conf && chmod 644 /var/tmp/mysql.conf 
MacBook-Pro test % cat /var/tmp/mysql.conf
[client]
user=dwh_user
password=welcome1
host=localhost

次にMySQL上のデータベースに適当な値を登録しておきます。

<dwh1.products>

product_idproduct_nameproduct_groupproduct_explainprice
0000000001ポテトチップス うすしお001じゃがいもを薄くスライスして揚げたお菓子120

次にシェルスクリプトの作成になります。

ソースコードは下記のようになります。queryにてOPTIONALLY句を使用してローカルに照会結果をCSVに出力しています。

#!/bin/bash

echo "[INFO] MySQL接続開始"
# 定数定義
MYSQL_SCHEMA="dwh1"
ROOT_DIR="/var/tmp"
CMD_CON="mysql --defaults-extra-file=$ROOT_DIR/mysql.conf -t --show-warnings $MYSQL_SCHEMA"

#SQLの指定
QUERY="SELECT product_id,product_name FROM products INTO OUTFILE '/Users/anonymous/Documents/test/result.csv' FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '\"' LINES TERMINATED BY '\n'"
VALUE=$(echo ${QUERY} | ${CMD_CON})
RESULT=$?

if [ $RESULT -eq 0 ]; then
     echo "SUCCESS"
     cat result.csv
     exit 0
else
     echo "ERROR"
     exit 1
fi
MacBook-Pro test % ./db_connect.sh 
[INFO] MySQL接続開始
SUCCESS
"0000000001","ポテトチップス うすしお"
MacBook-Pro test % cat result.csv 
"0000000001","ポテトチップス うすしお"

次にヒアドキュメントでトランザクションを開始して処理を実行するサンプルを記載します。

#!/bin/bash

echo "[INFO] MySQL接続開始"
# 定数定義
MYSQL_SCHEMA="dwh1"
ROOT_DIR="/var/tmp"
CMD_CON="mysql --defaults-extra-file=$ROOT_DIR/mysql.conf -t --show-warnings $MYSQL_SCHEMA"

#SQLの指定
QUERY=$(cat <<EOS
START TRANSACTION;
SELECT @maxid:=LPAD(MAX(product_id)+1, 10, '0') FROM dwh1.products;
INSERT INTO dwh1.products(product_id, product_name, product_group,product_explain, price) VALUES (@maxid,'ポテトチップス コンソメ','001','コンソメ味のポテトチップス', 120);    
COMMIT;
EOS
)
VALUE=$(echo ${QUERY} | ${CMD_CON})
RESULT=$?

if [ $RESULT -eq 0 ]; then
     echo "SUCCESS"
     exit 0
else
     echo "ERROR"
     exit 1
fi

実行前のテーブルの状態がこちら

MacBook-Pro test % ./db_connect2.sh
[INFO] MySQL接続開始
SUCCESS

実行後のテーブルがこちら

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

*