docker-compose docker-swarm mysql5.7.26 mysql8 部署失败Table ‘mysql.user‘ doesn‘t exist

本文讲述了作者在部署MySQL Docker容器时遇到的启动问题,涉及权限设置和宿主机目录选择。解决过程包括权限调整和数据迁移,最终发现是宿主机目录权限问题。寻求技术解决方案和根本原因分析。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

services:
  mysql-youlai:
    hostname: mysql-youlai
    image: mysql:8.0.25
    networks:
      - myitsite_dev_net
    command:
      --default-authentication-plugin=mysql_native_password
      --character-set-server=utf8mb4
      --collation-server=utf8mb4_general_ci
      --explicit_defaults_for_timestamp=true
      --lower_case_table_names=0
      --max_allowed_packet=128M
    # data 用来存放了数据库表文件,init存放初始化的脚本
    volumes:
      - ./volumes/mysql/data/:/var/lib/mysql/
      - ./volumes/mysql/config/:/etc/mysql
      - ./volumes/mysql/log/:/var/log/mysql/
      - ./volumes/mysql/mysql-files:/var/lib/mysql-files
    deploy:
      placement:
        constraints: [node.role == manager]
      replicas: 1
      restart_policy:
        condition: on-failure
    environment:
      - TZ=Asia/Shanghai
      - MYSQL_ROOT_PASSWORD=xxxx
      - MYSQL_ROOT_HOST=%
    ports:
      - 3308:3306

这个是我的yaml文件,部署后mysql总是启动不起来,查看日志:

Can't open and lock privilege tables: Table 'mysql.user' doesn't exist

各种百度,说的是手动去解决问题,执行mysqld 指令等,对于docker启动的容器,容器都启动不起来。然后我换了一个volumes 宿主机的目录(原来./volumes/mysql  新的:~/data/docker_file/mysql),使用docker-compose docker-swarm 执行后可以成功。我想应该是宿主机目录权限的问题,可是,我把volumes原来的目录权限设置为777, 依然不行,我只能在新的目录中执行成功后,把data相关的数据拷贝到原来的目录中。最后使用原来的目录执行,可以成功。

问题是解决,可是感觉没有根本性的解决问题,有没有大神们遇到这样的问题,给个解答,谢谢。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值