質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.31%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

Q&A

1回答

568閲覧

Docker上のMySQLデータを永続化しようとしても消えてしまいます

waterfield

総合スコア0

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

0グッド

0クリップ

投稿2023/10/16 00:29

編集2023/10/16 03:07

概要

Docker上のMySQLで作成したデータベースをVolumeにマウントして永続化しようとしました。
しかし1,2週間ほど経つとDocker上のMySQLのデータベースとVolume内のデータベースが両方消えてしまいました。

該当のソースコード

version: '3' services: web: restart: always build: context: . dockerfile: ./volumes/web/Dockerfile container_name: 'web' working_dir: '/var/www/html/' tty: true volumes: - type: bind source: "./volumes/web" target: "/var/www/html/" - type: bind source: "./volumes/nginx/log" target: "/var/www/html/log/" - type: volume source: socket target: "/tmp" depends_on: - mysql mysql: build: context: . dockerfile: ./volumes/mysql/Dockerfile ports: - "3306:3306" container_name: mysql restart: always volumes: - type: bind source: "./volumes/mysql/initdb.d" target: "/docker-entrypoint-initdb.d" - type: volume source: db-store target: "/var/lib/mysql" - type: bind source: "./volumes/mysql/config/my.cnf" target: "/etc/mysql/conf.d/my.cnf" environment: MYSQL_ROOT_PASSWORD: test TZ: Asia/Tokyo nginx: image: nginx:latest container_name: nginx ports: - "80:80" - "443:443" restart: always volumes: - type: bind source: "./volumes/nginx/default.conf" target: "/etc/nginx/conf.d/default.conf" - type: bind source: "./volumes/nginx/nginx.conf" target: "/etc/nginx/nginx.conf" - type: bind source: "./volumes/nginx/certificates/letsencrypt32597392.crt" target: "/etc/nginx/ssl/server.crt" - type: bind source: "./volumes/nginx/certificates/letsencrypt32597392.key" target: "/etc/nginx/ssl/server.key" - type: bind source: "./volumes/nginx/log/access.log" target: "/var/log/nginx/access.log" - type: bind source: "./volumes/nginx/log/error.log" target: "/var/log/nginx/error.log" - type: volume source: socket target: "/tmp" networks: app-net: driver: bridge volumes: socket: db-store: name: order_db driver: local external: false

試したこと

コンテナを削除してから再作成をしてデータが残っているか確認しましたが、データは残っており、それから1,2週間ほどで消えてしまいました。
別の方法として、ホストのディレクトリにマウントする方法を試しましたがこちらも同じように1,2週間で消えてしまいました。

補足情報(FW/ツールのバージョンなど)

動作環境
Doker 4.24.1
OS Ubuntu 22.04.1 LTS

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

docker-composeの設定ファイルを確認すると,
mysqlコンテナ内の/var/lib/mysqlにひも付けられたdb-store
web及びnginxコンテナ内の/tmpにひも付けられたsocket
両方ともorder_dbというローカルのボリュームにひも付けられているので,
webとnginxコンテナが1~2週間に一回/tmpの掃除をする時に,
同じボリュームにひも付けられているmysqlのDBも一緒に削除されると思います。

良くも悪くも設定されている通りの動作ではないでしょうか?

質問者の想定通りに動作させるには
volumes設定のところでsocketdb-storeそれぞれ別のボリューム(name)となるよう
設定すればいいのでは?と思います。

投稿2023/10/16 13:14

ujimushi_sradjp

総合スコア2179

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

waterfield

2023/10/17 00:32

ご回答いただきありがとうございます。 ご指摘いただいたVolumesの各ボリュームに別々の名前を指定しました。 コンテナを再度作り直し、様子を見てみます。
waterfield

2023/10/30 02:35

5日ほど経過してからデータベースが消えてしまいました。 この方法とは別に、ホストPCにソケット通信のフォルダとデータベースのフォルダをマウントする 方法を試しましたが、こちらも6日でデータベースが消えてしまいました。 docker-compose.ymlのvolumeには以下のように書きました。 volumes: socket: name: uwsgi-socket driver: local driver_opts: type: none device: "./volumes/socket" o: bind db-store: name: order_db driver: local driver_opts: type: none device: "./volumes/mysql/db" o: bind 何か解決策をお持ちであれば教えてもらえないでしょうか。
ujimushi_sradjp

2023/10/30 02:55

実はdocker-composeのことはよく分からない(gitlabとplantumlに利用するのみ)のですが, 初期化スクリプトに DROP DATABASE IF EXISTS db; CREATE DATABASE db; のようなコードが入ってるのではないですか? それなら不意にリスタートした時にDBが全部無くなると思います。 でも今回の質問にはdocker-composeの設定ファイルしか含まれてないので, エスパーではない私に答えられる方法はありませんよね。 プロフィールにある通り,私は再質問には基本的に答えないのでその辺よろしくお願いします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.31%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問