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 リファレンス

推薦する

Docker を使用してイメージをローカルにパッケージ化してデプロイする方法

初めてDockerを使用してイメージをローカルにパッケージ化してデプロイするまず、私のラップトップシ...

jsを使用してスライダーをドラッグする効果を実現します

この記事では、jsでスライダーをドラッグする方法の具体的なコードを参考までに共有します。具体的な内容...

Vueは移動可能なフローティングボタンを実装します

この記事の例では、どこにでも移動できるフローティングボタンを実現するためのVueの具体的なコードを共...

DockerにMinIOをインストールするための詳細な手順

目次1. docker環境が正常かどうかを確認する2. miniIOイメージをダウンロードする3. ...

VirtualBoxにOpenSuseをインストールする方法

仮想マシンはホストマシンにインストールされます。 CPU とメモリはホスト マシンと共有する必要があ...

CentOS での MySQL ログイン 1045 問題を解決する

アプリケーション全体を CentOS にデプロイする必要があるため、当然ながらデータベース操作は不可...

JavaScript を使用したコマンドライン アプリケーションの構築

目次1. ノードをインストールする2. Commander.jsをインストールする3. JavaSc...

インタラクティブデザインでページングと読み込みのどちらを選択するかについての説明

この記事の著者@子木yoyoが個人ブログに投稿したものです。 Web ページでもモバイル アプリでも...

MySQL 基本チュートリアル: DML ステートメントの詳細な説明

目次DMLステートメント1. レコードを挿入する2. 記録を更新する3. シンプルなクエリレコード4...

JavaScript 即時実行関数の使用状況分析

一般的に、関数は実行する前に呼び出す必要があることはご存じのとおりです。以下に示すように、関数を定義...

Docker ベースの Tomcat クラスタと Nginx ロード バランシングの展開の概要

目次前面に書かれた1. Ngixnイメージの作成2. Java Web (Tomcat) アプリケー...

ランダムロールコールテーブルを実装するためのネイティブJavaScript

この記事では、JavaScriptのランダムロールコールテーブルの具体的なコードを参考までに紹介しま...

略語マークと頭字語マーク

<abbr>タグと<acronym>タグは、Web ページに表示される略語と...

HTML 左、中央、右の適応レイアウト (calc css 式を使用)

最新の HTML 標準には、レイアウトを計算するために使用できる calc CSS 式があります。し...