用 Docker 安装并启动 MySQL:从零到实战的完整指南

用 Docker 安装并启动 MySQL:从零到实战的完整指南

MySQL 是目前最流行的关系型数据库之一,广泛应用于各类应用系统中。使用 Docker 部署 MySQL 可以极大简化环境配置,保证开发、测试和生产环境的一致性。本文将详细介绍如何使用 Docker 安装、配置和管理 MySQL 容器,适合初学者快速上手。

一、准备工作:安装 Docker 环境

在开始之前,请确保你的系统已经安装了 Docker。如果尚未安装,可以按照以下步骤操作:

1. 安装 Docker(以 Ubuntu 为例)

bash

# 更新系统包索引 sudo apt-get update # 安装必要的依赖包 sudo apt-get install -y ca-certificates curl gnupg lsb-release # 添加Docker官方GPG密钥 curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg # 设置Docker稳定版仓库 echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null # 安装Docker引擎 sudo apt-get update sudo apt-get install -y docker-ce docker-ce-cli containerd.io # 启动Docker服务并设置开机自启 sudo systemctl start docker sudo systemctl enable docker # 验证Docker是否安装成功 sudo docker --version 

2. 安装 Docker(以 CentOS 为例)

bash

# 更新系统包 sudo yum update -y # 安装Docker依赖 sudo yum install -y yum-utils device-mapper-persistent-data lvm2 # 添加Docker软件源 sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo # 安装Docker引擎 sudo yum install -y docker-ce docker-ce-cli containerd.io # 启动Docker服务并设置开机自启 sudo systemctl start docker sudo systemctl enable docker # 验证Docker是否安装成功 sudo docker --version 

3. 非 root 用户配置(可选)

为了避免每次使用docker命令都需要sudo权限,可以将当前用户添加到docker用户组:

bash

sudo usermod -aG docker $USER # 生效配置(需要重新登录) newgrp docker 

二、Docker 安装 MySQL:两种常用方式

方式 1:快速启动默认配置的 MySQL

如果只需要临时使用 MySQL 进行测试,最简单的方式是直接运行官方镜像:

bash

docker run --name mysql-test -e MYSQL_ROOT_PASSWORD=root -p 3306:3306 -d mysql:latest 

参数说明:

  • --name mysql-test:给容器命名为mysql-test
  • -e MYSQL_ROOT_PASSWORD=root:设置 root 用户密码为 root
  • -p 3306:3306:将主机的 3306 端口映射到容器的 3306 端口
  • -d:后台运行容器
  • mysql:latest:使用最新版本的 MySQL 官方镜像

方式 2:自定义配置启动 MySQL(推荐生产环境)

对于实际生产环境,我们需要自定义 MySQL 配置,并确保数据持久化到主机,避免容器删除后数据丢失。

步骤 1:创建配置文件和数据目录

bash

# 创建存放MySQL配置、数据和日志的目录 mkdir -p /opt/mysql/{conf,data,logs} # 设置目录权限(确保容器内用户可以读写) sudo chmod -R 777 /opt/mysql 
步骤 2:编写 MySQL 配置文件

创建并编辑 MySQL 配置文件:

bash

vi /opt/mysql/conf/my.cnf 

添加以下基础配置(可根据需求调整):

ini

[mysqld] # 数据库默认字符集 character-set-server=utf8mb4 # 数据库字符集对应一些排序等规则,注意要和character-set-server对应 collation-server=utf8mb4_unicode_ci # 服务端口号 port=3306 # 数据库存储路径(容器内路径) datadir=/var/lib/mysql # 日志文件路径(容器内路径) log-error=/var/log/mysql/error.log # 允许最大连接数 max_connections=1000 # SQL模式 sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES [client] # 客户端默认字符集 default-character-set=utf8mb4 [mysql] # MySQL客户端默认字符集 default-character-set=utf8mb4 
步骤 3:启动 MySQL 容器

bash

docker run -d \ --name mysql \ --restart=always \ -p 3306:3306 \ -e MYSQL_ROOT_PASSWORD=your_secure_password \ -e TZ=Asia/Shanghai \ -v /opt/mysql/conf/my.cnf:/etc/mysql/conf.d/my.cnf \ -v /opt/mysql/data:/var/lib/mysql \ -v /opt/mysql/logs:/var/log/mysql \ mysql:8.0 

