一开始时使用如下配置
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
标签:NO,--,M2,mac,mysql,oracle,data,size
From: https://www.cnblogs.com/guanchaoguo/p/17247646.html