Dockerコンテナのデータを復元する方法

Dockerコンテナのデータを復元する方法

プロジェクトのテスト環境データベースのデータが失われてしまったので、記録しておきたいと思います。当時は、一定期間一時的に使用され、永続的ではないと考えて、Docker を使用してインストールされました。一昨日突然、docker ログがいっぱいになり、同僚がログをクリーンアップしたかったので、次のコマンドを使用しました。

docker システム プルーン

その結果、当時はMySQLコンテナは通常停止状態だったのですが、突然強制終了してしまいました。バックアップしていたデータは3月のものだったので、ひどい状況でした。それから様々な研究が再開され始めました。

次に、このコマンドが何をするのかを調べるために公式ドキュメントを参照しました。上記で使用したdocker system prune次のことを意味します。

未使用のコンテナ、ネットワーク、イメージ (ぶら下がっているものも参照されていないものも)、およびオプションでボリュームをすべて削除します。

未使用のコンテナ、ネットワーク、イメージ (ぶら下がっているイメージと参照されていないイメージ)、およびオプションでボリュームをすべて削除します。

デフォルトでは、現在ボリュームを使用しているコンテナがない場合、重要なデータが削除されるのを防ぐため、ボリュームは削除されません。ボリュームも削除するには、コマンドを実行するときに--volumesフラグを使用します。

デフォルトでは、現在ボリュームを使用しているコンテナがない場合、重要なデータが削除されないようにボリュームは削除されません。コマンドを実行するときに--volumesフラグを使用してボリュームを削減することもできます。

これで安心しました。幸い、データボリュームは削除されていません。データボリュームを使用してデータを回復できます。次に、回復計画を記録します。

1. データボリュームの場所を見つける

データボリュームディレクトリは/var/lib/docker/volumesの下にあります。各コンテナには、このディレクトリの下にフォルダがあります。コンテナがまだ存在する場合は、 docker inspect 容器IDを使用してデータボリュームの場所を表示できます。コンテナが削除されたので、どうすればいいでしょうか? 1 つずつ探すしかありません。通常、MySQL コンテナのデータボリュームディレクトリの下に_dataディレクトリがあり、そこに各データベースのフォルダが表示され、ようやく見つかりました。

画像-20210510113543085

画像-20210510114631505

このcxhelloテスト ライブラリであり、これでデータを復元できます。

2. 回復

新しいボリュームを作成するにはdocker volume create 數據卷名字コマンドを使用し、ボリュームのリストを表示するにはdocker volume lsコマンドを使用します。

画像-20210510114945865

注意: データ ボリュームをマウントに使用する場合、データ ボリュームは空のディレクトリである必要があります。つまり、データを含めることはできません。

次にコンテナを作成します

docker run -d -p 3309:3306 -v mysqldata:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name huifu mysql:5.7

画像-20210510115714866

データを回復する前に、新しく作成されたデータ ボリューム内の関連コンテンツを削除し、以前のデータ ボリュームのコンテンツを現在のデータ ボリュームにコピーしてデータを回復する必要があります。

/var/lib/docker/volumes/mysqldata/_data/ をコピーします。
rm -f *
rm -f -R *

画像-20210510130608341

コンテンツをデータボリュームにコピーする

cd /var/lib/docker/volumes/1db16a9dfdf3442b117ebc2ec11df5df4db717cfd567c77fa0a49905a9652fa0/_data/
cp -R * /var/lib/docker/volumes/mysqldata/_data/

画像-20210510131213523

この時点で、データベースデータの復旧は完了です。復元されたコンテナを入力して、

画像-20210510131728135

参考文献

https://docs.docker.com/engine/reference/commandline/system_prune/

https://www.cnblogs.com/cheyunhua/p/13433400.html

これで、docker コンテナ データの復旧方法に関するこの記事は終了です。docker コンテナ データの復旧の詳細については、123WORDPRESS.COM の以前の記事を検索するか、次の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • Dockerコンテナイメージからコードを復元する手順
  • Dockerデータのバックアップとリカバリプロセスの詳細な説明
  • docker での psql データベースのバックアップとリカバリの詳細な説明
  • Docker におけるコンテナのバックアップ、リカバリ、移行の詳細な説明
  • Dockerプライベートウェアハウスリカバリ例の詳細な説明

<<:  CSS3でカルーセル画像を作成する方法

>>:  デザイン理論:テキスト表現とユーザビリティ

推薦する

10分でDockerを使ったマイクロサービスのデプロイ方法を学ぶ

Docker は 2013 年のリリース以来、広く注目され、ソフトウェア業界を変える可能性を秘めてい...

Vueフォームで画像を処理する方法

質問: Vue にブログ投稿をアップロードするためのフォームがあり、タイトル、本文、説明、スニペット...

Docker を使用した MySQL のデプロイの詳細説明 (データ永続化)

この記事では、Docker を使用して MySQL をデプロイし、データを保持する方法について簡単に...

CSS マージンの折りたたみの詳細な説明

前のこれは古くからある古典的な質問です。以前読者から質問があったので、ここでお答えします。簡単な例か...

CSS3で背景画像にカラーマスクを追加する方法

以前、開発中に背景レイヤーにカラーマスクを追加する必要のあるプロジェクトに遭遇しました。ここでは、背...

JavaScript offsetParent のケーススタディ

1. offsetParentの定義: offsetParentは子要素に最も近い位置に配置された親...

MySQL シリーズ 3 基礎

目次チュートリアルシリーズ1. MySQL の紹介2. MySQLの開発履歴3. MariaDBの基...

ChromeはCookieの変更を監視し、値を割り当てます

次のコードは、Chrome による Cookie の変更の監視を導入しています。コードは次のとおりで...

CSS スティッキーフッターのいくつかの実装

「スティッキーフッター」とはいわゆる「スティッキー フッター」は、新しいフロントエンドの概念や技術で...

MySQL で制限を使用するとパフォーマンスに影響するのはなぜですか?

まず、MySQL のバージョンについて説明します。 mysql> バージョンを選択します();...

MySQL で GTID モードをオンラインで有効または無効にする

目次基本的な概要GTIDをオンラインで有効にする1. GTID検証ENFORCE_GTID_CONS...

Docker データ管理 (データ ボリュームとデータ ボリューム コンテナー) の詳細な説明

実稼働環境で Docker を使用する場合、多くの場合、データを複数のコンテナ間で永続化または共有す...

VSCode の JS フォーマットでセミコロンを自動的に追加または削除する方法について

導入js コード文の末尾にセミコロンを追加しても追加しなくても問題ありません。一般的に、チームで開発...

Vueはdivホイールのズームインとズームアウトを実装します

Vue プロジェクトで div ホイールのズームインとズームアウト、ドラッグ効果、キャンバス効果に似...

カルーセル効果を書くためのjs

この記事では、カルーセルマップの効果を実現するためのjsの具体的なコードを参考までに共有します。具体...