#バドシス 〜 日々のことを続く限り書いてみようと思って 〜

頑張って日々のことを書いていこうと思います。

【MySQL】データ連携用にmysqldumpして、テーブルの一部を別DBに連携する

詳解MySQL 5.7 止まらぬ進化に乗り遅れないためのテクニカルガイド (NEXT ONE)

 

DB_AからBD_Bに同じテーブルを移すのですが、ラージカラムは連携しない仕様となりまして。

一部カラムを除いて連携するという面倒なことになりました。

 

普通に連携する場合は、mysqldumpしてそのまま別DBに投入すればOKなのですが、mysqldumpのカラム指定はできないっぽいです。

 

一度dumpし、cutコマンドで必要なカラムだけを取得

 

概要としては、一度全てをDumpした上で、コマンドで必要な値だけを取得して再度投入するみたいですね。

この方法だと、サーバーに充分な空き容量がないと厳しいです。

今回全カラム入れていると20GB程になってしまい、サーバー容量を結構圧迫してしまうのでこれではパンクしてしまいます(泣)

とはいえ、そうでもないカラムを使うときは結構良いかも。

 

qiita.com

 

CREATE VIEWしたテーブルをDumpし、投入先でSelect Insertする

これも少し小技になりますが、不要なカラムを除いたViewを作ってしまう方法です。

イメージとしては、

CREATE VIEW
view_table_name ( id, data, created, updated )
AS SELECT id, data, created, updated from table_name;

 

のようなSQLを叩いて参照用のVIEWを作成。

一度そのまま移行先に投入し、SELECT INSERTを使って実際に入れたかったテーブルに再投入します。

 

mysqldumpしたテーブル名と、投入先にテーブル名を変更できれば良かったのですが・・・・。

ま、設計の時点でこの方法を思いついて入れば連携先にテーブル名を指定できたのでこれは設計の問題ですね・・・。

 

他に方法はないだろうか?

上記2つ以外の方法で、特定のカラムを除いてDumpし、そのまま投入する方法ってないかなー?

基本的にはシェル叩いて実行してます。

他のテーブルもdumpしてるのでできれば同じプログラムでやりたいですけど、最悪PHPとか使って必要なデータだけ引っこ抜いて投入かなぁ。

 

もし妙案があれば是非!!笑

 

詳解MySQL 5.7 止まらぬ進化に乗り遅れないためのテクニカルガイド (NEXT ONE)

詳解MySQL 5.7 止まらぬ進化に乗り遅れないためのテクニカルガイド (NEXT ONE)