前提
**"Amazon RDS for MySQL"**インスタンス2台
(mysql1, mysql2と表記)
mysql1とmysql2でテーブル定義が同じであるようなテーブル(1GB程度)が複数ある。
例えば、ステージング環境と本番環境。
シェルスクリプトを動かすEC2 1台用意済みとする。
やりたいこと
mysql1からmysql2へ下記5テーブルをコピーしたい。
- table_name1
- table_name2
- table_name3
- table_name4
- table_name5
コード
対象テーブルのDB名はmysql1もmysql2も共通で、db_nameとした場合。
table_copy.sh
#!/bin/bash
function tablecp {
# CSVファイル削除
rm -f data_$1.csv
# CSVファイルにエクスポート
mysql -h mysql1.**************.ap-northeast-1.rds.amazonaws.com -P 3306 -u root db_name -e "SELECT * FROM $1" | sed -e 's/^/"/g' | sed -e 's/$/"/g' | sed -e 's/\t/","/g' | sed -e 's/"NULL"/NULL/g' > data_$1.csv
# テーブルを空にする
mysql -h mysql2.**************.ap-northeast-1.rds.amazonaws.com -P 3306 -u root db_name -e "truncate table $1"
# CSVファイルをインポート
mysql -h mysql2.**************.ap-northeast-1.rds.amazonaws.com -P 3306 -u root db_name -e "LOAD DATA LOCAL INFILE 'data_$1.csv' INTO TABLE $1 FIELDS TERMINATED BY ',' ENCLOSED BY '\"' LINES TERMINATED BY '\n' IGNORE 1 LINES;"
# CSVファイル削除
rm -f data_$1.csv
}
tablecp table_name1
tablecp table_name2
tablecp table_name3
tablecp table_name4
tablecp table_name5