1
0

RDSへCSVファイルをインポート/エクスポートする方法

Last updated at Posted at 2024-08-13

EC2にMySQLクライアントを入れている必要がある。
MySQLクライアントをインストールする作業はここでは割愛する。

ssh -i /Users/<ユーザーネーム>/Desktop/<キーペアファイル名>.pem ec2-user@<パブリックIPアドレス>

image.png

RDSに接続します。RDSのエンドポイントはAWSのコンソールからRDSの「接続とセキュリティ」タブから取得する。

mysql -u admin -p -h <RDSのエンドポイント>

パスワードを要求されるので予め設定したパスワードを入力する。
パスワードが正しければ接続する。

続いてデータベースを構築する。

mysql> create database <DB名>;

構築したデータベースを確認する。

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sample_db          |
| sys                |
| test               |
| transfer_dbinfo    |
+--------------------+
7 rows in set (0.00 sec)

今までテスト用で作成したデータベースが表示される。
次に使用するデータベースを指定する。
今回使用するデータベースはtransfer_dbinfoを使用する。

mysql> use transfer_dbinfo;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed

Database changedの表示が出る。

テーブルを確認する。
mysql> show tables;
+---------------------------+
| Tables_in_transfer_dbinfo |
+---------------------------+
| sample                    |
| sample01                  |
| sample02                  |
| sample03                  |
| sample04                  |
| sample05                  |
| samplelist                |
| transfer                  |
| user                      |
| users                     |
+---------------------------+
10 rows in set (0.00 sec)

①作成されているsample01を削除
②新規テーブルを作成
③CSVファイルをインポートする

mysql> drop table sample01;
mysql> show tables;
+---------------------------+
| Tables_in_transfer_dbinfo |
+---------------------------+
| sample                    |
| sample02                  |
| sample03                  |
| sample04                  |
| sample05                  |
| samplelist                |
| transfer                  |
| user                      |
| users                     |
+---------------------------+
9 rows in set (0.00 sec)
mysql> TRUNCATE TABLE sample01;
Query OK, 0 rows affected (0.04 sec)
# ちなみにテーブルに登録されている値を全削除する場合はTRUNCATE TABLE文を使用する。

もう一度、新しいテーブルを作成する

mysql> create table sample01(
    -> NAME varchar(50),
    -> DB_NAME varchar(255),
    -> passward varchar(255),
    -> Function_ON_OFF char(30)
    -> );
Query OK, 0 rows affected (0.03 sec)

カラムにはvarcharなどの必ずデータ型を指定しないといけない。

参考にした簡易的なデータ型の一覧

テーブル定義の作成例

テーブルの中身を確認する。
カラムを入れただけで値は何も入っていない。

mysql> SELECT * FROM sample01;
Empty set (0.00 sec)

そこでCSVファイルをインポートする

mysql> LOAD DATA LOCAL INFILE 'transfer_dbinfo.csv'
    -> INTO TABLE `sample01`
    -> FIELDS TERMINATED BY '\t'
    -> IGNORE 1 LINES;
Query OK, 18 rows affected, 54 warnings (0.02 sec)
Records: 18  Deleted: 0  Skipped: 0  Warnings: 54
# クエリは一行ずつ入れること。

今回インポートしたCSVのデータがこちら。
スクリーンショット 2024-07-28 16.10.46.png

select文を使ってインポートされているかを確認する。

