hello-world
webエンジニアのメモ。とりあえずやってみる。

mysqldumpの結果を別サーバのDBにインポートするワンライナー

公開日時

前提条件のような2つのDBがある場合に、パイプを使えばコマンド1行で別サーバにあるDBにデータのインポートができます。

mysqldump -u{ユーザ名} -p'{パスワード}' {dump元のDB名} | mysql -h {ホスト名} -u{ユーザ名} -p'{パスワード}' {インポート先のDB名}

前提条件

DB1(dump元)

  • DB名:sample_original
  • DBユーザ:sample_original
  • パスワード:password
  • ホスト:192.168.0.10

DB2(インポート先)

  • DB名:sample_target
  • DBユーザ:sample_target
  • パスワード:password
  • ホスト:192.168.0.20

1. 初期設定(ユーザ登録とDB作成)

  • DB1で以下を実行してsample_originalユーザを登録
GRANT ALL PRIVILEGES ON sample_original.* TO sample_original@localhost IDENTIFIED BY 'password' WITH GRANT OPTION;
  • DB2で以下を実行してsample_targetユーザを登録

(DB1からもsample_targetユーザでアクセスできるようにします)

GRANT ALL PRIVILEGES ON sample_target.* TO sample_target@localhost IDENTIFIED BY 'password' WITH GRANT OPTION;
GRANT ALL PRIVILEGES ON sample_target.* TO [email protected] IDENTIFIED BY 'password' WITH GRANT OPTION;
  • DB2にsample_target DBを作成しておきます
CREATE DATABASE `sample_target` DEFAULT CHARACTER SET utf8;

2. DBインポート

DB1のsample_original DBをDB2にインポートしたい場合、以下のようなコマンドになります。

mysqldump -usample_original -p'password' sample_original | mysql -h 192.168.0.20 -usample_target -p'passrowd' sample_target

mysqldumpコマンド記述の際に、pオプションとパスワードの間にスペースを空けないように注意。

「-p 'パスワード'」とするとうまく動作しません。

参考


Related #MySQL

[mac]homebrewでmysqlをインストール

- インストール

RDSで日本語を使う場合の初期設定(utf8mb4)

RDSで日本語を使う場合、Parameter Groupsを作成し、

MySQLで時間毎のデータを集計する

ちょっとした分析レポートを作る機会があったのですが、「時間ごとに集計するSQLってどうやって書けばいいんだろう」と思って色々悩んでいました。