【Docker系列十】使用Docker run命令部署MySQL

【Docker系列十】使用Docker run命令部署MySQL
💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。
推荐:kwan 的首页,持续学习,不断总结,共同进步,活到老学到老导航檀越剑指大厂系列:全面总结 java 核心技术,jvm,并发编程 redis,kafka,Spring,微服务等常用开发工具系列:常用的开发工具,IDEA,Mac,Alfred,Git,typora 等数据库系列:详细总结了常用数据库 mysql 技术点,以及工作中遇到的 mysql 问题等新空间代码工作室:提供各种软件服务,承接各种毕业设计,毕业论文等懒人运维系列:总结好用的命令,解放双手不香吗?能用一个命令完成绝不用两个操作数据结构与算法系列:总结数据结构和算法,不同类型针对性训练,提升编程思维,剑指大厂

非常期待和您一起在这个小小的网络世界里共同探索、学习和成长。💝💝💝 ✨✨ 欢迎订阅本专栏 ✨✨

博客目录

容器化技术为数据库部署带来了革命性的变化,MySQL 作为最流行的开源关系型数据库之一,结合 Docker 容器可以实现快速部署、环境隔离和便捷管理。

在这里插入图片描述

一、MySQL 容器化概述

1.1 容器化部署优势

  • 环境一致性:消除"在我机器上能运行"的问题,确保开发、测试、生产环境完全一致
  • 快速部署:秒级启动 MySQL 实例,传统方式安装需要 10 分钟以上
  • 资源隔离:每个容器实例拥有独立的运行环境,避免资源冲突
  • 版本管理:轻松切换不同 MySQL 版本(5.7/8.0 等)
  • 便携性:镜像可跨平台运行,支持 x86/ARM 架构

1.2 官方镜像特点

MySQL 官方 Docker 镜像提供:

  • 多个版本选择(最新版/特定版本)
  • 基于 Alpine 和 Debian 的两种镜像
  • 自动初始化机制
  • 环境变量配置支持
  • 默认安全配置(非 root 运行)

二、基础部署实战

2.1 拉取官方镜像

获取最新 MySQL 8.0 镜像:

docker pull mysql:8.0 

验证镜像:

docker image inspect mysql:8.0 | jq '.[0].Config.Env'

2.2 最小化启动命令

docker run -d \ --name mysql-dev \ -e MYSQL_ROOT_PASSWORD=my-secret-pw \ -p 3306:3306 \ mysql:8.0 

参数说明:

  • -d:后台运行
  • --name:容器命名
  • -e:设置环境变量(必需设置 root 密码)
  • -p:端口映射(主机端口:容器端口)

2.3 连接验证

使用 MySQL 客户端连接:

mysql -h 127.0.0.1 -P 3306 -u root -p # 输入密码my-secret-pw

容器内连接:

docker exec -it mysql-dev mysql -u root -p 

三、数据持久化方案

3.1 挂载数据目录

创建数据目录:

mkdir -p ~/mysql-data/{data,conf.d,initdb}

启动容器:

docker run -d \ --name mysql-prod \ -v ~/mysql-data/data:/var/lib/mysql \ -v ~/mysql-data/conf.d:/etc/mysql/conf.d \ -v ~/mysql-data/initdb:/docker-entrypoint-initdb.d \ -e MYSQL_ROOT_PASSWORD=strongpassword \ mysql:8.0 

目录作用:

  • /var/lib/mysql:MySQL 数据文件
  • /etc/mysql/conf.d:自定义配置文件
  • /docker-entrypoint-initdb.d:初始化 SQL 脚本

3.2 自定义配置文件

示例 my.cnf:

[mysqld] character-set-server=utf8mb4 collation-server=utf8mb4_unicode_ci max_connections=200 innodb_buffer_pool_size=512M 

3.3 数据库初始化

在 initdb 目录放置 SQL 文件:

echo"CREATE DATABASE appdb;"> ~/mysql-data/initdb/init.sql echo"CREATE USER 'appuser'@'%' IDENTIFIED BY 'userpass';">> ~/mysql-data/initdb/init.sql echo"GRANT ALL ON appdb.* TO 'appuser'@'%';">> ~/mysql-data/initdb/init.sql 

四、安全加固配置

4.1 非 root 运行

docker run -d \ --user mysql \ --read-only \ --cap-drop ALL \ mysql:8.0 

4.2 密码加密策略

