4
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

ローカルから直接Dockerのデータベースをバックアップ・レストアする

Last updated at Posted at 2021-02-20

経緯

バックアップ・レストア方法をググるとほとんどの記事はdocker cpしてDockerコンテナの中に入って直接コマンド叩いてたり、docker runでバックアップ、レストアのコマンドを実行していたりしている記事が多かったのですが、そうではなくてワンライナーで直接バックアップ、レストアする方法が知りたかったのでまとめてみました。

基本的なバックアップ・レストア方法を記載します。もしパスワードやデータベース名が必要な場合は適宜コマンドのオプションで指定してください。

今回はPostgreSQL、MySQL、MongoDBについてまとめますが、その他のDBでも同様の方法で可能だと思います。

定数

以下の定数はコマンド等で確認してください。
CONTAINER_NAME : Dockerのコンテナ名またはID。docker psで確認する。
USERNAME : Docker内のデータベースのユーザ名
PASSWORD : Docker内のデータベースのパスワード
DATABASE_NAME : Docker内のデータベース名
SERVICE_NAME: docker-composeのyamlに記載しているサービス名。docker-compose config --service で確認する。

PostgreSQL

Dockerコマンドを使用する場合

バックアップ

docker exec CONTAINER_NAME pg_dumpall -U USERNAME > dump.sql

gzipで圧縮する場合は以下

docker exec CONTAINER_NAME pg_dumpall -U USERNAME | gzip > dump.sql.gz

レストア

cat dump.sql | docker exec -i CONTAINER_NAME psql -U USERNAME

gzipで圧縮されたファイルをレストアする場合は以下

gunzip < dump.sql.gz | docker exec -i CONTAINER_NAME psql -U USERNAME

docker-compose コマンドを使用する場合

バックアップ

docker-compose exec -T SERVICE_NAME pg_dumpall -U USERNAME > dump.sql

レストア

cat dump.sql | docker-compose exec -T SERVICE_NAME psql -U USERNAME

MySQL

Dockerコマンドを使用する場合

バックアップ

docker exec CONTAINER_NAME mysqldump -u USERNAME -pPASSWORD DATABASE_NAME > dump.sql

gzipで圧縮する場合は以下

docker exec CONTAINER_NAME mysqldump -u USERNAME -pPASSWORD DATABASE_NAME | gzip > dump.sql.gz

レストア

cat dump.sql | docker exec -i CONTAINER_NAME mysql -u USER_NAME -pPASSWORD DATABASE_NAME

gzipで圧縮されたファイルをレストアする場合は以下

gunzip < dump.sql.gz | docker exec -i CONTAINER_NAME mysql -u USER_NAME -pPASSWORD DATABASE_NAME

docker-compose コマンドを使用する場合

バックアップ

docker-compose exec -T SERVICE_NAME mysqldump -u USERNAME -pPASSWORD DATABASE_NAME > dump.sql

レストア

cat dump.sql | docker-compose exec -T SERVICE_NAME mysql -u USER_NAME -pPASSWORD DATABASE_NAME

MongoDB

dockerコマンドを使用する場合

バックアップ

docker exec CONTAINER_NAME mongodump --archive > db.dump

gzipで圧縮する場合は以下

docker exec CONTAINER_NAME mongodump --archive --gzip > db.dump.gz

レストア

docker exec -i <mongodb container id or name> mongorestore --archive < db.dump

gzipで圧縮されたファイルをレストアする場合は以下

docker exec -i CONTAINER_NAME mongorestore --archive --gzip < db.dump.gz

docker-compose コマンドを使用する場合

バックアップ

docker-compose exec -T SERVICE_NAME mongodump --archive > db.dump

レストア

docker-compose exec -T SERVICE_NAME mongorestore --archive < db.dump

参考資料

4
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?