当前位置: 首页 > news >正文

在windows环境下通过docker-compose脚本自动创建mysql和redis

一、环境版本

在windows环境下通过docker容器运行各种服务,使用的软件版本如下:
docker desktop :V4.39.0 【docker的安装环境设置略】
mysql:9.2
redis:7.4.2

二、各配置文件

1.已经解决了字符集和排序规则问题造成的中文乱码问题,通过的docker compose脚本如下:

version: '3.8'

services:
  mysql:
    image: mysql:9.2
    container_name: win-mysql
    restart: always
    environment: 
      MYSQL_CHARSET: utf8mb4  
      MYSQL_CHARACTER_SET_SERVER: utf8mb4
      MYSQL_COLLATION: utf8mb4_unicode_ci  
      MYSQL_COLLATION_SERVER: utf8mb4_unicode_ci
      LANG: zh_CN.UTF-8
      LC_ALL: zh_CN.UTF-8
      MYSQL_ROOT_PASSWORD: 123456
      MYSQL_DATABASE: cms
      MYSQL_USER: cms
      MYSQL_PASSWORD: cms@123
    ports:
      - "3306:3306"
    volumes:
      - D:\pythonwork\RuoYi-Vue3-FastAPI\ruoyi-fastapi-backend\docker\mysql\conf\my.cnf:/etc/mysql/my.cnf
      - ./mysql/log:/var/log/mysql/
      - ./mysql/data:/var/lib/mysql/       # 数据持久化
      - ./mysql/init.sql:/docker-entrypoint-initdb.d/init.sql  # 初始化SQL
    command: [  
      '--character-set-server=utf8mb4',  
      '--collation-server=utf8mb4_unicode_ci'  
    ]
    networks:
      - app_network

  redis: 
    image: redis:7.4
    container_name: win-redis
    restart: unless-stopped
    command: redis-server /usr/local/etc/redis/redis.conf
    ports:
      - "6379:6379"
    volumes:
      - ./redis/data:/data/               # 数据持久化
      - ./redis/redis.conf:/usr/local/etc/redis/redis.conf  # 自定义配置
      - ./redis/log:/var/log/redis/
    networks:
      - app_network

networks:
  app_network:
    driver: bridge

2.mysql配置文件如下:

[client]  
port=3306
socket=/var/run/mysql/mysql.sock
default-character-set=utf8mb4  

[mysql]  
default-character-set=utf8mb4  
#connect_timeout=10

[mysqld]  
port=3306
datadir=/var/lib/mysql
socket=/var/run/mysql/mysqld.sock
pid-file=/var/run/mysql/mysqld.pid
log-error=/var/log/mysql/error.log
lower_case_table_names = 1
autocommit = 1
character-set-server=utf8mb4  
collation-server=utf8mb4_unicode_ci
default-storage-engine=INNODB
default-time_size='+8:00'  
init_connect='SET NAMES utf8mb4 COLLATE utf8mb4_unicode_ci'
skip-character-set-client-handshake
innodb_buffer_pool_size=2G
# 键缓存大小
 key_buffer_size=64M
 # 允许的最大数据包大小
 max_allowed_packet=16M
 # 表缓存
 table_open_cache=6000
 # 排序缓存大小
 sort_buffer_size=16M
 # 网络缓冲区长度
 net_buffer_length=32K
 # 读取缓冲区大小
 read_buffer_size=16M
 # 随机读取缓冲区大小
 read_rnd_buffer_size=1024K
 # MyISAM 排序缓冲区大小
 myisam_sort_buffer_size=265M
 # 线程缓存大小
 thread_cache_size=512
 # 临时表大小
 tmp_table_size=512M
 # 启用显式默认时间戳
 explicit_defaults_for_timestamp=ON
 # 最大连接数
 max_connections=3000
 # 连接错误最大数量
 max_connect_errors=100
 # 打开文件限制
 open_files_limit=65535  

3.redis配置文件

#基础服务配置
# 以守护进程(后台)模式运行 Redis。在 Docker 中部署时需设置为 no,否则容器会立即退出。
daemonize no
#日志配置
logfile /var/log/redis/redis.log
loglevel debug
pidfile /var/run/redis.pid
# RDB 快照和 AOF 文件的存储路径,需确保该目录已挂载到宿主机(如 /docker/redis 目录)。
dir /data

