LoginSignup
0
1

More than 1 year has passed since last update.

【MySQL】DBに接続してSQLファイルを実行してCSVを出力するシェルスクリプト(備忘録)

Last updated at Posted at 2021-08-05

はじめに

  • DBのクライアントツール(a5:SQL Mk-2とか)が使える環境であれば特段困らないが、そうもいかないとCSVを出すのは至難の業…ということでshで一発でやれるshを作りました。

手順

  • confファイルを作る
    (shの中でmysqlコマンドを実行するところでユーザとパスワードを指定することもできますが、実行時に警告が出るのでやっておいたほうが吉。)

    mysql.conf
    [client]
    user = DBのユーザ
    password = DBのパスワード
    # ↓必要に応じて別ホスト経由で接続する場合に記載
    host = DBのIPアドレス
    
  • shを作る

    get_csv.sh
    #!/bin/bash
    # 使用するdatabase
    DB="$1"
    # 実行するSQLファイルパス
    FILE_PATH="$2"
    # confファイルパス
    CONF_PATH="$3"
    
    if [ $# != 3 ]; then
        echo "Usage  : ./get_csv.sh データベースの名前 実行するSQLのファイルパス"
        echo "Example: ./get_csv.sh sample_db /home/mome1014/test.sql /home/mome1014/mysql.conf"
    exit 1
    fi
    
    # SQLファイルのディレクトリパス
    DIR_PATH=${FILE_PATH%/*}
    
    # SQLのファイル名
    FILE_NAME=${FILE_PATH##*/}
    
    # 拡張子なしのファイル名
    BASE_FILE_NAME=${FILE_NAME%.*}
    
    echo "----- logging into db ${DB} as admin execute ${FILE_PATH} start -----"
    
    CMD=`mysql --defaults-extra-file=${CONF_PATH} --database=${DB} < ${FILE_PATH} > 
    ${DIR_PATH}/${BASE_FILE_NAME}.txt`
    
    # 各行の一番前(「^」)に「"」を付加
    `cat ${DIR_PATH}/${BASE_FILE_NAME}.txt | sed -e 's/^/"/g' > ${DIR_PATH}/${BASE_FILE_NAME}2.txt`
    # 各行の一番後(「$」)に「"」を付加
    `cat ${DIR_PATH}/${BASE_FILE_NAME}2.txt | sed -e 's/$/"/g' > ${DIR_PATH}/${BASE_FILE_NAME}3.txt`
    # タブ「/t」を「","」に変更
    `cat ${DIR_PATH}/${BASE_FILE_NAME}3.txt | sed -e 's/\t/","/g' > ${DIR_PATH}/${BASE_FILE_NAME}.csv`
    
    # 中間ファイルの削除
    `rm -rf ${DIR_PATH}/${BASE_FILE_NAME}.txt`
    `rm -rf ${DIR_PATH}/${BASE_FILE_NAME}2.txt`
    `rm -rf ${DIR_PATH}/${BASE_FILE_NAME}3.txt`
    
    echo "----- logging into db ${DB} as admin execute ${FILE_PATH} end -----"
    echo "output result ${DIR_PATH}/${BASE_FILE_NAME}.csv"
    
  • 実行

    Usage: ./get_csv.sh ${database_name} ${sql_file_path} ${conf_file_path}

 下記の例の場合は、sample_dbにアクセス(confファイルは/home/mome1014/mysql.confを使う)、 /home/mome1014/test.sqlを実行して、結果のCSVが/home/mome1014/test.csvで出力されます。

   $ ./get_csv.sh sample_db /home/mome1014/test.sql /home/mome1014/mysql.conf
0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1