docker run -d \ -e MYSQL_ROOT_PASSWORD=securepass \ -e MYSQL_SECURE_TRANSPORT=ON \ -e MYSQL_SSL=ON \ mysql:8.0 

4.3 网络隔离

创建专用网络:

docker network create mysql-net docker run -d \ --network mysql-net \ --name mysql-secure \ -p 3306:3306 \ mysql:8.0 

五、高级管理技巧

5.1 性能调优参数

docker run -d \ --name mysql-tuned \ -e MYSQL_ROOT_PASSWORD=pass123 \ -e MYSQL_INNODB_BUFFER_POOL_SIZE=1G \ -e MYSQL_INNODB_LOG_FILE_SIZE=256M \ -e MYSQL_MAX_CONNECTIONS=500\ mysql:8.0 

5.2 主从复制配置

主库:

docker run -d \ --name mysql-master \ -e MYSQL_ROOT_PASSWORD=masterpass \ -e MYSQL_REPLICATION_USER=repl \ -e MYSQL_REPLICATION_PASSWORD=replpass \ -e MYSQL_MASTER_PORT=3306\ mysql:8.0 \ --server-id=1\ --log-bin=mysql-bin \ --binlog-format=ROW 

从库:

docker run -d \ --name mysql-slave \ --link mysql-master:master \ -e MYSQL_ROOT_PASSWORD=slavepass \ -e MYSQL_MASTER_HOST=master \ -e MYSQL_MASTER_USER=repl \ -e MYSQL_MASTER_PASSWORD=replpass \ -e MYSQL_MASTER_PORT=3306\ mysql:8.0 \ --server-id=2

5.3 备份恢复方案

执行备份:

docker exec mysql-prod sh -c 'exec mysqldump --all-databases -uroot -p"$MYSQL_ROOT_PASSWORD"'> backup.sql 

定时备份脚本:

#!/bin/bashBACKUP_DIR=/path/to/backups DATE=$(date +%Y%m%d_%H%M%S) docker exec mysql-prod mysqldump -uroot -p${MYSQL_ROOT_PASSWORD} --all-databases |gzip>${BACKUP_DIR}/backup_${DATE}.sql.gz find${BACKUP_DIR} -name "*.sql.gz" -mtime +7 -delete 

六、生产环境部署建议

6.1 资源限制

docker run -d \ --name mysql-production \ --memory="4g"\ --memory-swap="6g"\ --cpus="2"\ --blkio-weight=500\ mysql:8.0 

6.2 监控配置

启用性能模式:

docker run -d \ -e MYSQL_PERFORMANCE_SCHEMA=ON \ mysql:8.0 

集成 Prometheus:

docker run -d \ -e MYSQL_EXPORTER=ON \ -p 9104:9104 \ mysql:8.0 

6.3 高可用方案

使用健康检查:

docker run -d \ --health-cmd="mysqladmin ping -uroot -p$$MYSQL_ROOT_PASSWORD"\ --health-interval=10s \ --health-timeout=3s \ --health-retries=3\ mysql:8.0 

七、常见问题排查

7.1 启动失败诊断

查看日志:

docker logs mysql-prod 

常见错误:

  • 密码未设置:MYSQL_ROOT_PASSWORD环境变量缺失
  • 端口冲突:3306 端口已被占用
  • 权限问题:数据目录不可写

7.2 性能问题分析

查看运行状态:

docker exec -it mysql-prod mysqladmin -uroot -p status 

慢查询日志:

docker exec mysql-prod sh -c 'cat /var/log/mysql/mysql-slow.log'

7.3 版本升级流程

  1. 备份所有数据
  2. 启动新版本容器:
docker run -d \ --name mysql-new \ -v ~/mysql-data/data:/var/lib/mysql \ mysql:8.1 
  1. 运行 mysql_upgrade
  2. 验证后切换流量

八、最佳实践总结

  1. 数据持久化:必须挂载/var/lib/mysql 目录
  2. 密码安全:使用强密码并定期更换
  3. 资源限制:根据服务器配置合理分配 CPU/内存
  4. 定期备份:实现自动化备份策略
  5. 监控告警:配置性能监控和异常告警
  6. 版本控制:明确记录使用的 MySQL 版本
觉得有用的话点个赞 👍🏻 呗。
❤️❤️❤️本人水平有限,如有纰漏,欢迎各位大佬评论批评指正!😄😄😄

💘💘💘如果觉得这篇文对你有帮助的话,也请给个点赞、收藏下吧,非常感谢!👍 👍 👍

