【シェル】【MySQL】シェルで、複数の mysqldumpファイル を実行する

■ はじめに

https://blogs.yahoo.co.jp/dk521123/36680883.html
で、エクスポートしたダンプファイルを大量に実行させるシェルを書く

■ 仕様概要

以下のようなルールで実装してみる
 * 同一階層に置かれたダンプファイル(拡張子「*.sql」)を実行する
 * ダンプファイル名は、データベース名として使用する

手順概要

[1] DB作成
[2] 権限の追加
[3] ダンプファイルをインポートする

■ サンプル

#!/bin/sh

echo "Let's get it started";

# Setting Values
dbUserId=admin;
dbUserPassword=Admin1@Tokyo;
dbRootId=root;
dbRootPassword=Root2@Osaka;

# ディレクトリ内の拡張子「*.sql」を繰り返して処理する
for sqlDumpFileName in *.sql; {
  # ファイル名をデータベース名として使用する
  dbName=`basename "@sqlDumpFileName" .sql`;
  
  echo "=======================================";
  
  # Step1: DB作成
  echo "Step1: To create DB ${dbName}.";
  sqlToCreateDb="CREATE DATABASE \`${dbName}\`";
  mysql -u${dbRootId} -p${dbRootPassword} -e "${sqlToCreateDb}";
  
  # Step2: 権限の追加
  echo "Step2: To add Authority.";
  sqlToExecteGrantForLocal="GRANT ALL PRIVILEGES ON \`${dbName}\`.* TO \`${dbUserId}\`@\`local\` IDENTIFIED BY '${dbUserPassword}' WITH GRANT OPTION;";
  mysql -u${dbRootId} -p${dbRootPassword} -e "${sqlToExecteGrantForLocal}";
  
  sqlToExecteGrantForAll="GRANT ALL PRIVILEGES ON \`${dbName}\`.* TO \`${dbUserId}\`@\`*\` IDENTIFIED BY '${dbUserPassword}' WITH GRANT OPTION;";
  mysql -u${dbRootId} -p${dbRootPassword} -e "${sqlToExecteGrantForAll}";
  
  mysql -u${dbRootId} -p${dbRootPassword} -e "FLUSH PRIVILEGES;";
  
  # Step3: ダンプファイルをインポートする
  echo "Step3: To import the dump file ${sqlDumpFileName}.";
  mysql -u${dbRootId} -p${dbRootPassword} ${dbName} < ${sqlDumpFileName};
}

echo "DONE !!!!!!!!!!!!!";

■ 補足:使用しているTips

ディレクトリ内の指定した拡張子のファイル名を取得する

for 【変数・ファイル名が格納】 in *.【拡張子】; {
  # 繰り返し処理
}

ファイル名から拡張子なしを取り除く

http://qiita.com/ktr_type23/items/94747a4b27e8a630ce48
【変数・拡張子なしのファイル名】=`basename 【ファイル名】 .【拡張子】`;

シェルでSQL文を実行する

http://takuya-1st.hatenablog.jp/entry/2015/03/22/123510
mysql -u【DBユーザID】 -p【DBユーザパスワード】 -e "【SQL文】";

関連記事

MySQL】 データのエクスポート / バックアップを行うには... ~ mysqldump ~

https://blogs.yahoo.co.jp/dk521123/36680883.html

MySQLMySQLの全DBをエクスポート/インポートするスクリプト

https://blogs.yahoo.co.jp/dk521123/37416957.html

Linux】【シェル】 シェル について ~基本構文編~

https://blogs.yahoo.co.jp/dk521123/34611090.html