Docker实操:安装MySQL5.7详解

news/2025/11/5 16:27:53/文章来源:https://www.cnblogs.com/karkash/p/19194041

介绍

Docker 中文网址: https://www.dockerdocs.cn

Docker Hub官方网址:https://hub.docker.com

Docker Hub中MySQL介绍:https://hub.docker.com/_/mysql

image

image

 

image

准备

先创建3个目录,创建MySQL容器时会挂载容器的卷(Volume),用于Docker和宿主机(Centos)之间文件共享,包括配置文件、数据文件和日志文件。

什么是卷(Volume)?命令 docker -v 中的“-v”就是这个卷,“-v”只是“--volume”的简写。

客官请留步,多少的看一下!!!

Docker官方文档解释卷的含义:https://docs.docker.com/storage/volumes/

由于本人的英文水平非常的一般,所有我看的中文文档:https://www.dockerdocs.cn/storage/volumes/

image

下面这个操作可以不用,因为下面会有整合完整的使用命令!!!

使用 -p 创建多级目录,即 mydata 目录下创建 mysql 目录, mysql 目录下又创建 log 、data 、conf 三个目录:

mkdir -p /mydata/mysql/log
mkdir -p /mydata/mysql/data
mkdir -p /mydata/mysql/conf

    sudo chmod -R 777 /mydata

安装

  • 拉取MySQL指定版本的镜像
  • 运行容器
sudo docker run -p 53306: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=Aa123098@\
-d mysql:5.7

这个 Docker 命令是用于启动 MySQL 5.7 容器的,让我们解释其中的各个部分:

docker run:这是 Docker 启动容器的命令。
-p 53306:3306:这部分命令将主机的端口 53306 映射到容器内的 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 镜像。

这个命令将启动一个 MySQL 5.7 容器,将 MySQL 数据、日志和配置文件挂载到主机上的目录中,设置 MySQL 根密码,并允许容器在后台运行,以及在容器退出时自动重新启动。这是一个典型的用例,用于在 Docker 中运行 MySQL 数据库容器。

宿主机新建配置文件

在宿主机,宿主机,宿主机上新建!!!

自定义的 my.cnf 配置文件。 注意!!!/mydata/mysql/conf/ 目录下创建自定义的 my.cnf 配置文件。文件名随意,文件格式必须为 .cnf

vi /mydata/mysql/conf/my.cnf

添加容器运行的配置参数。使用的是utf8mb4编码而不是 utf8 编码

