当前位置: 首页 > 知识库问答 >
问题:

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

马野
2023-03-14

我有一个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个答案

暴夕
2023-03-14

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

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

docker volume rm db_data
docker volume create db_data
 类似资料:
  • 问题内容: 我需要使用php创建一个具有大量数据的mysql数据库的解决方案。我的程序将有许多要求,我认为如果我使用缓存和OO数据库,我会得到很好的结果,但是我没有经验。 我认为,例如,如果我将保存在mysql中的信息缓存到redis数据库中,性能将会提高,但是我不知道这是否是个好主意,因此我希望有人来帮助我选择。 抱歉,如果我的英语不太好,我来自巴西。 问题答案: 是的,redis对此很有帮助。

  • 问题内容: 这个问题已经在这里有了答案 : 7年前关闭。 可能的重复: 对所有基于文本的字段使用通用varchar(255)有不利之处吗? 在MYSQL中,您可以为VARCHAR字段类型选择一个长度。可能的值为1-255。 但是,如果使用最大值而不是VARCHAR(20)的VARCHAR(255),它的优点是什么?据我所知,条目的大小仅取决于插入字符串的实际长度。 大小(字节)=长度+1 因此,如

  • 问题内容: Java的WeakHashMap通常被认为对缓存有用。尽管其弱引用是根据地图的键而不是其值定义的,但这似乎很奇怪。我的意思是,这是我要缓存的值,而一旦缓存中没有其他人强烈引用它们,我想收集垃圾值,不是吗? 以哪种方式保留对键的弱引用?如果执行a ,那么我希望高速缓存保持在’o’状态,直到调用者不再拥有强引用,并且我完全不在乎字符串对象“ some_key”。 我想念什么吗? 问题答案:

  • Spring Boot 2.4.0,DB是MySql 8。 使用REST每15秒从远程获取数据并使用将其存储到MySql DB。 它为所有给定的实体调用save()方法。 所有数据都设置了ID。 我希望如果DB中没有这样的id-它将被插入。 如果这样的ID已经在DB中呈现-它将被更新。 这里是从控制台剪下的: 下面是获取和保存的方法,如下所示: 此方法每15秒运行一次。 实体: 和存储库: 这是以

  • 问题内容: 我正在阅读Java JDBC规范(版本4),并且遇到了以下语句: DataSource-此接口在JDBC 2.0可选软件包API中引入。它优于DriverManager,因为它允许有关基础数据源的详细信息对应用程序透明 我想了解的是a 和a 之间的区别以及它为什么存在。我的意思是,上面的代码块说关于数据源的详细信息对于应用程序是透明的,但是是否不会在属性文件中外部化数据库属性(例如用户

  • 我试图理解的是和之间的区别,以及它存在的原因。我的意思是,上面的块表明关于数据源的细节对应用程序是透明的,但是在属性文件中外部化数据库属性如用户名、密码、url等,然后使用DriverManager是否会以同样的方式工作? 创建接口是否只是为了有一种返回可以池化的连接的通用方式?在Java EE中,应用程序服务器是否实现了这个接口,并且部署的应用程序是否具有对数据源的引用而不是连接?