目录结构如下
1. 请按照如下结构新建好目录和文件
/安装目录
├── docker-compose.yml
├── msql/
├── config/
└── my.cnf
├── data/
├── init/
└── logs/
└── redis/
├── data/
└── conf/
└── redis.conf
为docker授权目录的读写权限
chmod 777 -R ./*
docker-compose.yml
注意,需要执行
docker network create dev_net创建docker网络
services:
mysql:
image: mysql:8.4
container_name: mysql
environment:
- MYSQL_ROOT_PASSWORD=mysql123 # 设置root用户密码
- TZ=Asia/Shanghai # 设置时区
- SET_CONTAINER_TIMEZONE=true # 设置容器时区
- CONTAINER_TIMEZONE=Asia/Shanghai # 设置容器时区
- MYSQL_CHARACTER_SET_SERVER=utf8mb4 # 设置默认字符集
- MYSQL_COLLATION_SERVER=utf8mb4_unicode_ci # 设置默认校对规则
volumes:
- /etc/localtime:/etc/localtime:ro # 同步宿主机时间到容器
- ${PWD}/mysql/config:/etc/mysql/conf.d:ro # 自定义配置文件存放目录
- ${PWD}/mysql/data:/var/lib/mysql # 数据文件存放目录
- ${PWD}/mysql/logs:/var/log/mysql # 日志文件存放目录
- ${PWD}/mysql/init:/docker-entrypoint-initdb.d # 初始化脚本存放目录
ports:
- 3306:3306
restart: always
networks:
- dev_net
healthcheck:
test: [ "CMD", "mysqladmin" ,"ping", "-h", "localhost" ]
interval: 5s
timeout: 10s
retries: 10
redis:
image: redis:5.0
container_name: redis5
restart: always
volumes:
- /etc/localtime:/etc/localtime:ro # 同步宿主机时间到容器
- ./redis/conf/redis.conf:/usr/local/etc/redis.conf:ro
- ./redis/data:/data
ports:
- 6379:6379
networks:
- dev_net
command: ["redis-server", "/usr/local/etc/redis.conf"]
networks:
dev_net:
external: true
my.cnf
[mysqld]
lower_case_table_names=1
port=3306
# 允许最大连接数
max_connections=200
# 字符编码设置
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
init_connect='SET NAMES utf8mb4'
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
# 配置服务器的服务号,具备日后需要集群做准备
server-id=1
# 设置binlog格式(ROW, STATEMENT或MIXED)
binlog_format="ROW"
# 开启 Binlog 并写明存放日志的位置
log_bin = /var/log/mysql/bin-log
# 指定索引文件的位置
log_bin_index = /var/log/mysql/bin-log.index
# 设置清理超过30天的日志,以免日志堆积造过多成服务器内存爆满
binlog_expire_logs_seconds = 2592000
# 开启慢查询
slow_query_log = 1
slow_query_log_file = /var/log/mysql/long-query-log
# 慢查询时间,默认为10s
long_query_time = 10
# 设置东八区时区
default-time_zone = '+8:00'
redis.conf
# 允许所有IP连接
bind 0.0.0.0
# 关闭保护模式以允许远程连接
protected-mode no
# 设置监听端口
port 6379
# 客户端空闲N秒后关闭连接(0表示禁用)
timeout 0
# RDB持久化配置
save 900 1 # 每900秒如果至少有1个键发生变化则保存快照
save 300 10 # 每300秒如果至少有10个键发生变化则保存快照
save 60 10000 # 每60秒如果至少有10000个键发生变化则保存快照
# RDB文件压缩
rdbcompression yes
# RDB文件名称和目录
dbfilename dump.rdb
dir /data
# AOF持久化配置
appendonly yes
# AOF同步策略 - 每秒同步一次
# always - 每次有新命令追加到 AOF 文件时就执行一次 fsync ,性能较差,但数据完整性较好。
# everysec - 每秒执行一次 fsync ,性能和数据完整性折中。
# no - 从不执行 fsync ,将数据交给操作系统来处理, 性能最好,但数据完整性最差。
appendfsync everysec
# 设置访问密码
requirepass redis123
# 设置最大内存
maxmemory 1024mb
# 内存达到上限时的淘汰策略 volatile-lru allkeys-lru
maxmemory-policy volatile-lru