dockerがredisを再起動するとmysqlデータが失われる問題を解決する

dockerがredisを再起動するとmysqlデータが失われる問題を解決する

公式ドキュメント:

したがって、mysql は次のように起動する必要があります。

docker run -p 3306:3306 -d -e MYSQL_ROOT_PASSWORD=password -v /windows ドライブ/指定したフォルダ パス:/var/lib/mysql mysql:5.7

レディス:

docker run -p 6379:6379 -d -v /windows ドライブ/指定したフォルダ パス:/data redis:5.0 redis-server --appendonly yes

詳細な手順が記載された公式文書をもっと読む

追加知識: Dockerはコンテナにファイルをマウントし、変更後に変更されないため、再起動する必要があります。

今日、非常に奇妙な現象を発見しました。ホスト上のファイルをdockerにマウントした後、ホスト上のファイルを削除し、同じ名前に変更したファイルを再アップロードしましたが、コンテナ内のファイルは同期されませんでした。

まず Linux についてお話しましょう。Linux のストレージは iNode とブロックに分かれています。iNode は、ファイルのサイズやディスク上の場所などの属性情報を格納します。ブロックは、ファイルの実際の情報を格納する 4k ブロックです。サイズが 4k 未満のファイルも 4k のスペースを占有します。

上記を理解した上で、docker について説明しましょう。docker にマウントされたファイルは、実際には docker が記憶している iNode です。この iNode を通じて、ブロック、つまり実際のファイル情報を見つけることができます。> を使用してリダイレクトを追加してファイルを書き込むと、docker に同期できます。ただし、rm で名前を変更すると、ファイルの iNode は変更されますが、docker 内の iNode は以前のディスクの場所を指しているため、ファイルは変更されていません。

rm の原則: rm は iNode のみを削除します。iNode がないと、ディスク上のブロックを通常の方法で見つけることができません。削除されたように見えますが、ファイル情報はまだ残っています。ファイル情報は、次にここに書き込まれるときに上書きされます。したがって、削除されたデータを回復する方法があります。ただし、ファイルが開いているときに削除すると、ファイルは削除されません。

vim でも同様です。vim ファイルを作成すると、既存のファイルがコピーされます。同じレベルのディレクトリに、. で始まり swp で終わるファイルがあります。保存して終了すると、vim はソースファイルを削除し、このファイルの名前をソースファイルの名前に変更し、iNode も自然に変わります。

上記のdockerでredisを再起動するとmysqlデータが失われる問題を解決する記事は、編集者が皆さんと共有する内容のすべてです。この記事が皆さんの参考になれば幸いです。また、123WORDPRESS.COMを応援していただければ幸いです。

以下もご興味があるかもしれません:
  • Spring Boot は、高同時実行データストレージにおける Redis キャッシュ + MySQL バッチストレージの問題を解決します
  • MySQLとRedis間のデータの一貫性を確保する方法
  • PythonはMysqlから定期的にデータを抽出し、Redisに保存します
  • PHPとRedis+MySQLを組み合わせたホット・コールドデータ交換の応用事例を詳しく解説
  • PHP の Laravel フレームワークと MySQL および Redis データベースのデプロイメントを組み合わせたもの
  • MySQLからRedisにデータベースを移行する方法
  • Python を MySQL、MongoDB、Redis、memcache などのデータベースに接続する方法
  • MySQL と Redis 間のデータ一貫性の問題

<<:  JS配列の一般的な方法とテクニックを学び、マスターになりましょう

>>:  XHTML 1.0 リファレンス

推薦する

HTML要素を非表示にするいくつかの方法

1. CSSを使用するコードをコピーコードは次のとおりです。スタイル="display:n...

JavaScript での正規表現の使用について詳しく学ぶ

目次1. 正規表現とは何か1. 正規表現の特徴2. 正規表現の使用2. 正規表現における特殊文字1....

DOCTYPE宣言の機能と使い方の詳しい説明

1. ブラウザのレンダリングモードとdoctype一部の Web ページは標準に従って作成されていま...

Unicode 署名 BOM の詳細な説明

Unicode 署名 BOM - BOM とは何ですか? BOM は Byte Order Mark...

docker で Apollo をデプロイする詳細なチュートリアル

1. はじめにここでは apollo について詳しく説明しません。公式サイト https://git...

Windows システムでの MySQL 8.0.21 インストール チュートリアル (図とテキスト)

インストールの提案: インストールには .exe を使用せず、圧縮パッケージを使用してください。これ...

Word のコンテンツを Web サイトのエディターに直接コピーすることはお勧めしません。

<br />質問: Word のコンテンツを Web サイトのエディターに直接コピーする...

MySQLのカバーインデックスに関する知識ポイントのまとめ

インデックスにクエリする必要があるすべてのフィールドの値が含まれている(またはカバーしている)場合、...

CSS3 の display:grid、グリッドレイアウトの紹介

1. グリッドレイアウト(グリッド): Web ページをグリッドに分割し、さまざまなグリッドを組み合...

Alibaba Cloud CentOS 7 に yum を使用して MySQL をインストールする正しい方法 (推奨)

yum クイックインストール mysql yumリポジトリを追加する rpm -Uvh http:...

MySQLのレプリケーションの詳細な分析

1.MySQLレプリケーションの概念これは、プライマリ データベースの DDL および DML 操作...

CentOS8.0ネットワーク設定の実装

1. CentOS 7 と CentOS 8 のネットワーク構成の違い: VMware Workst...

6つのレイアウトでのFrameLayoutの使用

序文前回はLinearLayoutについて説明しました。今回はFrameLayoutの使い方を説明し...

JavaScript の遅延読み込み属性パターンに関する簡単な説明

目次1. はじめに2. オンデマンド属性モード3. 乱雑な遅延読み込み属性パターン4. クラスの唯一...

Alibaba Cloud イメージリポジトリの Docker 構成変更の実装

docker リポジトリ自体は非常に遅いですが、中国の Alibaba Cloud ミラー リポジト...