[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_id | product_name | product_group | product_explain | price |
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
実行後のテーブルがこちら

コメントを残す