当前位置: 首页 > news >正文

Docker搭建MySQL

Docker搭建MySQL

准备工作

  1. 先准备配置目录和持久化目录,举个栗子:mkdir -p /opt/module/mysql/{conf,data,log}
  2. 准备配置文件*.cnf,放到/opt/module/mysql/conf目录下。
  3. 当然不准备也没事,容器中有个默认配置:/etc/mysql/conf.d/my.cnf

拉取官方MySQL镜像

# 拉取 mysql8.0.33
docker pull mysql:8.0.33
docker pull mysql:5.7 # 拉取最新版mysql镜像
docker pull mysql

运行镜像【安装MySQL8.0】

docker run -d -p 3306:3306 --name mysql \
-v /opt/module/mysql/conf:/etc/mysql/conf.d \
-v /opt/module/mysql/data:/var/lib/mysql \
-v /opt/module/mysql/log:/var/log/mysql \
-e MYSQL_ROOT_PASSWORD=root mysql:8.0.33

-d 表示后台启动;
-p 3306:3306 表示端口映射,前面是主机端口,后面是代表容器端口;
--name mysql 表示容器名称;


-v /opt/module/mysql/conf:/etc/mysql/conf.d 挂载配置文件,前面是主机目录,后面是容器内目录。
特别说明:

  • MySQL默认配置文件为/etc/mysql/my.cnf,该文件里面最后有一行!includedir /etc/mysql/conf.d/,表示包含该文件夹下面的*.cnf配置,故自定义配置放到该目录下即可;
  • 比较常用的方式是-v /opt/module/mysql/conf/my.cnf:/etc/mysql/my.cnf,直接挂载/opt/module/mysql/conf/my.cnf替换掉/etc/mysql/my.cnf文件;
  • 两种方式都行,个人更喜欢前一种;

-v /opt/module/mysql/data:/var/lib/mysql 挂载数据文件,前面是主机目录,后面是容器内目录;

-v /opt/module/mysql/log:/var/log/mysql 挂载数据文件,前面是主机目录,后面是容器内目录;

-e MYSQL_ROOT_PASSWORD=root 表示增加环境变量,等号前面是变量名称,这里是设置密码为root;
mysql:8.0.31 表示镜像名称和tag;

设置mysql开机自启

#查看是否运行
docker ps -a
#设置mysql开机自启
sudo docker update mysql --restart=always

查看启动日志

#docker logs [服务id/服务名]
docker logs mysqldocker logs -f -t --tail 20 mysql

进入MySQL容器内部

docker ps -a     # 查看正在运行的容器,并得到 容器id# 进入mysql容器内部
docker exec -it [容器id] /bin/bash  # 中间那个是容器id 就是 CONTAINER_ID
#  -it 表示进入
docker exec -it mysql bash
docker exec -it mysql /bin/bash
# 使用 命令别名 开启 ll命令
cat <<EOF >> /etc/profile
alias ll='ls -l --color=tty'
alias grep='grep --color=auto'
EOF

检查

# 执行如下命令可以登录MySQL
docker exec -it mysql mysql -uroot -p  #回车后输入密码进入MySQL
# 执行相关MySQL语句查询
show databases; #回车

配置my.cnf

cat <<EOF >> /opt/module/mysql/conf/my.cnf
[client]
default_character_set=utf8
[mysqld]
collation_server = utf8_general_ci
character_set_server = utf8
EOF

查看docker下的ip地址

docker inspect [container_id 容器id]docker inspect [container_id 容器id] | grep ip addressdocker inspect --format='{{.NetworkSettings.IPAddress}}' [container_id 容器id]

查看防火墙【开放端口】

# 查询端口是否开放
firewall-cmd --query-port=3306/tcp# 开放3306端口
firewall-cmd --permanent --add-port=3306/tcp# 移除端口
firewall-cmd --permanent --remove-port=3306/tcp# 重启防火墙(修改配置后要重启防火墙)
firewall-cmd --reload# 查看已经开发那些端口
firewall-cmd --list-ports
firewall-cmd --zone=public --list-ports

