複数のmysqlimportを自動で実行する[SSH接続/Tera Termマクロ]
MySQLの「mysqlimport」を使用すると高速でCSVデータをデータベースのテーブルにインポートする事ができます。但し、レンタルサーバーの混雑状況やCSVデータのサイズによってはタイムアウトエラーになりますので、分割して実行する必要があります。
今回はCSVデータを分割した後の「複数のmysqlimportを自動で実行する」方法をご紹介します。
1. 前提条件
データ件数が多い「1つのCSVファイルを複数のファイルに分割」します。
※私は約1000万件のデータを複数ファイルに分割して実行しています。
2. 必要なツール
Tera Term (ターミナルエミュレータ)

3. 元のコード(手動)
Tera Termで次のようなmysqlimportを複数回、手動で実行します。
mysqlimport -u ユーザー名 -p データベース名 --password=パスワード --local ファイル名.1 mysqlimport -u ユーザー名 -p データベース名 --password=パスワード --local ファイル名.2 mysqlimport -u ユーザー名 -p データベース名 --password=パスワード --local ファイル名.3 ・・・ mysqlimport -u ユーザー名 -p データベース名 --password=パスワード --local ファイル名.N
※ファイル名の拡張子が連番になっていて、それ以外は同じです。
※ファイル名は必ず挿入先のテーブル名にします。(例)mst_person.txt
※mysqlimportの引数は環境に合わせてください。
4. 改善後のコード(自動)
先ほどのコードを「Tera Termマクロ」に変換します。
sendln "mysqlimport -u ユーザー名 -p データベース名 --password=パスワード --local ファイル名.1" wait "user@server:~>" sendln "mysqlimport -u ユーザー名 -p データベース名 --password=パスワード --local ファイル名.2" wait "user@server:~>" sendln "mysqlimport -u ユーザー名 -p データベース名 --password=パスワード --local ファイル名.3" wait "user@server:~>"
このコードのファイル名は任意で拡張子はマクロファイルを示す「○○.ttl」にします。
4-1. コードの解説
[TTLコマンド]
wait <string1> [<string2> ...] | 指定された文字列がホストから送られて来るまでマクロを停止します。 |
---|---|
sendln <data1> <data2>.... | データ(命令)と改行をホストに送信します。 |
リンク先はTera Termの公式です。コマンド一覧はTTL コマンドリファレンス(公式)もしくはTera Termマクロ コマンド一覧をご覧ください。
[その他]
user@server:~> | user@serverはログインしたユーザー名とサーバー名です。 |
---|
4-2. TTLのエスケープ文字(「'」「"」)
(例1)sendln "echo abc"#$22"def" 結果:echo abc"def (例2)sendln "echo abc"#$27"def" 結果:echo abc'def
詳細はテラタームマクロの sendln で以下のようにダブルクオート(")とシングルクオート(')を混ぜたコマンドを入力したい(外部サイト)や複数の引用符が連なる行をTTLマクロで自動送信する(外部サイト)を参考にして下さい。
4-3. マクロの実行方法
Tera Termでサーバーにログインした後に、メニューの[コントロール][マクロ]で保存した「○○.ttl」を読み込みます。

次に黒い画面でエンターキーを押すとマクロが実行されて自動で「ファイル名.1、ファイル名.2、ファイル名.3」がテーブルにインポートされます。
以上となります。お疲れ様でした。
関連リンク
mysqlimportで最速にデータをインポートする方法
レンタルサーバーにSSH接続でMySQLへアクセスする