RDSのmySQLにCSVを一括入力する
この前の続き。RDSで立ち上げたmySQLサーバーに、大量のデータが入っているCSVファイルを一括で追加するまでの流れをまとめてみたいと思います。
photo by Mr. Alex Garcia - Double Cliche on flickr
目次
概要
簡単に流れをまとめると、全体の流れは以下のようになります。
- EC2を立ち上げる
- RDSを立ち上げる
- EC2にCSVファイルを転送
- RDSのmySQLでEC2にあるCSVファイルを一括追加
1と2については、前回の記事をご覧ください。
EC2とRDSのセットアップ
EC2からRDSに接続してmySQLを操作。EC2踏み台サーバー構築メモ
今回は3と4の手順について、まとめたいと思います。
簡単にまとめると、踏み台サーバーのEC2にCSVファイルをSCP
コマンドで転送し、RDSのmySQLでEC2にあるCSVファイルをLOAD DATA LOCAL INFILE
で一括追加してみたいと思います。
構成図
構成図は前回と同じで、SSHのみを許可した踏み台サーバーのEC2とRDSを立ち上げます。
EC2にCSVファイルを転送する
EC2インスタンスが立ち上がったら、CSVファイルを転送します。転送にはSCP
コマンドを使います。
1 | $ scp -P 22 -i AWS_Key.pem sample.csv ec2-user@12.34.567.89:/home/ec2-user/ |
コマンドのオプションは以下の内容を設定します。
mysqlのオプション | 内容 |
---|---|
-i | EC2に接続する鍵 |
-P | ポート(SSHなので22に指定) |
エンドポイントは/home/ec2-user/
と指定すると、EC2のルートディレクトリにCSVファイルが転送されます。転送後、EC2に入って、CSVファイルが保存されているか確認してみましょう。
1 | $ ssh -i AWS_Key.pem ec2-user@12.345.67.78 |
ls
コマンドで見てみると、ルートディレクトリにsample.csvが存在しているのが確認できました。
RDSに接続
続いて、RDSのmySQLに接続してみます。AWSコンソール > RDS > インスタンス
からRDSインスタンスのエンドポイントを確認しておいてください。
1 | [ec2-user@ip-10-0-0-4 ~]$ mysql -h testDB.hoge12345.ap-northeast-1.rds.amazonaws.com -P 3306 -u yourName -p |
ここで、データベースとテーブルが作成されていない場合は、予め作っておきましょう。仮にデータベース名をscoreDB
、テーブル名をtestScore2016
とします。
1 | mysql> create database scoreDB; |
mySQLからCSVを一括追加
RDSに接続し、テーブルを作成したら、EC2にあるCSVファイルをインポートします。インポートにはLOAD DATA INFILE
構文を使います。
1 | mysql> LOAD DATA LOCAL INFILE 'sample.csv' |
実行した結果がQuery OK
と出れば、CSVファイルの追加は完了です。また、CSVの一行目を読み込みの対象外としたい場合には、IGNORE 1 LINES
を指定します。
文字セットを揃える
インポートするCSVファイルは、RDSで設定した文字コードと同じとなるuft-8
で用意します。
インポート時の警告
mySQLにLOAD DATA INFILE
構文を使って、データを投入するとエラーが出る場合があります。その時は、SHOW WARNINGS;
でエラー内容を確認します。
1 | mysql> LOAD DATA LOCAL INFILE 'sample.csv' |
例えば、上記の場合では、CSVファイルの一部のデータに値が無いときに発生する警告です。今回はスペースを入れて対処しました。
RDS MySQLのシステムモニタリング
LOAD DATA INFILE
した直後のmySQLのCloud Watch監視メトリクスは以下のような感じになりました。メトリクスの見方は全て理解してしいないので、ひとまずデータだけ貼り付けておき、後で見返すようにしたいと思います。
上記の監視項目は以下のようなものとなっています。
メトリクス | 内容 | 単位 |
---|---|---|
Write Throughput | 書き込みスループット | MB/秒 |
Read Throughput | 読み込みスループット | MB/秒 |
Swap Usage | スワップ使用量 | MB |
Write Latency | 書き込みレイテンシ | 秒 |
Read Latency | 読み込みレイテンシ | 秒 |
Network Receive Throughput | ネットワーク受信スループット | MB/秒 |
Network Transmit Throughput | ネットワーク転送スループット | MB/秒 |
CPU Credit Usage | CPUクレジット使用量 | 回 |
CPU Credit Balance | CPUクレジット残高 | 回 |
CPUクレジット使用量は
- 負荷が高くなく CPU がベースライン性能にとどまっている場合、CPUクレジット残高が貯まっていく
- 負荷が高まった場合、CPUクレジットを消費してバーストする
- 1CPUクレジットで1分間バースト可能
- CPUクレジット残高が無くなった場合は CPU 性能はベースライン性能にとどまる
- 未使用のCPUクレジットは、最大24時間有効
という事だそうです。
続いて監視項目の2ページ目です。
上記の監視項目は以下のようなものとなっています。
メトリクス | 内容 | 単位 |
---|---|---|
CPU Utilization | DBインスタンスのCPU使用率 | % |
DB Connections | データベース接続数 | 回 |
Free Storage Space | 使用可能なストレージ・スペースの量 | MB |
Freeable Memory | 使用可能なランダム・アクセス・メモリ領域 | MB |
Write Operations | 1秒あたりの平均書き込みディスクI/O回数 | 回/秒 |
Read Operations | 1秒あたりの平均読み込みディスクI/O回数 | 回/秒 |
Queue Depth | ディスクアクセスを待っている未処理のI/Oリクエスト(読み書き)数 | 回 |
Replica Lag | プライマリインスタンスからレプリカへの更新時の遅延 | ミリ秒 |
Binary Log Disk Usage | MySQLバイナリログのストレージ利用量 | MB |
各項目については以下が参考になりました。
Qiita
CloudWatchのRDS監視項目Developpers.IO
CloudWatchグラフの確認方法と確認できるグラフ一覧(EC2/ELB/RDS)Developpers.IO
Amazon Auroraの運用時に監視できる項目について
ちなみに、select後はこんな感じになりました。
まとめ
AWSのRDSで立ち上げたmySQLサーバーに、大量のデータが入っているCSVファイルを一括で追加しました。数千件のデータであれば、1秒未満で投入できるようです。