环境搭建-Docker搭建MySQL

Docker搭建MySQL

一、前言

本文使用的Docker使用Windows搭建,Linux版本的搭建方式一样。
Windows系统搭建Docker

二、Docker安装MySQL5.7安装

拉取MySQL指定版本的镜像

bash 复制代码
docker pull mysql:5.7

运行容器,启动 MySQL 5.7 容器:

bash 复制代码
docker run -p 3306:3306 --name mysql  -v /mydata/mysql/log:/var/log/mysql  -v /mydata/mysql/data:/var/lib/mysql  -v  mydata/mysql/conf:/etc/mysql  --restart=always  -e MYSQL_ROOT_PASSWORD=123456  -d mysql:5.7

参数说明:

bash 复制代码
docker run:这是 Docker 启动容器的命令。

-p 3306:3306:这部分命令将主机的端口 3306 映射到容器内的 3306 端口。这样,您可以通过主机的 3306 端口来访问容器内运行的 MySQL 服务。

--name mysql:通过此选项,您为容器指定了一个名称,即 mysql。这使得容器更容易识别和管理。

-v /mydata/mysql/log:/var/log/mysql:这是一个数据卷挂载操作,将主机上的 /mydata/mysql/log 目录挂载到容器内的 /var/log/mysql 目录。这样,MySQL 日志文件将在主机上存储,以供查看。

-v /mydata/mysql/data:/var/lib/mysql:同样,这是另一个数据卷挂载操作,将主机上的 /mydata/mysql/data 目录挂载到容器内的 /var/lib/mysql 目录。这用于将 MySQL 数据文件保存在主机上,以便数据持久化。

-v /mydata/mysql/conf:/etc/mysql:此挂载操作将主机上的 /mydata/mysql/conf 目录挂载到容器内的 /etc/mysql 目录。这样,您可以提供自定义的 MySQL 配置文件。

--restart=always:这个选项指示 Docker 在容器退出时自动重新启动容器。这对于确保 MySQL 服务一直可用非常有用。

-e MYSQL_ROOT_PASSWORD=123456:这个选项设置 MySQL 根用户的密码。在示例中,密码被设置为 123456

-d:这个选项使容器在后台运行,以允许您继续在终端中执行其他命令。

mysql:5.7:这是要运行的 Docker 镜像的名称和标签。在此示例中,使用 MySQL 5.7 镜像。

PS:

bash 复制代码
注意:实现配置挂载时,本地配置目录如果是空目录,那么挂载的时候,mysql容器内的配置目录也会为空(因为挂载了,会同步,同步会将容器内的配置目录也为空),这个时候,容器就无法成功运行。
解决这个问题,我们只要保证本地配置目录不为空就行了。解决思路有2个 :

1:启动一个已有容器,将容器内的配置文件 /etc/mysql/my.cnf,copy到本地。利用 docker cp命令完成;
docker cp mysql5.7-server:/etc/mysql/my.cnf E:/mysql/conf/my.cnf

2.手动在本地新建一个my.cnf配置文件,将容器内配置文件 /etc/mysql/my.cnf内容复制到本地的配置文件中;

my.cnf:

bash 复制代码
[client]
default-character-set=utf8mb4

[mysql]
default-character-set=utf8mb4

[mysqld]
init_connect="SET collation_connection = utf8mb4_unicode_ci"
init_connect="SET NAMES utf8mb4"
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
skip-character-set-client-handshake
skip-name-resolve
default_time_zone = '+8:00'
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
lower_case_table_names=1

三、建立远程连接

先进入容器

bash 复制代码
docker exec -it mysql bash

执行MySQL命令, 输入root密码, 连接MySQL

bash 复制代码
mysql -uroot -p123456

输入密码后, 执行下面命令创建新用户 (用户名: test , 密码: test123)

bash 复制代码
GRANT ALL PRIVILEGES ON *.* TO 'test'@'%' IDENTIFIED BY 'test123' WITH GRANT OPTION;

四、Docker安装MySQL8.0

拉取MySQL镜像

bash 复制代码
docker pull mysql:8.0.21

运行MySQL容器

bash 复制代码
docker run -d -p 3306:3306 --privileged=true -v /docker/mysql/data:/var/lib/mysql -v /docker/mysql/config:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=root --name mysql mysql:8.0.21 --character-set-server=utf8mb4 --collation-server=utf8mb4_general_ci

5.7和8.0版本的主要不同是挂载数据卷配置路径不同。

相关推荐
toooooop81 小时前
MySQL source导入实战:踩坑记,phpMyAdmin 502、source导入巨慢问题解决
mysql
hasty3 小时前
Origin 校验不是身份认证:MySQL MCP Server 漏洞给 AI 平台的警告
数据库·mysql·安全
cpolar技术支持3 小时前
Docker 容器启动失败怎么查?端口、日志、权限与网络排障完整教程
linux·docker·容器·cpolar·网络排障
一技安身5 小时前
【大模型】Win11 部署 DeepSeek+ RAGFlow0.27.2 (Ollama方案,断网可用)
docker·ai·语言模型
新时代牛马6 小时前
docker run 起不来?从dockerd、containerd 到runc 一条线讲透
运维·docker·容器
JavaPub-rodert6 小时前
Docker 安装 MySQL 完整教程:从零部署数据库,到生产环境持久化配置
数据库·mysql·docker
隔窗听雨眠6 小时前
MySQL整库迁移至KaiwuDB完全指南:从数据类型映射到生产切换的系统性实践
数据库·mysql
2301_32241428047 小时前
活力孕康复APP 47737- 原创(免费领源码+部署教程+开发环境)
java·vue.js·spring boot·mysql·微信小程序·idea·微信开发者工具
努力努力再努力wz7 小时前
【Docker 入门系列】:从 Namespace、CGroup 到 LXC:理解容器运行时、rootfs 与 LXC 实战
运维·docker·容器
JavaPub-rodert8 小时前
Docker 多阶段构建:为什么生产环境镜像可以小 90%
运维·docker·容器