百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术教程 > 正文

Docker安装MySQL 8、Redis并确保数据持久化的详细步骤

mhr18 2025-03-30 18:43 28 浏览 0 评论

在使用ragflow、dify等llmOps时,都需要用到数据库、缓存等,每次都遇到重新安装下载,虽然是在docker里,但是网络不好的情况下也比较耗时,所以单独部署一套基础组件供后续使用。

下面介绍详细安装部署,使用docker安装比其它方式安装确实要简单很多。

1. 创建数据存储目录

在宿主机上创建目录用于持久化数据,保证即使docker重启数据不会丢失:

sudo mkdir -p /docker/mysql/data /docker/redis/data

自定义配置

sudo mkdir -p /docker/mysql/conf
sudo vim /docker/mysql/conf/my.cnf
#确保宿主机配置文件可被容器读取:
sudo chmod 644 /docker/mysql/conf/my.cnf

写入MySQL配置

在 my.cnf 中添加字符集配置

[mysqld]
#允许所有ip访问
bind-address = 0.0.0.0
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
# 调整连接数和缓存
max_connections = 200

# 时区配置
default-time-zone = '+8:00'

# 日志配置
general_log = 1
general_log_file = /var/log/mysql/general.log

[client]
default-character-set = utf8mb4

[mysql]
default-character-set = utf8mb4

2. 安装MySQL 8

docker run -d \
  --name mysql8 \
  --restart unless-stopped \
  -v /docker/mysql/data:/var/lib/mysql \
  -v /docker/mysql/conf/my.cnf:/etc/mysql/conf.d/my.cnf \
  -e MYSQL_ROOT_PASSWORD=root123456 \
  -p 3306:3306 \
  mysql:8

说明:

  • -v /docker/mysql/data:/var/lib/mysql:将容器内的MySQL数据目录挂载到宿主机。
  • --restart unless-stopped:容器自动重启,除非手动停止。
  • 数据会持久化到宿主机的/docker/mysql/data目录。
  • -v /docker/mysql/conf/my.cnf:/etc/mysql/conf.d/my.cnf \ # 挂载自定义配置
#查看运行日志
docker logs mysql8



3. 安装Redis

创建自定义配置

sudo mkdir -p /docker/redis/conf
sudo vim /docker/redis/conf/redis.conf
#确保宿主机配置文件可被容器读取
sudo chmod 644 /docker/redis/conf/redis.conf

写入Redis配置

在 redis.conf 中启用AOF持久化:

# 启用AOF
appendonly yes

# AOF策略(默认每秒同步)
appendfsync everysec

# AOF重写时允许增量写入
no-appendfsync-on-rewrite no

# 自动重写AOF文件的条件
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb

# RDB备份(可选保留RDB持久化)
save 60 1
# 内存管理
maxmemory 2gb
maxmemory-policy allkeys-lru

# 安全配置
requirepass 123456

# 慢查询日志
slowlog-log-slower-than 10000
slowlog-max-len 128

命令(使用Redis默认持久化配置):


 docker run -d \
  --name redis \
  -v /docker/redis/data:/data \
  -v /docker/redis/conf/redis.conf:/usr/local/etc/redis/redis.conf \
  -p 6379:6379 \
  redis:latest \
  redis-server /usr/local/etc/redis/redis.conf


说明:

  • -v /docker/redis/data:/data:挂载Redis数据目录。
  • 持久化文件(dump.rdb/appendonly.aof)保存在宿主机的/docker/redis/data目录。

4. 验证持久化

MySQL验证:

  1. 进入容器创建测试数据库:
docker exec -it mysql8 mysql -uroot -p
CREATE DATABASE testdb;

2.停止并删除容器后重新运行,检查testdb是否存在。

sudo systemctl restart docker

Redis验证:

  1. 写入测试数据:
docker exec -it redis redis-cli set foo "bar"

2.重启容器后检查数据:

docker exec -it redis redis-cli get foo

5. 数据卷备份(可选)

备份宿主机数据目录即可:

# 备份MySQL
tar -czvf mysql_backup.tar.gz /docker/mysql/data

# 备份Redis
tar -czvf redis_backup.tar.gz /docker/redis/data

注意事项

  1. 权限问题:如果遇到权限错误,尝试赋予宿主机目录写权限:
sudo chmod -R 777 /docker

2.配置文件路径错误

  • MySQL配置文件需挂载到容器内的 /etc/mysql/conf.d/ 目录(覆盖默认配置)。
  • Redis配置文件需在启动命令中显式指定路径(redis-server /path/to/redis.conf)。


3.配置不生效

  • 检查容器日志定位错误:
docker logs mysql8
docker logs redis

4.容器启动失败

  • 若因配置错误导致容器无法启动,先删除旧容器
