提问者:小点点

为什么doccker使用缓存的mysql数据而不是最新的mysql转储?


我有一个mysql数据库的docker映像。

第一次做这项工作时,我将db备份到一个.sql文件,然后从我的docker-compose构建DABASE。

不过,现在我已经做了一些更新,创建了一个新的.sql文件,并且再次通过docker-compose,我想我将获得我的新数据和新更改。

我的docker-comose文件:

services:
  mysql:
    image: mysql:latest
    container_name: mysqldb
    cap_add:
      - SYS_NICE # CAP_SYS_NICE
    # container_name: my_very_special_server
    ports:
      - 3307:3306
    environment:
      MYSQL_DATABASE: wedding
      MYSQL_ROOT_PASSWORD: SomeRootPassword1!
      MYSQL_USER: someuser
      MYSQL_PASSWORD: Password1!
    volumes:
      - ./dbScript/Dump20201018.sql:/docker-entrypoint-initdb.d/Dump20201018.sql
      - db_data:/var/lib/mysql
    restart: always
  phpmyadmin:
    image: phpmyadmin/phpmyadmin
    container_name: dev_pma
    links:
      - mysql
    environment:
      PMA_HOST: mysql
      PMA_PORT: 3307
      PMA_ARBITRARY: 1
    restart: always
    ports:
      - 8183:80
  server:
    container_name: weddingapp_server
    build: ./weddingApp-Be
    depends_on:
      - mysql
    environment:
      MYSQL_HOST_IP: mysql
    ports:
      - 4000:4000
    links:
      - mysql
    command: npm run dev
  client:
    container_name: weddingapp_client
    build: ./weddingApp-Fe
    ports:
      - 3001:3000
    environment:
      - CHOKIDAR_USEPOLLING=true
    tty: true
volumes:
  db_data:

构建完成后,我将其旋转起来,发现新的数据没有显示出来,旧的数据仍然缓存在某个地方?

我查看了mysql映像的日志,得到了以下信息:

2020-10-18 20:46:59+00:00[注][Entrypoint]:

MySQL Server 8.0.21-1Debian10已启动。2020-10-18 20:46:59+00:00

[注][入口]:切换到专用用户'mysql'2020-10-18

20:46:59+00:00[注意][Entrypoint]:MySQL Server的入口点脚本

8.0.21-1Debian10已启动。2020-10-18T20:46:59.686360 Z 0[系统][MY-010116][服务器]/usr/sbin/mysqld(mysqld 8.0.21)启动为进程1 2020-10-18T20:46:59.693458 Z 1[系统][MY-013576][InnoDB]

InnoDB初始化已启动。2020-10-18T20:46:59.987115Z1

[System][MY-013577][InnoDB]InnoDB初始化已结束。

2020-10-18T20:47:00.115947 Z 0[系统][MY-011323][服务器]X插件

准备连接。绑定-地址:“::”端口:33060,套接字:

/var/run/mysqld/mysqlx.sock 2020-10-18T20:47:00.196070 Z 0[警告]

[MY-010068][Server]CA证书CA.pem是自签名的。

2020-10-18T20:47:00.196193 Z 0“系统”“MY-013602”“服务器”通道

mysql_main配置为支持TLS。加密连接现在

此通道支持。2020-10-18T20:47:00.200913 Z 0“警告”

[MY-011810][Server]配置--PID-文件:位置不安全

路径中的“/var/run/mysqld”可供所有OS用户访问。考虑

选择不同的目录。2020-10-18T20:47:00.219538 Z 0“系统”

[MY-010931][Server]/usr/sbin/mysqld:已准备好连接。版本:

“8.0.21”套接字:“/var/run/mysqld/mysqld.sock”端口:3306 MySQL

社区服务器-GPL。

我对docker还是个新手,老实说,我不知道我做错了什么。有什么想法吗?


共1个答案

匿名用户

仅当数据目录(/var/lib/mysql)为空时才执行initdb脚本。

您的数据不是缓存的,而是使用您的卷持久化到您的主机。所以如果这是一个开发工作,您可以简单地删除db_data卷的内容(或者删除并重新创建它):

docker volume rm db_data
docker volume create db_data