🔥🔥🔥Stay Hungry Stay Foolish 道阻且长,行则将至,让我们一起加油吧!🌙🌙🌙

Read more

Obsidian资源下载终极提速指南:告别GitHub龟速的3个快速解决方案

还在为Obsidian主题和插件下载速度慢到怀疑人生而烦恼吗?每次从GitHub获取awesome-obsidian项目资源时,那个转圈圈的加载动画是不是让你想砸键盘?本文将分享亲测有效的Obsidian加速下载方法,通过国内镜像站点让你体验飞一般的下载速度! 【免费下载链接】awesome-obsidian🕶️ Awesome stuff for Obsidian 项目地址: https://gitcode.com/gh_mirrors/aw/awesome-obsidian 痛点分析:为什么你的Obsidian资源下载这么慢? 网络瓶颈识别: * GitHub国际带宽限制导致国内访问缓慢 * 网络波动造成频繁中断 * 大文件传输时缺乏稳定的CDN支持 速度对比实测: * 原GitHub地址:平均50KB/s,经常断连 * 国内镜像站点:稳定2-5MB/s,一次成功 三大提速方案深度解析 方案一:GitCode全量镜像(推荐新手) 作为国内最稳定的代码托管平台,GitCode提供了完整的awesome-obsidian项目镜像: # 一键克隆完整项

By Ne0inhk
开源二次开发:OpenClaw 自定义技能开发完整教程,从 0 到 1 打造专属 AI 工具链

开源二次开发:OpenClaw 自定义技能开发完整教程,从 0 到 1 打造专属 AI 工具链

一、OpenClaw 二次开发背景与核心概念 OpenClaw 是一款基于大语言模型的开源 AI 工具链框架,主打模块化设计与低代码扩展,允许开发者通过自定义技能(Skill)快速构建专属 AI 应用。其核心优势在于通过技能集市、任务调度器和模型适配层的三层架构,实现了技能的即插即用与跨模型兼容。 相较于传统 AI 开发框架,OpenClaw 无需从头搭建模型调用、上下文管理等基础能力,开发者仅需聚焦于业务逻辑实现,即可快速将自定义能力集成到完整的 AI 工具链中。目前该框架已支持 GPT、Claude、文心一言等主流大语言模型,覆盖文本处理、数据解析、工具调用等多类场景。 二、自定义技能的核心原理与开发规范 OpenClaw 的自定义技能本质是遵循统一接口规范的 Python 类,通过实现特定方法与框架进行交互。核心原理包括三点: 1. 技能注册机制:通过装饰器将自定义类标记为可被框架识别的技能,自动注册到技能集市 2. 参数标准化:统一使用 SkillParam 类封装输入输出参数,

By Ne0inhk
「源力觉醒 创作者计划」_文心大模型4.5系列开源模型,意味着什么?对开发者、对行业生态有何影响?

「源力觉醒 创作者计划」_文心大模型4.5系列开源模型,意味着什么?对开发者、对行业生态有何影响?

前言:哈喽,大家好,今天给大家分享一篇文章!并提供具体代码帮助大家深入理解,彻底掌握!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏+关注哦 💕 目录 * 「源力觉醒 创作者计划」_文心大模型4.5系列开源模型,意味着什么?对开发者、对行业生态有何影响? * 开发者的 "技术红利" 与 "创新跳板" * 降低开发成本:从 "军备竞赛" 到 "轻量启动" * 提供学习资源:从 "黑箱盲猜" 到 "白盒解剖" * 激发创新活力:从 "闭门造车" 到

By Ne0inhk
【Git】基本操作

【Git】基本操作

目录 创建 Git 本地仓库 配置 Git 认识工作区、暂存区、版本库 添加文件 场景一 查看 .git 文件 场景二 修改文件 版本回退 撤销修改 情况一:对于工作区的代码,还没有add 情况二:已经add ,但没有commit 情况三:已经add ,并且也commit 了 总结 删除文件 创建 Git 本地仓库 要提前说的是,仓库是进行版本控制的一个文件目录。我们要想对文件进行版本控制,就必须先创建一个仓库出来。   创建一个 Git 本地仓库对应的命令为 git init ,注意命令要在已经存在的文件目录下执行,之后这个文件目录就成了本地仓库,例如:创建gitcode目录,在gitcode目录下执行git init,gitcode就变成了本地仓库 hyb@

By Ne0inhk