参数详解:

  • --name mysql:容器名称为 mysql
  • --restart=always:容器退出时自动重启
  • -p 3306:3306:端口映射,主机端口:容器端口
  • -e MYSQL_ROOT_PASSWORD=your_secure_password:设置 root 用户密码
  • -e TZ=Asia/Shanghai:设置时区为上海
  • -v /opt/mysql/conf/my.cnf:/etc/mysql/conf.d/my.cnf:挂载配置文件
  • -v /opt/mysql/data:/var/lib/mysql:挂载数据目录,实现数据持久化
  • -v /opt/mysql/logs:/var/log/mysql:挂载日志目录
  • mysql:8.0:使用 MySQL 8.0 版本(生产环境建议指定具体版本)

三、验证 MySQL 容器是否正常运行

1. 查看容器状态

bash

# 查看容器运行状态 docker ps | grep mysql # 查看容器详细日志 docker logs mysql 

如果看到类似ready for connections的日志,说明 MySQL 启动成功。

2. 连接 MySQL 进行测试

bash

# 进入MySQL容器 docker exec -it mysql mysql -u root -p # 输入密码后,测试创建数据库和表 mysql> CREATE DATABASE testdb; mysql> USE testdb; mysql> CREATE TABLE users (id INT, name VARCHAR(50)); mysql> INSERT INTO users VALUES (1, 'Docker MySQL'); mysql> SELECT * FROM users; 

如果能正常执行以上 SQL 命令,说明 MySQL 工作正常。

四、MySQL 容器管理常用命令

1. 基本操作

bash

# 启动已停止的MySQL容器 docker start mysql # 停止运行中的MySQL容器 docker stop mysql # 重启MySQL容器 docker restart mysql # 查看容器详细信息 docker inspect mysql 

2. 配置文件更新

当需要修改 MySQL 配置时,只需更新主机上的/opt/mysql/conf/my.cnf文件,然后重启容器即可:

bash

# 编辑配置文件 vi /opt/mysql/conf/my.cnf # 重启容器使配置生效 docker restart mysql 

3. 升级 MySQL 版本

bash

# 1. 停止并备份当前容器数据(关键步骤) docker stop mysql sudo cp -r /opt/mysql/data /opt/mysql/data_backup # 2. 删除当前容器 docker rm mysql # 3. 拉取新版本镜像 docker pull mysql:8.0.33 # 替换为目标版本 # 4. 使用相同命令启动新容器 docker run -d \ --name mysql \ --restart=always \ -p 3306:3306 \ -e MYSQL_ROOT_PASSWORD=your_secure_password \ -e TZ=Asia/Shanghai \ -v /opt/mysql/conf/my.cnf:/etc/mysql/conf.d/my.cnf \ -v /opt/mysql/data:/var/lib/mysql \ -v /opt/mysql/logs:/var/log/mysql \ mysql:8.0.33 # 使用新拉取的版本 

