Quantcast
Channel: Node.jsタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 8691

【Node.js】Dockerで作成したMySQLをDUMPする

$
0
0

経緯

Docker-composeで作成したMySQLのデータをAmazonRDSに移行する必要があった。

結論

Dockerコンテナで作成したMySQLデータをRDSなどの外部サーバーに移行する

エクスポート時

$ docker exec コンテナ名 mysqldump --default-character-set=文字コード(utfmb4など) -u ユーザ名 -p パスワード データベース名 > backup.sql

インポート時

mysql --default-character-set=文字コード -h エンドポイント(AmazonRDSの場合) -P 3306 -u admin -p データベース名 < backup.sql

Sequelize(Node.jsのORM)を使ってスキーマを作成していた場合

エクスポート時

$ docker exec コンテナ名 mysqldump  --skip-lock-tables --default-character-set=文字コード(utfmb4など) --ignore-table=データベース名.SequelizeMeta  -u ユーザ名 -p パスワード データベース名 > backup.sql

インポート時

mysql --default-character-set=文字コード -h エンドポイント(AmazonRDSの場合) -P 3306 -u admin -p データベース名 < backup.sql

Sequelizeを使ってスキーマを作成していた場合は SequelizeMetaというテーブルが作成されているので、dumpを作成しようとすると、以下のようなエラーになります。(アッパーキャメルだから?) 

doesn't exist when using LOCK TABLES
Couldn't read status information for table SequelizeMeta

なので、dump作成時に --skip-lock-tables--ignore-tableオプションを使います。

Sequelizeを用いたアプリケーションにおける、dump作成からRDSなどの外部サーバーで同じ環境を構築する流れは以下のようになります。

コンテナ内でdump作成
↓
RDSなどの移行先サーバーでマイグレーションを実行する
(ここでSequelizeMetaテーブルは正常に作成される)
↓
dumpをインポートする

インポートしたデータが文字化けする場合

dumpしたデータを読み込んだ際に日本語のデータが文字化けする場合があります。

原因は
--default-character-setオプションの設定が間違っている
DBサーバの文字コード設定が間違っている
といったものが予想されます。

RDSの場合は以下の記事が参考になりました。
[AWS][RDS][MySQL] 文字コードをutf8mb4にする


Viewing all articles
Browse latest Browse all 8691

Trending Articles