mysql> SELECT * FROM sample01;
+--------------------------------+---------+----------+-----------------+
| NAME                           | DB_NAME | passward | Function_ON_OFF |
+--------------------------------+---------+----------+-----------------+
| 株式会社〇〇                   | DB_01   | Pass_01  | 0               |
| (株)〇〇カンパニー           | DB_02   | Pass_02  | 1               |
| 株式会社〇〇                   | DB_03   | Pass_03  | 0               |
| (株)〇〇カンパニー           | DB_04   | Pass_04  | 1               |
| 株式会社〇〇                   | DB_05   | Pass_05  | 0               |
| (株)〇〇カンパニー           | DB_06   | Pass_06  | 1               |
| 株式会社〇〇                   | DB_07   | Pass_07  | 0               |
| (株)〇〇カンパニー           | DB_08   | Pass_08  | 1               |
| 株式会社〇〇                   | DB_09   | Pass_09  | 0               |
| (株)〇〇カンパニー           | DB_10   | Pass_10  | 1               |
| 株式会社〇〇                   | DB_11   | Pass_11  | 0               |
| (株)〇〇カンパニー           | DB_12   | Pass_12  | 1               |
| 株式会社〇〇                   | DB_13   | Pass_13  | 0               |
| (株)〇〇カンパニー           | DB_14   | Pass_14  | 1               |
| 株式会社〇〇                   | DB_15   | Pass_15  | 0               |
| (株)〇〇カンパニー           | DB_16   | Pass_16  | 1               |
| 株式会社〇〇                   | DB_17   | Pass_17  | 0               |
| (株)〇〇カンパニー           | DB_18   | Pass_18  | 1               |
+--------------------------------+---------+----------+-----------------+
18 rows in set (0.00 sec)

RDSからCSVファイルをエクスポートする。

AWSのRDSに登録しているテーブルをエクスポートするのは通常のやり方が違うらしい。下記ドキュメント参考にしmysqldump_to_csv.pyをインストールする必要がある。

またただインストールするだけでは使用することはできない。
bashの設定ファイルにエイリアスに'python3'を設定しパスが通っているかを確認する。

参考にしたドキュメント

$ vi ~/.bashrc
alias python='python3'
export PATH="/usr/bin/$PATH"
$ source ~/.bashrc
$ python --version
Python 3.9.16

(ここに辿り着くのに時間がかかった・・)

$ mysqldump -u admin -p --host=<RDSのエンドポイント>.ap-northeast-1.rds.amazonaws.com --set-gtid-purged=OFF transfer_dbinfo sample01 | python mysqldump_to_csv.py > /home/ec2-user/table01.csv
Enter password: 
# ユーザーを作成した時のパスワードを入力する。
$ ls
10_alter_user    TEST01.txt              data.txt      mysqldump              sample01.csv  table01.csv
20_create_table  backup.sql              dbaccess.cnf  mysqldump_to_csv.py    sample01.txt  transfer_dbinfo.csv
30_insert_data   data.tar.gz             dbassess.cnf  mysqldump_to_csv.py.1  table.csv
[ec2-user@ip-10-0-0-9 ~]$ cat table01.csv

table01.csvがEC2に存在していることが確認できる。

$ cat table01.csv
'株式会社〇〇',DB_01,Pass_01,0
'(株)〇〇カンパニー',DB_02,Pass_02,1
'株式会社〇〇',DB_03,Pass_03,0
'(株)〇〇カンパニー',DB_04,Pass_04,1
'株式会社〇〇',DB_05,Pass_05,0
'(株)〇〇カンパニー',DB_06,Pass_06,1
'株式会社〇〇',DB_07,Pass_07,0
'(株)〇〇カンパニー',DB_08,Pass_08,1
'株式会社〇〇',DB_09,Pass_09,0
'(株)〇〇カンパニー',DB_10,Pass_10,1
'株式会社〇〇',DB_11,Pass_11,0
'(株)〇〇カンパニー',DB_12,Pass_12,1
'株式会社〇〇',DB_13,Pass_13,0
'(株)〇〇カンパニー',DB_14,Pass_14,1
'株式会社〇〇',DB_15,Pass_15,0
'(株)〇〇カンパニー',DB_16,Pass_16,1
'株式会社〇〇',DB_17,Pass_17,0
'(株)〇〇カンパニー',DB_18,Pass_18,1

中身も確認できる。exitで抜けてローカルのデスクトップに戻りscpコマンドを実行する

sh-3.2# scp -i /Users/<ユーザーネーム>/Desktop/TEST.pem ec2-user@3.114.235.30:/home/ec2-user/table01.csv /Users/<ユーザー名>/Desktop/
table01.csv                                   100%  792    53.2KB/s   00:00  

image.png

ファイルを開いてみると文字化けしている。
右クリックして「このアプリケーションを開く」を選択する
テキストエディットで開く。

image.png

image.png
保存するときに「標準テキストのエンコーディングを日本(Shift JIS)」に変更して保存する。

もう一度開き直すと通常の文字列で表示される。

image.png

他にもこんな記事を書いています。

1
0
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
1
0