mac M2 colima下 mysql 镜像问题

发布时间 2023-03-23 15:32:18作者: vx_guanchaoguo0

一开始时使用如下配置

version: "3"
services:
  mysql:
    image: mysql:5.7.22
    container_name: mysql
    ports:
      - 3306:3306
    environment:
      TZ: Asia/Shanghai
      MYSQL_ROOT_PASSWORD: 123456
    command:
      --character-set-server=utf8mb4
      --collation-server=utf8mb4_general_ci
      --explicit_defaults_for_timestamp=true
      --lower_case_table_names=1
      --max_allowed_packet=128M
      --sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION,NO_ZERO_DATE,NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO"
    volumes:
      - ~/data/mysql:/var/lib/mysql

直接出现

  • chown: changing ownership of '/var/lib/mysql': Permission denied

排查一

  • 使用 colima qemu 默认挂载是 sshfs 也就是 sftp 会存在权限问题、
  • 修改为 mout-type =9p
  • 然后还是报错?

排查二

  • 使用相同的方式新建一个 oracle
  oracle:
    image: guanchaoguo/oracle-xe-11g:latest
    container_name: oracle_xe_llg
    environment:
      ORACLE_PASSWORD: oracle
      ORACLE_ALLOW_REMOTE: true
    ports:
      - "1521:1521"
    volumes:
      - ~/data/docker/oracle:/u01/app/oracle/oradata/oracle11g-data
  • 直接在 进入容器
  • 在/u01/app/oracle/oradata/oracle11g-data新建一个 文件 tmp.txt
  • 在~/data/docker/oracle 可以看到的 因此 同步不存在问题
  • 很可能是权限的问题??

排查三

  • 直接把 ~/data/mysql: 递归授权 777 然并卵~
  • 发现在 other 组是 r ~ 即使新建也不行~~
  • 但是不挂载目录却可以启动起来的,然后新建一个文件 权限是 rw--rw--r
  • 查看掩码 umask 也是 022 一切是似乎是正常的~~~

排查四~

  • mysqld 只有对 /var/lib/mysql 有权限的
  • 外面授权是 root 容器里面是 mysql 用户~~
  • 看到很多dockerfile 都会用使用 --user 配合 docker-entrypoint.sh脚本运行机制 处理~~~
  • 于是想到了直接 把数据文件映射出来 自定义 my.conf 下面给出来的
  • 然后启动~~ 依然鸡鸡~~~~ 太尼玛伤心了
  • 于是删除只留下conf 文件挂载~ 其他全部删除掉
  • 启动~~ 终于启动了~~~

mysql confg

[client]
port = 3306
socket = /var/lib/mysql/data/mysql.sock
[mysqld]
 # 针对5.7版本执行group by字句出错问题解决
sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'
 # 一般配置选项
basedir = /var/lib/mysql
datadir = /var/lib/mysql/data
port = 3306
socket = /var/lib/mysql/data/mysql.sock
lc-messages-dir = /usr/share/mysql # 务必配置此项,否则执行sql出错时,只能显示错误代码而不显示具体错误消息
character-set-server=utf8mb4
back_log = 300
max_connections = 3000
max_connect_errors = 50
table_open_cache = 4096
max_allowed_packet = 32M
#binlog_cache_size = 4M
max_heap_table_size = 128M
read_rnd_buffer_size = 16M
sort_buffer_size = 16M
join_buffer_size = 16M
thread_cache_size = 16
query_cache_size = 64M
query_cache_limit = 4M
ft_min_word_len = 8
thread_stack = 512K
#tx_isolation = READ-COMMITTED
tmp_table_size = 64M
#log-bin=mysql-bin
long_query_time = 6
server_id=1
innodb_buffer_pool_size = 1024M
innodb_thread_concurrency = 16
innodb_log_buffer_size = 16M
wait_timeout= 31536000
interactive_timeout= 31536000
lower_case_table_names = 1