docker rm -f mysql8 redis

修复配置文件后重新运行。

相关推荐

几种 TCP 连接中出现 RST 的情况

现在是一个网络时代了。应该不少程序员在编程中需要考虑多机、局域网、广域网的各种问题。所以网络知识也是避免不了学习的。而且笔者一直觉得TCP/IP网络知识在一个程序员知识体系中必需占有一席之地的。在...

Redis连接使用报RDB error错误

该错误信息:Errorinexecution;nestedexceptionisio.lettuce.core.RedisCommandExecutionException:MISC...

lua 语法介绍与 NGINX lua 高级用法实战操作

一、概述lua是一种轻量小巧的脚本语言,用标准C语言编写并以源代码形式开放,其设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能。官网:https://www.lua.org/二、l...

Python教程——20.协程 - 2

异步编程asyncio.Future对象Task继承Future,Task对象内部中的await结果的处理基于Future对象来的在Future对象中会保存当前执行的这个协程任务的状态,如果当...

“我的足迹”、“浏览历史”,Redis如何快速记录与展示?

咱们在网上“买买买”、“逛逛逛”的时候,总会留下各种各样的“足迹”。无论是电商APP里你最近浏览过的商品,视频网站上你刚刚看过的剧集,还是新闻客户端里你点开过的文章……这些“历史记录”,有时候还真挺有...

你手机上的“消息推送”,Redis可能参与其中

手机上那些时不时就“叮咚”一下的消息推送,确实是咱们数字生活里不可或缺的一部分。这篇咱们就来聊聊,Redis这位“消息灵通人士”,是如何在这场“信息接力赛”中大显身手,确保那些重要的、有趣的通知,能够...

短视频APP的“附近的人”,Redis如何快速匹配?

刷短视频,除了看各种搞笑段子、才艺展示,有时候是不是也想看看“同城”或者“附近”的人都在发些啥有意思的内容?或者,平台也会时不时地给你推荐一些“附近正在直播”的主播,让你感觉一下子拉近了和这个虚拟世界...

微信朋友圈的点赞、评论,Redis在背后默默付出

微信朋友圈,这片小小的“自留地”,承载了我们多少喜怒哀乐、生活点滴啊!一张精心修饰的照片,一段随感而发的文字,发出去之后,最期待的是什么?那必须是屏幕下方不断冒出来的小红心和一条条真诚(或者商业互吹)...

网站登录老是掉线?Redis帮你记住你是谁!

有没有过这样的糟心体验?你好不容易登录了一个网站,刚看了两篇帖子,或者购物车里刚加了几件宝贝,结果一刷新页面,或者稍微离开了一会儿,回来就发现——“哎?我怎么又退出了?!”又得重新输入用户名、密码、...

你常用的APP,哪些地方可能用到了Redis?(猜想与分析)

咱们现在的生活,简直是离不开各种各样的手机APP了!从早上睁眼刷新闻,到中午点外卖,再到晚上刷短视频、玩游戏,一天到头,指尖在屏幕上就没停过。这些APP为了让我们用得爽、用得顺心,背后可是使出了浑身解...

Redis是啥?为啥程序员天天挂嘴边?小白也能看懂!

这Redis到底是何方神圣?为啥那些天天在电脑前敲代码的程序员小哥哥小姐姐们,老是把它挂在嘴边,好像离了它地球都不转了似的?别担心,咱们今天不说那些听了就头大的代码和术语,就用大白话,保证你听完一拍大...

面试官:请你说说Redis为什么这么快?

1)Redis是基于内存的存储数据库,绝大部分的命令处理只是纯粹的内存操作,内存的读写速度非常快。2)Redis是单进程线程的服务(实际上一个正在运行的RedisServer肯定不止一个线程,但只有...

有了强大的关系型数据库,为什么还需要Redis?

在数字世界的浩瀚海洋中,关系型数据库,例如我们熟知的MySQL、PostgreSQL或Oracle,无疑是那些承载着核心业务数据、坚如磐石的“国家图书馆”或“银行金库”。它们以严谨的结构、强大的事务处...

Java 中间件数据可靠性串讲:从 MQ 、MySQL、Redis 不丢失的保障之道

引言在现代分布式系统中,中间件扮演着至关重要的角色,它们是构建高可用、高性能、高可扩展应用架构的基石。消息队列(MQ)、数据库(如MySQL)、缓存(如Redis)等是其中最具代表性的组件。然而,...

运维部署方式之——虚机部署

标准化使用作業系统:LinuxCentOS7自动化方式通过Ansible系统初始化playbook来管理。目的系统初始化工作是一个简单、繁复的工作,从云网得到的虚拟主机只是一个基础的系统环境,...

取消回复欢迎 发表评论: