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でカルーセル画像を作成する方法

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

推薦する

Linux でファイルの作成時間を取得する方法と実践的なチュートリアル

背景ファイルの作成時刻を取得する必要がある場合があります。例えば: 「xtrabackup スキーマ...

Windows で Nginx を使用して https サーバーとリバース プロキシを構成する際の問題

リクエストロジックフロントエンド --> https経由でnginxをリクエストnginx -...

データ型の判断における js typeof と instanceof の違いと、その開発と使用について

目次1. typeof演算子2. インスタンスオブ演算子3. typeof と instanceof...

Vueルーティングコンポーネントでパラメータを渡す8つの方法の詳細な説明

シングルページアプリケーションを開発する場合、特定のルートを入力し、パラメータに基づいてサーバーから...

Nginx に lua-nginx-module モジュールをインストールする方法

ngx_lua_module は、lua パーサーを nginx に埋め込み、lua 言語で記述され...

Vueダイナミックフォームの詳細な応用

概要バックグラウンド管理システムには多くのフォーム要件があります。データをjson 形式で書き込み、...

クロスブラウザの問題に対する 5 つの解決策 (要約)

簡単なレビュー: ブラウザの互換性の問題は、しばしば頭痛の種となります。ここでは、これらの問題を回避...

MySQL データベース内の varchar 型の数値のサイズを比較する方法

テストテーブルを作成する -- ---------------------------- -- ch...

Vue+Openlayer で select を使用して要素を選択する実装コード

効果画像: 実装コード: <テンプレート> <div id="map&q...

HTML4.0 要素のデフォルトスタイルの配置

コードをコピーコードは次のとおりです。 html、アドレス、引用ブロック、本文、dd、div、 dl...

mysql ルートユーザーを認証できず、Navicat リモート認証プロンプト 1044 の問題を解決します

まず解決策を見てみましょう #------------mysql の root ユーザーに権限を付与...

HTMLのリストタグを数える

1. <dl>はリストを定義し、<dt>はリスト内の項目を定義し、<d...

JS はシンプルなブロック崩しピンボールゲームを実装します

この記事では、ブロック崩しピンボールゲームを実装するためのJSの具体的なコードを参考までに紹介します...

HTMLページでチェックボックスを操作する方法

チェックボックスは Web ページで非常によく使用されます。e コマースの Web サイトでもプラッ...

Linux Autofs 自動マウント サービスのインストールと展開のチュートリアル

目次1. autofs サービスの紹介2. Autofsのインストールと展開3. Autofs効果の...