卸载

#停止mysql服务(也可以停止其他)
#docker stop [容器id/容器名]
docker stop mysql#删除mysql服务(也可以删除其他)
#docker rm [服务id/服务名]
docker rm mysql#删除mysql镜像
#docker rmi [镜像id/镜像名]
docker rmi mysql

常见错误

mysql Tablespace exists解决
1813 - Tablespace ‘xx.xx`’ exists.

执行如下命令:

mysql> show global variables like "%datadir%";
+---------------+-----------------+
| Variable_name | Value           |
+---------------+-----------------+
| datadir       | /var/lib/mysql/ |
+---------------+-----------------+
1 row in set (0.03 sec)
去这个目录(/var/lib/mysql/ )下面找 表名.idb 文件,
删除该.ibd文件文件后,再重新创建表就没有问题了

补充MySQL权限操作

MySQL中:

  1. 创建hadoop用户,密码为:root
  2. 给hadoop用户,分配可以操作AAA、BBB数据库权限
  3. 开启hadoop用户的远程访问权限

在MySQL中,你可以通过以下步骤来完成上述任务:

  1. 创建用户并设置密码
CREATE USER 'hadoop'@'localhost' IDENTIFIED BY 'root';
FLUSH PRIVILEGES;

这将在本地创建一个名为’hadoop’的用户,并设置密码为’root’。如果要允许从任何主机远程访问,可以使用以下命令:

CREATE USER 'hadoop'@'%' IDENTIFIED BY 'root';
FLUSH PRIVILEGES;
  1. 给用户分配数据库权限【指定数据库】
GRANT ALL PRIVILEGES ON AAA.* TO 'hadoop'@'localhost';
GRANT ALL PRIVILEGES ON BBB.* TO 'hadoop'@'localhost';
FLUSH PRIVILEGES;

这将授予用户’hadoop’在本地对数据库’AAA’和’BBB’的全部权限。如果要允许从任何主机远程访问,可以使用以下命令:

GRANT ALL PRIVILEGES ON AAA.* TO 'hadoop'@'%';
GRANT ALL PRIVILEGES ON BBB.* TO 'hadoop'@'%';
FLUSH PRIVILEGES;
  1. 给用户分配数据库权限【全部数据库】

    如果你想给hadoop用户分配可以操作所有数据库的权限,你可以使用通配符*。以下是在MySQL中授予用户对所有数据库的全部权限的方法:

    -- 在localhost上授予权限
    GRANT ALL PRIVILEGES ON *.* TO 'hadoop'@'localhost' WITH GRANT OPTION;-- 允许远程访问时,使用以下语句
    GRANT ALL PRIVILEGES ON *.* TO 'hadoop'@'%' WITH GRANT OPTION;
    

    上述语句中,*.*表示所有数据库的所有表。WITH GRANT OPTION表示hadoop用户将拥有授予权限给其他用户的权限。

    请注意,给予用户对所有数据库的全部权限可能存在安全风险,因此在生产环境中应该仔细考虑授权策略,只授予用户实际需要的最小权限。

  2. 开启远程访问权限

默认情况下,MySQL用户只能从本地连接。为了允许远程连接,你需要修改MySQL配置文件,并重新启动MySQL服务。

打开MySQL配置文件,一般在/etc/mysql/my.cnf/etc/my.cnf。找到并注释掉或修改如下行:

#bind-address = 127.0.0.1

将上述行注释掉或者将127.0.0.1改成服务器的IP地址。然后保存文件。

重启MySQL服务:

sudo service mysql restart

请注意,为了安全考虑,最好只允许特定IP地址范围访问MySQL。如果是在生产环境中使用,还应该考虑使用SSH隧道或SSL来加密连接。

补充内容Docker安装MySQL5.7

准备工作
  1. 先准备配置目录和持久化目录,举个栗子:mkdir -p /opt/module/mysql/{conf,data,log}
  2. 准备配置文件*.cnf,放到/opt/module/mysql/conf目录下。
  3. 当然不准备也没事,容器中有个默认配置:/etc/mysql/conf.d/my.cnf
精简版

安装MySQL 5.7 可以通过 Docker 进行,以下是通过 Docker 安装 MySQL 5.7 的基本步骤:

  1. 安装 Docker:
    如果你还没有安装 Docker,请先安装 Docker。你可以在 Docker 官网 上找到适合你操作系统的安装说明。

  2. 拉取 MySQL 5.7 镜像:
    打开终端(命令行界面)并运行以下命令拉取 MySQL 5.7 镜像:

    docker pull mysql:5.7
    
  3. 运行 MySQL 容器:
    运行以下命令创建并启动一个 MySQL 容器:

    docker run -d --name=mysql-5.7 -p 3306:3306 -e MYSQL_ROOT_PASSWORD=your_password mysql:5.7
    

    这里,将 your_password 替换为你想要设置的 MySQL root 用户的密码。

    • -d 表示在后台运行容器。
    • --name=mysql-5.7 给容器起一个名字,这里是 mysql-5.7,你可以根据需要更改。
    • -p 3306:3306 将容器的 MySQL 服务端口映射到主机的 3306 端口。
    • -e MYSQL_ROOT_PASSWORD=your_password 设置 MySQL root 用户的密码。
  4. 进入 MySQL 容器:
    如果你想在容器内执行一些 MySQL 命令,可以使用以下命令进入容器:

    docker exec -it mysql-5.7 mysql -uroot -p
    

    输入你在第 3 步中设置的密码,然后你就可以在容器内使用 MySQL 了。

现在,你已经成功在 Docker 中安装并运行了 MySQL 5.7。请注意,这是一个简单的配置,生产环境中可能需要更多的配置选项,如数据卷、持久化存储等。

🍀进阶版
docker run -d -p 3306:3306 --name mysql-5.7 \
-v /opt/module/mysql/conf:/etc/mysql/conf.d \
-v /opt/module/mysql/data:/var/lib/mysql \
-v /opt/module/mysql/log:/var/log/mysql \
--restart=always --privileged=true \
-e MYSQL_ROOT_PASSWORD=root mysql:5.7
  • -d: 表示以后台模式运行容器。
  • -p 3306:3306: 将主机的 3306 端口映射到容器的 3306 端口。
  • --name mysql-5.7: 为容器指定一个名字(mysql-5.7)。
  • -v /opt/module/mysql/conf:/etc/mysql/conf.d:将主机上的 MySQL 配置文件目录 /opt/module/mysql/conf 映射到容器内的 /etc/mysql/conf.d 目录,以便你可以自定义 MySQL 的配置。【容器中MySQL配置文件:/etc/mysql/conf.d/my.cnf
  • -v /opt/module/mysql/data:/var/lib/mysql: 将主机上的 MySQL 数据目录映射到容器内的相应位置。
  • -v /opt/module/mysql/log:/var/log/mysql: 将主机上的 MySQL 日志目录映射到容器内的相应位置。
  • --restart=always: 表示容器在退出时总是重新启动。
  • --privileged=true: 这个选项赋予容器所有的 Linux 的 capabilities,并打开所有的 Linux Security Modules。在一般情况下,最好仅提供容器所需的最小权限。如果没有特殊需求,建议不使用这个选项。

相关文章:

Docker搭建MySQL

Docker搭建MySQL 准备工作 先准备配置目录和持久化目录&#xff0c;举个栗子&#xff1a;mkdir -p /opt/module/mysql/{conf,data,log}准备配置文件*.cnf,放到/opt/module/mysql/conf目录下。当然不准备也没事&#xff0c;容器中有个默认配置&#xff1a;/etc/mysql/conf.d/m…...

#C01L11P02. C01.L11.while循环.while循环和for循环的区别

唉&#xff0c;你们善良的王又来给你们发文章了&#xff01;&#xff01;&#xff01; for循环一般应用于循环次数已知的情况&#xff1b; while循环一般应用于循环次数未知的情况&#xff1b; 在一般情况下&#xff0c;这两者是可以相互转化的。 举一个简单较适合用for循环…...

利用deepspeed在Trainer下面微调大模型

当模型参数越来越大的情况下&#xff0c;如果我们的GPU内存比较小&#xff0c;那么就没办法直接进行全参数微调&#xff0c;此时我们可以借助deepspeed来进行微调。 1、deepspeed的配置文件&#xff1a;deepspeed.json {"train_batch_size": 4,"train_micro_b…...

【spring】参数校验Validation

前言 在实际开发中&#xff0c;我们无法保证客户端传来的请求都是合法的。比如一些要求必传的参数没有传递&#xff0c;传来的参数长度不符合要求等&#xff0c;这种时候如果放任不管&#xff0c;继续执行后续业务逻辑&#xff0c;很有可能就会出现意想不到的bug。 有人可能会…...

基于PyQt5的UI界面开发——图像与视频的加载与显示

介绍 这里我们的主要目标是实现一个基于PyQt5和OpenCV的图像浏览和视频播放应用。用户可以选择本地的图像或视频文件夹&#xff0c;进行图像自动播放和图像切换以及视频播放和调用摄像头等操作&#xff0c;并且支持图像保存功能。项目的核心设计包括文件路径选择、图像或视频的…...

[python SQLAlchemy数据库操作入门]-16.CTE:简化你的复杂查询

哈喽,大家好,我是木头左! 在SQL的世界里,Common Table Expressions(公共表表达式),简称CTE,是一种强大的工具,它允许用户在单个查询中定义临时的结果集。这些结果集可以在整个查询中被多次引用,就像它们是数据库中的物理表一样。CTE不仅提供了一种组织和简化复杂查询…...

多分类的损失函数

在多分类任务中,常用的损失函数能够衡量模型输出的类别分布与目标类别之间的差异,帮助模型学习更准确的分类能力。以下是多分类任务中常用的损失函数: 1. 交叉熵损失(Cross-Entropy Loss) 公式: CrossEntropyLoss = − 1 N ∑ i =...

在WSL的系统中配置免密和GitHub传输数据(SSH)

在 WSL&#xff08;Windows Subsystem for Linux&#xff09;系统中配置免密与 GitHub 传输数据&#xff0c;主要包括设置 SSH 密钥对、将公钥添加到 GitHub 账户以及确保可以通过 WSL 正常使用这些密钥。以下是详细的步骤&#xff1a; 1. 检查现有 SSH 密钥 首先&#xff0c…...

Python中元组(tuple)内置的数据类型

在Python中&#xff0c;元组&#xff08;tuple&#xff09;是一种内置的数据类型&#xff0c;用于存储不可变的有序元素集合。元组在很多方面与列表&#xff08;list&#xff09;相似&#xff0c;但它们之间存在一些关键的区别。以下是关于Python元组的详细解释&#xff1a; 定…...

chrome缓存机制以及验证缓存机制

一、Chrome 缓存机制 浏览器缓存机制旨在提高网页加载速度、减少服务器负载和节约带宽。Chrome 的缓存主要包括以下几种类型&#xff1a; 1. 强缓存 (Strong Cache) 无需向服务器发送请求即可使用缓存的资源。由 HTTP 响应头控制&#xff0c;包括&#xff1a; Expires&…...

医药进出口交易|基于SSM+vue的医药进出口交易系统的设计与实现(源码+数据库+文档)

医药进出口交易系统 目录 基于SSM&#xff0b;vue的医药进出口交易系统的设计与实现 一、前言 二、系统设计 三、系统功能设计 5.1系统登录 5.2管理员功能模块 5.3仓储部门功能模块 5.4业务部门功能模块 5.5供应部门功能模块 5.6财务部功能模块 5.7客户功能模块 …...

爱快 IK-Q6000 WiFi6无线路由器 简单开箱评测和拆解

爱快&#xff08;iKuai&#xff09; IK-Q6000 WiFi6无线路由器 简单开箱评测和拆解 因为用的爱快软路由&#xff0c;所以就想着将AP全换成爱快的&#xff0c;方便管理&#xff0c;目前买了多款爱快的无线路由器当AP&#xff08;IK-Q6000、IK-W35、IK-Q3600&#xff09;&#x…...

时间敏感网络中全面分析与调度的模型驱动方法

论文&#xff1a;A Model-Driven Approach for the Comprehensive Analysis and Scheduling in Time-Sensitive Networks》 背景与动机 TSN 的发展与应用领域&#xff1a;自 2012 年起&#xff0c;IEEE 802.1 TSN 任务组致力于开发通信标准&#xff0c;增强 IEEE 802 网络&…...

统计颜色Count Color(POJ2777)题解

有一个长度为L厘米板&#xff0c;L是一个正整数&#xff0c;所以我们可以把它均匀地划分成L个部分&#xff0c;分别从左到右编号为1&#xff0c;2……L&#xff0c;每一个部分长度都为1厘米。现在我们必须给每个部分涂色&#xff0c;一个部分一种颜色&#xff0c;要求完成以下两…...

MySQL数据的增删改查(一)

目录 新增&#xff08;create&#xff09; 插入单条记录 插入多条记录 查询&#xff08;retrieve&#xff09; 查询所有列 查询特定列 查询字段为表达式 别名 去重 排序 按单列排序 按多列排序 使用表达式或别名排序 排序NULL值 条件查询 比较运算符 逻辑运算…...

国产文本编辑器EverEdit - 如何给小众语言开发大纲分析脚本

1 开发参考&#xff1a;小众语言如何开发大纲分析脚本 1.1 应用场景 在使用IDE进行代码开发时&#xff0c;代码中的变量、结构体、函数等&#xff0c;在大纲视图中都会显示出来&#xff0c;用户可以快速的了解当前文档的结构&#xff0c;以及快速跳转到函数、变量的声明位置。…...

【数据结构】线性数据结构——数组

1. 定义 数组是一种线性数据结构&#xff0c;由一组相同类型的元素组成&#xff0c;这些元素使用连续的内存空间存储。数组通过索引&#xff08;下标&#xff09;访问&#xff0c;每个元素的索引是固定的&#xff0c;从零开始递增。 2. 特点 顺序存储&#xff1a; 元素在内存…...

QT---------GUI程序设计基础

代码UI化设计&#xff08;QT&#xff09; 实例功能概述 假设我们要创建一个简单的计算器应用程序。该应用程序具有以下功能&#xff1a; 包含数字按钮&#xff08;0-9&#xff09;、操作符按钮&#xff08;、-、*、/&#xff09;、等于按钮&#xff08;&#xff09;和清除按…...

2、Bert论文笔记

Bert论文 1、解决的问题2、预训练微调2.1预训练微调概念2.2深度双向2.3基于特征和微调&#xff08;预训练下游策略&#xff09; 3、模型架构4、输入/输出1.输入&#xff1a;2.输出&#xff1a;3.Learned Embeddings(学习嵌入)1. **Token Embedding**2. **Position Embedding**3…...

Linux之ARM(MX6U)裸机篇----7.蜂鸣器实验

一&#xff0c;蜂鸣器模块 封装步骤&#xff1a; ①初始化SNVS_TAMPER这IO复用为GPIO ②设置SNVS_TAMPPER这个IO的电气属性 ③初始化GPIO ④控制GPIO输出高低电平 bsp_beep.c: #include "bsp_beep.h" #include "cc.h"/* BEEP初始化 */ void beep_init…...

eNSP-Cloud(实现本地电脑与eNSP内设备之间通信)

说明&#xff1a; 想象一下&#xff0c;你正在用eNSP搭建一个虚拟的网络世界&#xff0c;里面有虚拟的路由器、交换机、电脑&#xff08;PC&#xff09;等等。这些设备都在你的电脑里面“运行”&#xff0c;它们之间可以互相通信&#xff0c;就像一个封闭的小王国。 但是&#…...

iOS 26 携众系统重磅更新,但“苹果智能”仍与国行无缘

美国西海岸的夏天&#xff0c;再次被苹果点燃。一年一度的全球开发者大会 WWDC25 如期而至&#xff0c;这不仅是开发者的盛宴&#xff0c;更是全球数亿苹果用户翘首以盼的科技春晚。今年&#xff0c;苹果依旧为我们带来了全家桶式的系统更新&#xff0c;包括 iOS 26、iPadOS 26…...

三维GIS开发cesium智慧地铁教程(5)Cesium相机控制

一、环境搭建 <script src"../cesium1.99/Build/Cesium/Cesium.js"></script> <link rel"stylesheet" href"../cesium1.99/Build/Cesium/Widgets/widgets.css"> 关键配置点&#xff1a; 路径验证&#xff1a;确保相对路径.…...

从深圳崛起的“机器之眼”:赴港乐动机器人的万亿赛道赶考路

进入2025年以来&#xff0c;尽管围绕人形机器人、具身智能等机器人赛道的质疑声不断&#xff0c;但全球市场热度依然高涨&#xff0c;入局者持续增加。 以国内市场为例&#xff0c;天眼查专业版数据显示&#xff0c;截至5月底&#xff0c;我国现存在业、存续状态的机器人相关企…...

ESP32读取DHT11温湿度数据

芯片&#xff1a;ESP32 环境&#xff1a;Arduino 一、安装DHT11传感器库 红框的库&#xff0c;别安装错了 二、代码 注意&#xff0c;DATA口要连接在D15上 #include "DHT.h" // 包含DHT库#define DHTPIN 15 // 定义DHT11数据引脚连接到ESP32的GPIO15 #define D…...

剑指offer20_链表中环的入口节点

链表中环的入口节点 给定一个链表&#xff0c;若其中包含环&#xff0c;则输出环的入口节点。 若其中不包含环&#xff0c;则输出null。 数据范围 节点 val 值取值范围 [ 1 , 1000 ] [1,1000] [1,1000]。 节点 val 值各不相同。 链表长度 [ 0 , 500 ] [0,500] [0,500]。 …...

【服务器压力测试】本地PC电脑作为服务器运行时出现卡顿和资源紧张(Windows/Linux)

要让本地PC电脑作为服务器运行时出现卡顿和资源紧张的情况&#xff0c;可以通过以下几种方式模拟或触发&#xff1a; 1. 增加CPU负载 运行大量计算密集型任务&#xff0c;例如&#xff1a; 使用多线程循环执行复杂计算&#xff08;如数学运算、加密解密等&#xff09;。运行图…...

Python如何给视频添加音频和字幕

在Python中&#xff0c;给视频添加音频和字幕可以使用电影文件处理库MoviePy和字幕处理库Subtitles。下面将详细介绍如何使用这些库来实现视频的音频和字幕添加&#xff0c;包括必要的代码示例和详细解释。 环境准备 在开始之前&#xff0c;需要安装以下Python库&#xff1a;…...

select、poll、epoll 与 Reactor 模式

在高并发网络编程领域&#xff0c;高效处理大量连接和 I/O 事件是系统性能的关键。select、poll、epoll 作为 I/O 多路复用技术的代表&#xff0c;以及基于它们实现的 Reactor 模式&#xff0c;为开发者提供了强大的工具。本文将深入探讨这些技术的底层原理、优缺点。​ 一、I…...

python报错No module named ‘tensorflow.keras‘

是由于不同版本的tensorflow下的keras所在的路径不同&#xff0c;结合所安装的tensorflow的目录结构修改from语句即可。 原语句&#xff1a; from tensorflow.keras.layers import Conv1D, MaxPooling1D, LSTM, Dense 修改后&#xff1a; from tensorflow.python.keras.lay…...