mysql - 为什么docker使用缓存mysql数据而不是最新的mysql dump?

标签 mysql docker

我有一个用于mysql datbase的docker镜像。
第一次进行此工作时,我将数据库备份到.sql文件,然后从docker-compose我
建立数据库。
但是现在,我进行了一些更新,创建了一个新的.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 [Note] [Entrypoint]: Entrypoint script for


MySQL Server 8.0.21-1debian10 started. 2020-10-18 20:46:59+00:00


[Note] [Entrypoint]: Switching to dedicated user 'mysql' 2020-10-18


20:46:59+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server


8.0.21-1debian10 started. 2020-10-18T20:46:59.686360Z 0 [System] [MY-010116] [Server] /usr/sbin/mysqld (mysqld 8.0.21) starting as process 1 2020-10-18T20:46:59.693458Z 1 [System] [MY-013576] [InnoDB]


InnoDB initialization has started. 2020-10-18T20:46:59.987115Z 1


[System] [MY-013577] [InnoDB] InnoDB initialization has ended.


2020-10-18T20:47:00.115947Z 0 [System] [MY-011323] [Server] X Plugin


ready for connections. Bind-address: '::' port: 33060, socket:


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


[MY-010068] [Server] CA certificate ca.pem is self signed.


2020-10-18T20:47:00.196193Z 0 [System] [MY-013602] [Server] Channel


mysql_main configured to support TLS. Encrypted connections are now


supported for this channel. 2020-10-18T20:47:00.200913Z 0 [Warning]


[MY-011810] [Server] Insecure configuration for --pid-file: Location


'/var/run/mysqld' in the path is accessible to all OS users. Consider


choosing a different directory. 2020-10-18T20:47:00.219538Z 0 [System]


[MY-010931] [Server] /usr/sbin/mysqld: ready for connections. Version:


'8.0.21' socket: '/var/run/mysqld/mysqld.sock' port: 3306 MySQL


Community Server - GPL.


我是docker的新手,老实说,我不知道自己在做什么错。有任何想法吗?

最佳答案

仅当数据目录(/var/lib/mysql)为空时才执行initdb脚本。
您的数据不会被缓存,但会使用您的卷保留到主机上。因此,如果这是一项开发工作,则可以简单地删除db_data卷的内容(或再次删除并创建):

docker volume rm db_data
docker volume create db_data

关于mysql - 为什么docker使用缓存mysql数据而不是最新的mysql dump?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64418410/

相关文章:

MYSQL UPDATE查询多个值

mysql - 在 MySQL 数据库中存储纬度/经度时使用的理想数据类型是什么?

docker - 运行DockerFile时找不到文件异常

docker - asp net core docker serilog配置

amazon-ec2 - docker: 'network' 不是 docker 命令

mysql多对多标签实现+全标签列表

mysql 从最后 n 行中选择

php - 数据库逻辑 VS 应用程序逻辑

docker - 使用docker buildkit的go客户端,如何添加入口点?

docker - Docker Jenkins容器因严重的jenkins而崩溃。InitReactorRunner $ 1#onTaskFailed:失败的ConfigurationAsCode.init