五、安全最佳实践

  1. 设置强密码:务必为 root 用户设置复杂密码,避免使用简单密码
  2. 限制网络访问:生产环境建议通过防火墙限制 3306 端口的访问来源
  3. 使用固定版本镜像:避免使用latest标签,应指定具体版本(如mysql:8.0.33
  4. 定期备份数据:虽然数据已持久化到主机,仍建议定期备份/opt/mysql/data目录
  5. 最小权限原则:运行容器时可考虑添加--user参数指定非 root 用户运行
  6. 启用 SSL 连接:生产环境应配置 MySQL 使用 SSL 加密客户端连接
  7. 定期更新镜像:及时更新 MySQL 镜像以获取安全补丁

六、常见问题解决

1. 容器启动后立即退出

检查日志定位问题:

bash

docker logs mysql 

常见原因:配置文件错误、目录权限不足(可尝试调整/opt/mysql目录权限)

2. 无法远程连接 MySQL

  • 检查主机防火墙是否开放 3306 端口

确认 MySQL 用户是否允许远程连接(默认 root 用户只允许本地连接):sql

-- 进入MySQL后执行 use mysql; update user set host = '%' where user = 'root'; flush privileges; 

3. 数据持久化失败

  • 确认挂载目录权限正确
  • 检查日志文件是否有相关错误信息
  • 确保启动命令中的数据目录挂载正确

4. 中文乱码问题

  • 确保配置文件中已正确设置character-set-server=utf8mb4

新建数据库和表时指定字符集:sql

CREATE DATABASE testdb CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; 

总结

通过 Docker 安装和管理 MySQL 可以显著简化部署流程,提高环境一致性。本文介绍的方法既适用于开发测试环境,也可通过适当调整配置应用于生产环境。核心在于理解数据持久化的实现方式和容器与主机的交互机制,以便更好地管理和维护 MySQL 服务。

Read more

Python vs C++ 极简性能对比

一句话结论: 同样的计算任务,C++ 比 Python 快 10~100 倍,内存占用低 10 倍以上! 📊 1. 核心对比表(一目了然) 维度测什么Python(脚本语言)C++(编译语言)预期差距时间运行速度解释执行,慢编译为机器码,极快C++ 快 10~100 倍空间内存占用整数是对象,带元数据直接用 long long,无额外开销C++ 内存 < 2MB,Python > 10MB 💻 2. 代码实操(复制即用,已修复格式 & 跨平台) ✅ Python 版(全平台通用) # python_bench.pyimport time import

By Ne0inhk
python+flask的高校二手交易网站设计与实现_9e19y639

python+flask的高校二手交易网站设计与实现_9e19y639

目录 * 项目概述 * 技术栈选择 * 核心功能模块 * 数据库设计 * 开发里程碑 * 安全考虑 * 扩展性设计 * 注意事项 * 开发技术路线 * 源码lw获取/同行可拿货,招校园代理 :文章底部获取博主联系方式! 项目概述 该项目旨在开发一个基于Python和Flask的高校二手交易平台,实现学生之间的二手物品交易功能。平台需包含用户注册、商品发布、搜索、交易管理等核心模块。 技术栈选择 * 后端框架: Flask(轻量级、灵活性强) * 前端模板: Jinja2 + Bootstrap(快速构建响应式界面) * 数据库: SQLite/MySQL(根据部署需求选择) * 文件存储: 本地存储或云存储(如七牛云) * 部署: Gunicorn + Nginx(生产环境) 核心功能模块 用户系统 * 注册/登录(含邮箱验证) * 个人中心(头像上传、信息修改) * 信用评分机制

By Ne0inhk
【经管论文复现】Python+FactSet Revere全球供应链数据库,测度供应链断裂与重构变量——丁浩员等(2024)《经济研究》复现

【经管论文复现】Python+FactSet Revere全球供应链数据库,测度供应链断裂与重构变量——丁浩员等(2024)《经济研究》复现

目录 * 1 对Factset全球供应链数据库的简单解读 * 2 对丁浩员等测度方式的解读 * 2.1 断裂和恢复指标的解读 * 2.2 转移指标的解读 * 2.3 遗留的问题 * 3 供应链断裂与重构指标的测度 * 3.1 原始数据库处理 * 3.2 中国沪深A股上市企业作为供应商的供应链关系对筛选、标记与调整 * 3.2.1 原始数据筛选 * 3.2.2 供应链数据标记 * 3.2.3 根据rel_type关系和flag标记进行调整 * 3.3 供应链关系的时间顺序调整与断裂、恢复变量测度 * 3.3.1 供应链关系的时间顺序调整 * 3.3.2 月度数据的生成 * 3.4

By Ne0inhk
python | akshare,一个超强的 开源Python 金融数据接口库!

python | akshare,一个超强的 开源Python 金融数据接口库!

本文来源公众号“python”,仅用于学术分享,侵权删,干货满满。 原文链接:akshare,一个超强的 Python 库! 大家好,今天为大家分享一个超强的 Python 库 - akshare。 Github地址:https://github.com/akfamily/akshare 在金融市场中,数据是做出明智决策的关键。无论是股票、基金、期货、外汇还是宏观经济数据,都需要有准确、及时的数据支持。AkShare 是一个开源的 Python 金融数据接口库,专门用于获取国内外金融市场数据、经济数据以及其他相关数据。AkShare 的目标是为量化交易、投资研究和金融数据分析提供一站式的数据接口,帮助开发者和研究者便捷地获取所需数据。 1 安装 AkShare 可以通过 pip 进行安装,安装过程非常简单: pip install akshare

By Ne0inhk