Docker实操:安装MySQL5.7详解(保姆级教程)

news2024/12/26 23:28:56

介绍

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

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

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

请在此添加图片描述

请在此添加图片描述

请在此添加图片描述

切换到“Tags”页面,复制指定的MySQL版本拉取命令,例如 :docker pull mysql:5.7

请在此添加图片描述

准备

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

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

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

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

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

请在此添加图片描述

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

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

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

安装

  • 拉取MySQL指定版本的镜像
docker pull mysql:5.7
  • 运行容器
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

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

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 镜像。

这个命令将启动一个 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=utf8mb4 default-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=123456 \
-d mysql:5.7

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

重启服务

docker restart mysql

查看日志

docker logs mysql

请在此添加图片描述

测试连接

请在此添加图片描述

进入容器

docker exec -it mysql bash

请在此添加图片描述

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

退出MySQL服务

\q

退出容器

exit

添加配置

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

在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 restart mysql

修改密码

进入容器

docker exec -it mysql bash

登录MySQL

mysql -u root -p123456

请在此添加图片描述

修改密码

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

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

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

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


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

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

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

use mysql;
select user,host from user;

请在此添加图片描述

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

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

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

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

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

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

使用 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;

刷新账号权限。

FLUSH PRIVILEGES;

请在此添加图片描述

新用户登录测试

请在此添加图片描述

容器基础操作

启动容器

docker start mysql
或
docker start 容器ID

停止容器

docker stop mysql
或
docker stop 容器ID

删除容器

docker rm mysql
或
docker rm 容器ID

重启容器

docker restart mysql
或
docker restart 容器ID

查看状态

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

docker ps -a

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

docker ps

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.coloradmin.cn/o/2143671.html

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

相关文章

LabVIEW提高开发效率技巧----使用LabVIEW工具

LabVIEW为开发者提供了多种工具和功能,不仅提高工作效率,还能确保项目的质量和可维护性。以下详细介绍几种关键工具,并结合实际案例说明它们的应用。 1. VI Analyzer:自动检查代码质量 VI Analyzer 是LabVIEW提供的一款强大的工…

架构师,被严重低估的角色!

在企业数字化转型与变革的壮阔浪潮中,企业架构(Enterprise Architecture,EA)作为一门高度复杂且跨学科的知识体系,无可争议地成为了驱动组织战略深化与技术创新的核心引擎。尽管市场上充斥着丰富的指导理论与参考资料&…

202409012在飞凌的OK3588-C的核心板上使用Rockchip原厂的Buildroot点MIPI屏【背光篇】

202409012在飞凌的OK3588-C的核心板上使用Rockchip原厂的Buildroot点MIPI屏【背光篇】 2024/9/12 10:44 缘起,拿到一块MIPI屏,需要使用飞凌的OK3588-C的核心板在Android12下点亮。 在飞凌的Linux R4下修改部分屏参之后即可直接点亮。 但是在飞凌的Andro…

Java笔记-MinIO Java SDK的使用

此博文内容为&#xff1a; 使用SDK创建bucket&#xff1b; 使用SDK上传文件&#xff1b; 使用SDK下载文件。 maven添加&#xff1a; <dependency><groupId>io.minio</groupId><artifactId>minio</artifactId><version>8.5.2</versi…

Linux使用Clash,clash-for-linux

文件下载 clash-for-linuxhttps://link.zhihu.com/?targethttps%3A//zywang.lanzn.com/ijE2a1m7h6mb&#xff08;百度和阿里云盘都不支持这个文件分享&#xff09;。 使用须知 - 此项目不提供任何订阅信息&#xff0c;请自行准备Clash订阅地址。 - 运行前请手动更改.env文件…

嵌入式开发—CAN通信协议详解与应用(中)

书接上回&#xff1a;嵌入式开发—CAN通信协议详解与应用&#xff08;上&#xff09; 文章目录 CAN通讯中的位时间和位同步位时间的构成采样点 位时间的计算公式时间量子&#xff08;Time Quantum, TQ&#xff09;位时间的阶段示意图位同步机制 CAN通信中的仲裁规则仲裁规则的…

03-Mac系统PyCharm主题设置

目录 1. 打开PyCharm窗口 2. Mac左上角点击PyCharm&#xff0c;点击Settings 3. 点击第一项Appearance& Behavior 4. 点击Appearance 5. 找到Theme进行设置 1. 打开PyCharm窗口 2. Mac左上角点击PyCharm&#xff0c;点击Settings 3. 点击第一项Appearance& Behavi…

【例题】lanqiao4425 咖啡馆订单系统

样例输入 3 2 2 1 3 1 2样例输出 3 2样例说明 输入的数组为&#xff1a;【3&#xff0c;1&#xff0c;2】 增量序列为&#xff1a;【2&#xff0c;1】 当增量 h2&#xff1a;对于每一个索引 i&#xff0c;我们会将数组元素 arr[i] 与 arr[i−h] 进行比较&#xff0c;并进行可…

Stable Diffusion绘画 | ControlNet应用-IP-Adapter:堪比 Midjourney 垫图

