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

推薦する

W3C チュートリアル (13): W3C WSDL アクティビティ

Web サービスは、アプリケーション間の通信に関係します。 WSDL は、XML ベースの Web ...

弾幕効果を実現するためのjQuery

この記事では、弾幕効果を実現するためのjQueryの具体的なコードを参考までに共有します。具体的な内...

Linuxのテキスト処理コマンドsortの詳細な説明

テキストファイルの内容を並べ替える使用方法: ソート + オプション + ファイル名 (複数のファイ...

Apache ab同時負荷ストレステストの実装方法

腹筋コマンドの原則Apache の ab コマンドは、マルチスレッドの同時リクエストをシミュレートし...

MySQL の列から行への変換、フィールドの結合方法 (必読)

データシート:列から行へ: max(case when then) を使用max---集計関数は最大...

MacにMySQLをインストールするときに初期パスワードを忘れた場合の対処方法

パスワードを忘れると困ります。Mac に MySQL をインストールするための初期パスワードを忘れて...

jsを使用して中国語からピンインへの変換の完全な手順を実行します

jsを使用して、中国語をピンインに変換するパッケージを作成しました。倉庫のアドレスはpinyin-p...

JavaScript フロントエンドのタイムアウト非同期操作に最適なソリューション

目次コードの実行に長い時間がかかる場合はどうなりますか? Axiosにはタイムアウト処理機能が搭載さ...

CSSの複数条件の書き方の詳細説明:

:not疑似クラスセレクターは、式に一致しない要素をフィルタリングできます。例 テーブル tbod...

MySQL で数千万のテストデータを含むテストデータベースを作成する方法

場合によっては、MySQL が公式に提供しているテスト ライブラリに基づいてテスト データを作成し、...

JavaScript 配列の Reduce() メソッドの構文と例の分析

序文Reduce() メソッドは関数を累積器として受け取り、配列内の各値 (左から右へ) が単一の値...

面白いウェブサイトをデザインするための方法とテクニック(写真)

他の人から「つまらない」とか「時代遅れ」というフィードバックを受けて、それを変更しようとしたのに、更...

JS オブジェクト コンストラクター Object.freeze

目次概要例1) オブジェクトをフリーズする2) 配列をフリーズする3) 浅い凍結4) ディープフリー...

HTML で入力ボックスに純粋な数字のみを入力するように制限する方法

inputボックスを純粋な数字のみに制限する1、onkeyup = "value=valu...

Vue3 トランジションアニメーションの落とし穴記録について

目次背景問題の場所さらなる分析要約する背景私のコース「Vue 3 エンタープライズレベルの音楽アプリ...