docker-compose编排mysql时初始化数据失败原因

写法:

db:
    image: mysql:8.0
    volumes:
      - ./:/docker-entrypoint-initdb.d
      - D:/GoWork/dockerspace:/var/lib/mysql
    ports:
      - "3310:3306"
    command: --default-authentication-plugin=mysql_native_password 
    environment:
      MYSQL_ROOT_PASSWORD: "123456"
    container_name: tmysql
    restart: always

上面的写法是正确的,我编排失败的原因是在于我的根目录中同时存在.sql跟.sh文件,这两个类型的文件都能够被识别,造成初始化失败。
我的解决办法是将.sql文件单独放在一个目录中:

db:
    image: mysql:8.0
    volumes:
      - ./db/mysql_serve/init:/docker-entrypoint-initdb.d
      - D:/GoWork/dockerspace:/var/lib/mysql
    ports:
      - "3310:3306"
    command: --default-authentication-plugin=mysql_native_password 
    environment:
      MYSQL_ROOT_PASSWORD: "123456"
    container_name: tmysql
    restart: always

另一个可能会造成初始化失败的因素在于docker关联了外部存储。在我们初始化sql数据的时候需要将对应的外部数据清空,然后再执行命令(网上有看到说.gitignore文件没关系,这个没尝试)

最后一个是如果sql文件中有一个命令出错,那么该行命令以下的表都会创建失败,改行命令之前的无影响

所以所有的步骤为:

//停止容器
docker-compose stop
//清空外部存储
...
//重启容器
docker-compose up -d

执行完毕之后我们可以去数据库查看发现已经成功。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。