IP-Adapter 是腾讯AI实验室研发的控制器&#xff0c;属于 ControlNet 最强控制器前三之一。 如果想参照图片的风格&#xff0c;生成各种各样类似效果的图片&#xff0c;就可以用到 IP-Adapter。 在 ControlNet 单元中上传一张图片&#xff1a; 不输入任何提示词&#xff0c;出图…

MySQL数据库:掌握备份与恢复的艺术,确保数据安全无忧

作者简介&#xff1a;我是团团儿&#xff0c;是一名专注于云计算领域的专业创作者&#xff0c;感谢大家的关注 座右铭&#xff1a; 云端筑梦&#xff0c;数据为翼&#xff0c;探索无限可能&#xff0c;引领云计算新纪元 个人主页&#xff1a;团儿.-CSDN博客 目录 前言&#…

波导阵列天线学习笔记 馈电网络1 使用X型全公共波导馈网的毫米波大规模天线阵列的带宽提升

摘要&#xff1a; 全公共波导馈网的一次反射等效模型被研究用于提出一种毫米波大规模天线阵列带宽提升的新方法。理论分析显示由馈电网络拓扑造成的指定频率的多级小反射的同相叠加现象是影响大规模阵列的可实现带宽的重要因素&#xff0c;除了包含阵列的独立功分器和反射器的带…

【Hot100】LeetCode—295. 数据流的中位数

目录 1- 思路题目识别堆实现 2- 实现⭐4. 寻找两个正序数组的中位数——题解思路 3- ACM 实现 原题链接&#xff1a;295. 数据流的中位数 1- 思路 题目识别 识别1 &#xff1a;实现一个数据结构&#xff0c;求中位数 堆实现 思路 利用优先队列&#xff0c;小根堆放较小的元…

专科医院内外网数据摆渡,什么方法最“对症下药”?

专科医院是专门从事某一个或少数几个医学分科的医院。这些医院在特定的医学领域内具有较高的专业性和技术水平&#xff0c;通常致力于某一类疾病的预防、诊断和治疗。如传染病医院、口腔医院、肿瘤医院等。 根据相关法律法规和行业标准&#xff0c;涉及医疗数据的网络必须采取必…

影刀RPA实战:网页爬虫之携程酒店数据

1.实战目标 大家对于携程并不陌生&#xff0c;我们出行定机票&#xff0c;住酒店&#xff0c;去旅游胜地游玩&#xff0c;都离不开这样一个综合性的网站为我们提供信息&#xff0c;同时&#xff0c;如果你也是做旅游的公司&#xff0c;那携程就是一个业界竞争对手&#xff0c;…

Zookeeper 3.8.4 安装和参数解析

安装 zookeeper 之前必须先安装 JDK&#xff0c;有关Linux环境JDK可以参考我以前写的博文 1、关于Linux服务器配置java环境遇到的问题 2、Linux环境安装openJDK 3、Centos7.3云服务器上安装Nginx、MySQL、JDK、Tomcat环境 文章目录 1. zookeeper 安装2. 参数解析 1. zookeeper …

计算机视觉—3d点云数据基础

点云数据 3d点云数据由来 3d点云 3D Point Cloud是一种用于表示三维空间中对象或场景的数据结构。在最基础的形式中&#xff0c;它是一个包含多个三维坐标点&#xff08;X, Y, Z&#xff09;的集合。这些点是通过对实际物体或场景表面进行离散采样而获得的&#xff0c;因此&a…

使用高版本nodej报错:node: /lib64/libm.so.6: version `GLIBC_2.27‘ not found

如果要更新GLIBC_2.27会很繁琐&#xff0c;且耗时较长&#xff0c;所以建议下载带glibc的版本的nodejs 解决方案&#xff1a;下载带glibc的版本安装&#xff0c;如果是使用nvm则解压到对应的版本控制路径 我使用的版本是v20.16.0&#xff1a;Index of /download/release/v20.1…

基于GEE的Landsat 7ETM+条带填补

项目简介 该项目使用Google Earth Engine (GEE)平台&#xff0c;对Landsat 5和Landsat 7卫星影像进行预处理与影像填补操作。主要功能包括影像的选取、波段处理、缺失影像的填补以及最终影像的导出。代码中的核心功能是通过空间回归方法对Landsat 7和Landsat 5影像进行时序配准…

Oracle 19c异常恢复—ORA-01209/ORA-65088---惜分飞

由于raid卡bug故障,导致文件系统异常,从而使得数据库无法正常启动,客户找到我之前已经让多人分析,均未恢复成功,查看alert日志,发现他们恢复的时候尝试resetlogs库,然后报ORA-600 kcbzib_kcrsds_1错误 2024-09-15T17:07:32.55321508:00 alter database open resetlogs 2024-09-…

YOLOv9改进策略【损失函数篇】| Shape-IoU:考虑边界框形状和尺度的更精确度量

一、本文介绍 本文记录的是改进YOLOv9的损失函数&#xff0c;将其替换成Shape-IoU。现有边界框回归方法通常考虑GT&#xff08;Ground Truth&#xff09;框与预测框之间的几何关系&#xff0c;通过边界框的相对位置和形状计算损失&#xff0c;但忽略了边界框本身的形状和尺度等…