#网络与访问控制
# 允许 Redis 监听所有网络接口(即所有 IP 地址)的连接,生产环境建议绑定内网 IP,避免直接暴露在公网。
bind 0.0.0.0
#关闭保护模式
protected-mode no
# 设置客户端连接密码,需通过 AUTH 密码 认证后才能操作。生产环境必须设置强密码,避免使用简单密码。
requirepass redis123 
# Redis 服务监听的端口号,默认是 6379。可修改为其他端口以增强安全性。
port 6379
# 客户端连接空闲超过300秒(即5分钟)后自动断开,释放资源。
timeout 300 
# 限制Redis同时支持的最大客户端连接数为 10000。超过此值会拒绝新连接。
maxclients 10000

# 持久化
# 在 900 秒(15 分钟)内,如果至少发生 1 次数据修改,则触发一次 RDB 快照保存。
save 900 1
# 在 300 秒(5 分钟)内,如果至少发生 10 次数据修改,则触发一次 RDB 快照保存。
save 300 10
# 在 60 秒(1 分钟)内,如果至少发生 10000 次数据修改,则触发一次 RDB 快照保存。
save 60 10000 
# RDB 快照的文件名,默认为 dump.rdb。
dbfilename dump.rdb 
rdbcompression yes
# 启用 AOF(Append-Only File)持久化模式,记录所有写操作。
appendonly yes
# AOF 日志同步策略:每秒同步一次磁盘,平衡性能与数据安全性(可选 always 或 no)。
appendfsync everysec

# 安全
# 禁用 FLUSHDB 命令(清空当前数据库),防止误操作或恶意攻击。
rename-command FLUSHDB ""
# 将 FLUSHALL 命令重命名为FLUSHALL_ENCRYPTED,需使用新名称执行该命令。 
rename-command FLUSHALL "FLUSHALL_ENCRYPTED"

# 内存管理
# 限制 Redis 最大可用内存为 4GB,超出限制时根据策略淘汰数据。
maxmemory 4gb 
# 当内存不足时,优先淘汰最近最少使用(LRU)的键(仅淘汰有过期时间的键)。allkeys-lru:所有键参与淘汰。volatile-ttl:淘汰剩余生存时间(TTL)最短的键。noeviction:禁止淘汰数据,直接报错(慎用)。
maxmemory-policy volatile-lru 
http://www.dtcms.com/a/113587.html

相关文章:

  • SQL Server常见问题的分类解析(二)
  • 分治-归并排序-逆序对问题
  • 计算机视觉图像处理基础系列:滤波、边缘检测与形态学操作
  • 小迪安全110-tp框架,版本缺陷,不安全写法,路由访问,利用链
  • Android使用OpenGL和MediaCodec渲染视频
  • AI浪潮下,“内容创作平台”能否借势实现内容价值跃升?
  • Turtle图形化编程知识点汇总:让编程更有趣
  • IDEA 2024.3.5 中修改 web.xml 的 Servlet 版本(比如从 4.0 修改为 5.0)
  • I.MX6ULL开发板与linux互传文件的方法--NFS,SCP,mount
  • AbstractBeanFactory
  • 基于SSM的车辆管理系统的设计与实现(代码+数据库+LW)
  • kd树和球树
  • Java中使用OpenCV实现怀旧滤镜时遇到的UnsatisfiedLinkError问题及解决方案
  • 一文读懂 MCP!
  • chromadb
  • Swift 扩展
  • 微服务架构与中台的关系
  • 高通camx ThreadManager
  • 【 <二> 丹方改良:Spring 时代的 JavaWeb】之 Spring Boot 的未来:从微服务到云原生的演进
  • Hyperlane框架:下一代高性能Rust Web框架 [特殊字符]
  • 学习笔记,DbContext context 对象是保存了所有用户对象吗
  • ring语言,使用vscode编辑器
  • AtCoder Beginner Contest 399 D,F 题解
  • 对迭代器模式的理解
  • Arduino示例代码讲解:Knock Sensor 敲击感知器
  • 每日一题(小白)模拟娱乐篇14
  • BN测试和训练时有什么不同, 在测试时怎么使用?
  • 【C++项目】从零实现RPC框架「四」:业务层实现与项目使用
  • 【51单片机】2-7【I/O口】点亮数码管
  • 线程池的工作原理