MySQLで別のデータベースにまるっとコピーする

Posted on 2017.04.26
  • DDL DML ともに別 Database にまるっと全消し上書きでコピーしたい。
  • なんども行うのでスクリプトにしたい。
  • わざわざ DB に入らなくてもよくしたい
  • windows 環境で動くようにしたい
  • mysql client は入ってる前提

スクリプト


mysql -h <host> -u <UserId> -p<password>  -e"DROP DATABASE <移行先db>;CREATE DATABASE <移行先db> CHARACTER SET utf8;"
mysqldump.exe --default-character-set=binary -h <host> -u <UserId> --add-drop-table -p<password> <db> > dump.sql
mysql -h <host> -u <UserId> -p<password> --default-character-set=binary <移行先db>  < dump.sql


前提としてmysql, mysqldumpが入ってないと動かない

ハマったところ

  • 基本的に文字コードがやっかい(DB の文字コードは utf8 にしている)
    • 影響でないように Binary で export/import する。
  • はじめ powershell でやろうとしてたけど、Powershell 側で処理した時点で文字列が UTF-16 になって、これまた文字コードが厄介
    • cmd.exe を使う。苦肉