[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

保存后,已经创建了一个名为 /mydata/mysql/conf/my.cnf 的 MySQL 配置文件。这个文件包含了一些 MySQL 的配置选项,用于配置 MySQL 服务器的字符集和排序规则等设置。让我解释一下这个配置文件的内容:

  • [client] 部分包含了 MySQL 客户端的配置,确保客户端使用 UTF-8 字符集。
  • [mysql] 部分也配置了 MySQL 客户端的默认字符集。
  • [mysqld] 部分包含了 MySQL 服务器的配置选项,用于配置 MySQL 服务器的行为。

以下是这个配置文件的各个配置选项的解释:

default-character-set=utf8mb4default-character-set=utf8mb4:这两个选项在 [client][mysql] 部分都设置了默认字符集为 UTF-8,确保客户端和服务器使用相同的字符集。
init_connect='SET collation_connection = utf8mb4_unicode_ci'init_connect='SET NAMES utf8mb4':这些选项在 [mysqld] 部分设置了初始化连接时执行的 SQL 语句。这些语句设置了连接的字符集和排序规则为 UTF-8 和 utf8mb4_unicode_ci
character-set-server=utf8mb4:这个选项设置了 MySQL 服务器的字符集为 UTF-8。
collation-server=utf8mb4_unicode_ci:这个选项设置了 MySQL 服务器的排序规则为 utf8mb4_unicode_ci,通常用于支持国际化和多语言字符的正确排序。
skip-character-set-client-handshake:这个选项用于禁用客户端字符集握手,允许客户端和服务器之间的字符集设置更加灵活。
skip-name-resolve:这个选项禁用了主机名解析,以提高连接性能。

它适用于确保 MySQL 以正确的字符集和排序规则处理数据。确保将这个配置文件用于启动 MySQL 服务器,可以通过 -v 选项将配置文件挂载到容器内。例如:

docker run -d -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=123xxx \
-d mysql:5.7

将在容器内使用自定义配置文件 /mydata/mysql/conf/my.cnf 来启动 MySQL 服务器。

进入容器

docker exec -it mysql bash
  • 可以使用外部工具连接测试
mysql -h 主机IP地址 -P 3306 -u root -p

退出MySQL服务

退出容器

添加配置

  • 修改容器中的MySQL时间不同步的问题
  • 修改容器中的MySQL分组only_full_group_by问题
  • 修改表名不区分大小写问题

在MySQL配置文件(通常是my.cnf)中,确保已正确配置时区。您可以在配置文件中添加以下内容:

[mysqld]
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

这是一个 MySQL 配置文件(my.cnfmy.ini)中的一部分,用于设置数据库的默认时区、SQL 模式和其他选项。以下是这些选项的详细解释:

default_time_zone = '+8:00':设置数据库的默认时区为 UTC+8。这意味着在执行与日期和时间相关的操作时,数据库将根据这个时区进行转换。
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION:设置 SQL 模式,以便更严格地遵循 SQL 标准。这有助于避免潜在的数据问题和错误。具体来说,这些模式包括:
STRICT_TRANS_TABLES:禁止在严格模式下插入无效日期和数据。
NO_ZERO_IN_DATE:禁止使用零日期(如 '0000-00-00')。
NO_ZERO_DATE:禁止使用零日期(如 '0000-00-00')。
ERROR_FOR_DIVISION_BY_ZERO:将除以零的操作视为错误,而不是警告。
NO_AUTO_CREATE_USER:禁止自动创建用户。
NO_ENGINE_SUBSTITUTION:如果请求的存储引擎不可用,禁止自动使用替代存储引擎。
lower_case_table_names = 1:将所有表名存储为小写。这有助于避免因大小写不同而导致的表名混淆和错误。在某些操作系统(如 Windows 和 macOS)上,这个选项可能对大小写不敏感,而在其他操作系统(如 Linux)上可能对大小写敏感。设置为 1 表示启用该功能,0 表示禁用。

重启服务/容器

修改密码

进入容器

docker exec -it mysql bash

登录MySQL

修改密码

# 修改普通用户,只改一个就好 
SET PASSWORD FOR 'youruser' = PASSWORD('xxxxxxxx');# 修改root用户,改两个 
SET PASSWORD FOR 'root' = PASSWORD('xxxxxxxxx'); 
SET PASSWORD FOR 'root'@'localhost'=PASSWORD('xxxxxxxxx');

注意,注意,注意!!!到此为止,docker下的MySQL服务已经可用了,下面是一些细化操作。


禁用 root 账户被外部工具连接

进入到容器里,连接mysql,删除mysql数据库user表中 user=“root”,host="%"的那条记录。因为这条数据会允许 root 账户被允许外部工具(如Navicat或SQLyog)连接,实际上,应该禁止这么做,正确做法是只允许 root 账户本地连接。如果想 root 账户继续被外部工具连接,那就把root密码设置得更复杂,过于简单不安全!

切换到 mysql 数据库,并查看 user 表。

select user,host from user;

删除mysql数据库user表中 user=“root”,host="%"的那条记录,并刷新权限。

可以这么做,但是不建议这么干,改个复杂的密码,不暴露给其他使用者就好了!!!

可以这么做,但是不建议这么干,改个复杂的密码,不暴露给其他使用者就好了!!!

可以这么做,但是不建议这么干,改个复杂的密码,不暴露给其他使用者就好了!!!

delete user from mysql.user where user='root' and host='%';

创建新账户供外部工具连接

使用 CREATE 创建账户,例如对应mysql.user表中,字段user为 goboy,字段host为 % ,账号密码为 123456 ,“%”代表任何主机。使用 GRANT 授予账户特定权限。

创建用户和密码

CREATE USER 'goboy'@'%' IDENTIFIED BY '123456';

授予账户特定权限。ALL 和 ALL PRIVILEGES 是一样的,可简写为 ALL 。

GRANT ALL ON *.* TO 'goboy'@'%' WITH GRANT OPTION;

刷新账号权限。

新用户登录测试

容器基础操作

启动容器

docker start mysql
或
docker start 容器ID

停止容器

docker stop mysql
或
docker stop 容器ID

删除容器

docker rm mysql
或
docker rm 容器ID

重启容器

docker restart mysql
或
docker restart 容器ID

查看状态

查看所有容器的运行状态,包括运行的和停止的

查看所有运行中的容器的状态,不包括停止的

我正在参与2023腾讯技术创作特训营第三期有奖征文,组队打卡瓜分大奖!

MySQL的conf.d和conf文件都是用于配置MySQL服务的重要文件,但它们在配置管理和使用上有所不同。以下是它们之间的主要区别:

conf.d文件的作用

自定义配置文件:conf.d目录下的文件主要用于存放自定义的MySQL配置,例如,如果您想要添加或修改某些服务端或客户端的配置,可以在这个目录下创建相应的.cnf文件。

合并配置:MySQL会读取conf.d目录下的所有.cnf文件,并将它们合并为一个配置。这意味着,如果您在conf.d目录下创建了新的my.cnf文件,MySQL会将其读取并合并到配置中,但不会覆盖/etc/my.cnf文件。

conf文件的作用

默认配置文件:conf文件通常是MySQL的默认配置文件,它包含了MySQL的基本配置信息。这个文件通常位于/etc/mysql/mysql.cnf或/etc/my.cnf,具体取决于您的操作系统和MySQL版本。

服务启动和运行的基础:conf文件是MySQL服务启动和运行的基础,它包含了服务所需的基本配置,如数据库目录、日志文件位置等。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/956915.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

在 Docker 中部署 FTP 服务器

在 Docker 中部署 FTP 服务器可以通过以下步骤完成,这里以广泛使用的 pure-ftpd 镜像为例,提供完整部署方案: 📦 基础部署(单用户模式) # 创建数据目录 mkdir -p ~/ftp/data ~/ftp/config# 运行容器(单用户模式…

在AI技术唾手可得的时代,挖掘新需求成为核心竞争力——某知名自动化脚本项目需求洞察

本文分析了一个广受欢迎的自动化脚本项目,该项目包含多个实用脚本,如自动发送工作延迟消息、处理紧急邮件和远程控制咖啡机等,展示了在AI技术快速发展的背景下,识别真实用户需求的重要性。内容描述核心功能定位:该…

LangChain4j实战:模型参数配置、多模态、流式输出、聊天记忆、提示词工程全解析

LangChain4j实战:模型参数配置、多模态、流式输出、聊天记忆、提示词工程全解析 前提后面用于演示的代码环境为: JDK-21,apache-maven-3.6.2,spring-boot和langchain4j的版本如下面pom文件所示<properties><…

kafka-ui-docker-compose.yml

version: 3.8services:kafka-ui:image: artifacts.iflytek.com/docker-repo/provectuslabs/kafka-uicontainer_name: kafka-uiports:- "18080:8080"restart: unless-stoppedenvironment:- DYNAMIC_CONFIG_EN…

场景和使用的模型类型

目录背景和价值一、推理型智能体(绑定reasoning模型)二、基础型智能体(绑定basic模型)三、设计逻辑总结参考资料 背景和价值 以下是 deer-flow 的大模型配置如下链接 https://github.com/bytedance/deer-flow/blob…

lprm命令 – 移除打印队列中的任务

lprm命令来自于英文词组”Line printer remove“的缩写,其功能是用于移除打印队列中的任务,使用lprm命令来移除尚未完成的,正放在打印机贮列之中的打印任务。 语法格式: lprm [参数] 任务编号常用参数:-E 强制加密…

2025 年 11 月隐框幕墙精致钢厂家推荐排行榜,隐框幕墙精致钢型材,幕墙精致钢构件,精致钢幕墙材料公司推荐,专业品质与结构安全之选

2025 年 11 月隐框幕墙精致钢厂家推荐排行榜:专业品质与结构安全之选 随着建筑行业对幕墙系统安全性、美观性和耐久性要求的不断提升,隐框幕墙精致钢作为现代建筑幕墙的核心支撑材料,其质量与性能日益受到行业关注。…

[笔记]欧拉图

定义欧拉路径是每条边恰好经过一次的路径;存在欧拉路径的图是半欧拉图。 欧拉回路是每条边恰好经过一次的回路;存在欧拉回路的图是欧拉图。判定无向图是欧拉图\(\iff\)非零度节点连通,所有节点度数为偶。此时起点可…

基于粒子群算法(PSO)的灰度图像阈值分割及多适应度函数实现

1. 算法框架设计 %% 核心流程 1. 图像预处理 → 2. PSO参数初始化 → 3. 适应度函数计算 → 4. 粒子群迭代 → 5. 阈值输出2. PSO参数设置 % 粒子群参数 n_particles = 30; % 粒子数量 max_iter = 100; % 最大…

遍插茱萸少一N

你们开 ipart 不带 n 是吧?我把你们挂到 AI 学会上炒作一番好不好?明年就让你加倍 neural network 起来,改叫 ACGNN 如何?后年就是 ACG4N,最后就变成 ACG8N,学界被这种自娱自乐的小圈子产物塞满,彻底完 G8 蛋了…

小狗

小狗WSY MT 二哈

VScode输出控制台中文显示乱码解决方法(仅限于Python)

1、右键点击“我的电脑”(或“此电脑”),选择“属性”; 2、点击“高级系统设置”选项; 3、在弹出的系统属性窗口中,点击“环境变量”按钮; 4、在“系统变量”或“用户变量”下,点击“新建”来创建一个新的变量; 5…

高教工具箱使用说明书.docx

高教工具箱使用说明 一. 联接多个Excel表 1.适用场景:期末要汇总成绩了,而你的平时成绩、期中成绩和期末成绩存在三个不同的excel表里,而且学生排列的顺序是不同的。这时候,你可以使用此功能,把它们联结成一个Ex…

2025石家庄设计公司权威排行推荐榜:石家庄vi设计公司,石家庄画册设计公司品牌实力与创意服务的全景评测

引言 当前石家庄设计行业呈现蓬勃发展态势,但市场乱象同样不容忽视:设计水平参差不齐,部分公司缺乏专业设计团队和系统化服务流程,导致设计方案同质化严重,无法满足企业品牌建设与市场传播需求;服务质量良莠不齐…

2025年博物馆数字展厅制造企业权威推荐榜单:智能化展厅/企业展厅LED屏/企业展示展厅源头厂家精选

在数字化浪潮的推动下,博物馆展厅已从传统的静态陈列空间,升级为集VR/AR、AI、数字孪生等前沿技术于一体的沉浸式智能交互载体。行业数据显示,超过75%的新建展厅已集成至少三种数字互动技术,沉浸式体验项目的平均观…

基于直方图均衡化的图像去雾算法改进

一、传统直方图均衡化的局限性全局处理缺陷 无法处理局部光照不均(如浓雾区域与清澈区域并存) 容易导致过曝或细节丢失(如天空区域过度拉伸) 颜色失真问题 直接对RGB通道处理会破坏色彩平衡 暗通道估计偏差导致大气…

2025年现代候车亭企业权威推荐榜单:现代公交候车亭/现代公交站台/现代公交站亭源头厂家精选

随着城市智能化建设与公共交通服务的持续升级,现代候车亭作为城市家具的重要组成,其市场需求显著增长。现代候车亭以其智能化服务功能、耐用材质与人性化设计,广泛应用于城市干道、公交枢纽及社区周边等场景。本文将…

2025年水利铸铁闸门厂家权威推荐榜单:弧形铸铁闸门/抓斗式清污机/铸铁闸门源头厂家精选

在水利工程、农田灌溉及水电站建设领域,铸铁闸门作为水工建筑物的关键控制设备,其密封性、耐腐蚀性及结构强度直接影响水资源调控效率与工程安全。根据水利行业统计数据显示,2025年全国水利建设投资规模预计突破1.2…

智能充气泵方案:无线充气泵pcba的研发设计

充气泵PCBA(Printed Circuit Board Assembly)是现代充气设备的核心组件,负责控制充气泵的运行、监测气压、管理电源等功能。随着智能家居、汽车、户外运动等领域的快速发展,充气泵PCBA的设计与制造技术也在不断进步…

大屏动态交互总结

大屏动态交互总结大屏内容一般多且杂,根据设计图布局可分成左中右三栏或者左右两栏。 父组件 Index.vue 包含 左中右三栏。父组件作为“状态管理中心的“总指挥”它不关心具体数据怎么画成图表或表格,那是“执行部…