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 sample_target@192.168.0.10 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

[aws][mysql5.6]microインスタンス使用時にメモリ不足になったのでmysqlの設定を調整

AWSでt2.microインスタンスを使用して色々動かしていたら、あるスクリプトの実行時に

ログファイルを空にする方法

ローカル環境ではmysqlのクエリログを出力するようにしているのですが、放置していたらかなりの容量になってきたので一度空にしようと思って調べてみました。

[mysql][rails]Character set 'utf8mb4' is not a compiled character set and is not specified in the '/usr/share/mysql/charsets/Index.xml' file

mysql5.1が動いていた環境をmysql5.6にアップデートした後、rake db:createで utf8mb4のDBを作成しようとしたところ以下のエラーが発生

Mysql2::Error: Specified key was too long; max key length is 767 bytes limit

railsでactive\_adminのmigrationを行う際に以下のようなエラーが出ました