ビジネス課題への解決策(アイディア)と、新たな発想(+α)が見つかるIT情報メディア

Menu
  1. TOP
  2. データ活用
  3. Amazon RDS:Relational Database Serviceへのデータ移行(2)MySQL編

Amazon RDS:Relational Database Serviceへのデータ移行(2)MySQL編

  • LINEで送る
  • このエントリーをはてなブックマークに追加

AWSのデータ移行、今回はMySQL編です。

LinuxのMySQLは大文字小文字を区別する

MySQLでのデータ移行は、mysqldumpコマンドを使用します。

C:>mysqldump --database {databse} --user={username} --password={password} >dump.txt

割と簡単ですが、投入してみると一向に終わる気配がありません。
Ctrl+Cキーで中断してtxtの中身を見たらびっくり!

mysqldumpの中身(txt)

DROP、CREATEはわかりますが、データがINSERT文で延々書き出されています。
こりゃあ、時間がかかるはずです。

全テーブルだと不要なものも出てしまいますし、どこまで行ったかわからないので、今回もバッチ力を駆使して、テーブルごとにテキストに吐き出してゆきます。

そしてAWSに圧縮転送して、インポート。案の定、ものすごく時間がかかりました。
このような場合は、CSVにエクスポートして、MySQL LOADコマンドで読むのが高速でよいでしょう。しかし、今回はテスト用のイリーガルデータを多く含むため、CSVにした時に正しくデータが読めるか保証がなかったのと、サーバーがWindowsで、RDSがLinuxであり、文字コード問題に引っかかりたくなかった理由で、SQL文でのIMPORTを選択しました。

AWSのガイドには、オンプレミスの本番機と非同期レプリケーションでデータ移行する手法が載っています。
これは、本番の切れ目を少なくする効果がありますが、そもそもMySQLのデータロードが異常に遅いことに起因しているのではないかと思います。OracleのDIRECT PATHやDB2のLOADと比較すると、MySQLやPostgreSQLのデータロードはかなり遅いです。

まぁとりあえず移行ができたので、テスターにDBを明け渡すと、「テーブルが存在しないと言われるんですが」とクレームが。
MySQLコマンドでSQLを投入すると確かにテーブルもあるしデータも入っています。ただ、問題は、テーブル名を小文字で入れないとだめだったということ。

LinuxのMySQLはデフォルトでテーブル名の大文字小文字を区別するのです。これには参りました。カラム名は大文字小文字無視なのに。
先ほどのdump.txtを見ると、確かにテーブル名だけ小文字でCREATE TABLEが記載されています。

my.iniでパラメータ「lower_case_table_names」を「1」に修正すればいいそうなんですが、はて?RDSでmy.iniはどうやって直すのでしょう?

RDSには「パラメータグループ」という設定項目があって、ここでMySQLのパラメータ設定を指定できます。

RDS「パラメータグループ」設定項目

これができるのはMySQLだけなので注意が必要です。

そうそう、RDSのコンソールが、ちょうど今日から日本語化されましたね。まだ翻訳は詳しく見ていませんが、やはり母国語だと素直に意味が入ってきて作業がしやすいです。

次回は、PostgreSQL編をお送りします。

追記:関連コンテンツ

Amazon Relational Database Service(Amazon RDS)へのデータ移行(1)SQL Server編

Amazon RDSへのデータ移行(3)番外:PostgreSQL編+Oracle情報

追記:Waha! Transformer 製品サイトの関連コンテンツ

Waha! Transformerの対応データソース

API とは 2025年の崖と未来をつなぐ架け橋

データの抽出や加工、連携にお悩みではありませんか?

20年以上の実績に裏打ちされた信頼のデータ連携ツール「Waha! Transformer」で、自社に眠るデータを有効活用。まずは無料のハンズオンセミナーや体験版で効果を実感していただけます。

> 純国産ETLツール「Waha! Transformer」

Waha! Transformer
メールマガジンの登録はこちらから
メルマガ登録 お問い合わせ