Docker安装Mysql数据库

不同的应用程序可能依赖于不同版本的 MySQL 或具有不同的配置需求。通过 Docker,每个 MySQL 实例都可以运行在独立的容器中,与宿主机以及其他容器的环境相互隔离。这有效避免了因不同应用对 MySQL 版本、依赖库等方面的差异而导致的冲突。例如,应用 A 需要 MySQL 5.7 版本,而应用 B 需要 MySQL 8.0 版本,使用 Docker 可以轻松创建两个不同版本的 MySQL 容器,满足各自的需求,且不会相互干扰。

在 Docker 中,可以根据应用的实际需求为每个 MySQL 容器分配特定的 CPU、内存等资源。这样能确保关键应用的数据库获得足够的资源,保证性能稳定,同时也能避免资源的过度分配或浪费。

使用 Docker 安装 MySQL 只需一条简单的命令即可从 Docker Hub 拉取官方镜像并创建容器,相比传统的在服务器上手动安装 MySQL 及其依赖,大大节省了安装和配置的时间。

Docker 容器具有高度的可移植性。一旦在一个环境中创建并配置好 MySQL 容器,就可以将该容器及其包含的数据和配置轻松迁移到其他支持 Docker 的环境中,无论是在本地开发环境、测试环境还是生产环境之间迁移,都能快速实现,无需在新环境中重新进行复杂的安装和配置过程

在开发和测试过程中,可能需要频繁切换 MySQL 版本以测试应用在不同版本下的兼容性。通过 Docker,只需拉取相应版本的 MySQL 镜像,创建新的容器即可实现版本切换,而无需在宿主机上进行繁琐的版本卸载和安装操作。

1.拉取MySQL镜像

1.1 拉取最新版本

如果不标注版本,就是拉取最新版本

docker pull mysql:latest
# 等同于上一句命令docker pull mysql

1.2 拉取指定版本

docker pull mysql:5.7

 我们使用mysql5.7作为示例操作

[root@192 /]# docker pull mysql:5.7
5.7: Pulling from library/mysql
20e4dcae4c69: Pull complete 
1c56c3d4ce74: Pull complete 
e9f03a1c24ce: Pull complete 
68c3898c2015: Pull complete 
6b95a940e7b6: Pull complete 
90986bb8de6e: Pull complete 
ae71319cb779: Pull complete 
ffc89e9dfd88: Pull complete 
43d05e938198: Pull complete 
064b2d298fba: Pull complete 
df9a4d85569b: Pull complete 
Digest: sha256:4bc6bc963e6d8443453676cae56536f4b8156d78bae03c0145cbe47c2aad73bb
Status: Downloaded newer image for mysql:5.7
docker.io/library/mysql:5.7
[root@192 /]# 

查看镜像,mysql5.7已经存在 

2.运行MySQL容器

2.1 一般操作

命令:

docker run -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7 
[root@192 /]# docker ps -a
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
[root@192 /]# docker run -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7 
2e1854c7aa11abfce0a325672e3196e08125b6024d19155cb44cfac61c8e954a
[root@192 /]# docker ps -a
CONTAINER ID   IMAGE       COMMAND                   CREATED         STATUS         PORTS                                                  NAMES
2e1854c7aa11   mysql:5.7   "docker-entrypoint.s…"   3 seconds ago   Up 2 seconds   0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp   stupefied_wiles
[root@192 /]# 

进入容器并打开数据库

docker exec -it 容器ID /bin/bash
[root@192 /]# docker exec -it 2e1854c7aa11 /bin/bash
bash-4.2# mysql -uroot -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.7.44 MySQL Community Server (GPL)Copyright (c) 2000, 2023, Oracle and/or its affiliates.Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.mysql>

测试数据库:

创建数据库:

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
4 rows in set (0.00 sec)mysql> create database shop;
Query OK, 1 row affected (0.00 sec)mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| shop               |
| sys                |
+--------------------+
5 rows in set (0.00 sec)mysql> 

创建数据表:

mysql> use shop;
Database changed
mysql> create table users(id int,name varchar(20));
Query OK, 0 rows affected (0.00 sec)mysql> show tables;
+----------------+
| Tables_in_shop |
+----------------+
| users          |
+----------------+
1 row in set (0.00 sec)mysql> 

数据操作 - 插入数据

mysql> insert into users values(1,"tom");
Query OK, 1 row affected (0.01 sec)

数据操作 - 查询数据

mysql> select * from users;
+------+------+
| id   | name |
+------+------+
|    1 | tom  |
+------+------+
1 row in set (0.00 sec)

数据操作 - 更新数据

mysql> update users set name = "tom1" where id= 1;
Query OK, 1 row affected (0.01 sec)
Rows matched: 1  Changed: 1  Warnings: 0mysql> select * from users;
+------+------+
| id   | name |
+------+------+
|    1 | tom1 |
+------+------+
1 row in set (0.00 sec)

数据操作 - 删除数据

mysql> delete from user where id = 1-> ;
ERROR 1146 (42S02): Table 'shop.user' doesn't exist
mysql> delete from users where id = 1;
Query OK, 1 row affected (0.00 sec)mysql> select * from users;
Empty set (0.00 sec)

这种方法创建的数据库,一旦容器被误操作删除,那么数据就被删除不能恢复了。

2.2 数据卷映射操作

命令:

docker run -d -p 3306:3306 
--privileged=true 
-v /home/mysql/log:/var/log/mysql 
-v /home/mysql/data:/var/lib/mysql 
-v /home/mysql/conf:/etc/mysql/conf.d 
-eMYSQL_ROOT_PASSWORD=123456  
--name mysql2 mysql:5.7
[root@192 /]# docker run -d -p 3306:3306  --privileged=true  -v /home/mysql/log:/var/log/mysql  -v /home/mysql/data:/var/lib/mysql  -v /home/mysql/conf:/etc/mysql/conf.d  -eMYSQL_ROOT_PASSWORD=123456  --name mysql2 mysql:5.7
ed45beb0dafd8cfc2e763707ad766cc4bae15aaaf0b103c4a81391b0d0d70639
[root@192 /]# docker ps
CONTAINER ID   IMAGE       COMMAND                   CREATED         STATUS         PORTS                                                  NAMES
ed45beb0dafd   mysql:5.7   "docker-entrypoint.s…"   6 seconds ago   Up 4 seconds   0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp   mysql2
[root@192 /]# cd /home
[root@192 home]# ls
mysql
[root@192 home]# cd mysql
[root@192 mysql]# ls
conf  data  log
[root@192 mysql]# 

新建my.cnf,通过容器卷同步给mysql容器实例,我们修改下默认的字符集

vi my.cnf[client]
default_character_set=utf8
[mysqld]
collation_server = utf8_general_ci
character_set_server = utf8

重新启动mysql容器实例

[root@192 conf]# docker restart mysql2
mysql2
[root@192 conf]#

进入数据库容器

docker exec -it mysql2 bash
[root@192 /]# docker exec -it mysql2 bash
bash-4.2# mysql -uroot -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.7.44 MySQL Community Server (GPL)Copyright (c) 2000, 2023, Oracle and/or its affiliates.Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.mysql> 

测试数据库:

创建数据库:

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
4 rows in set (0.00 sec)mysql> create database advs;
Query OK, 1 row affected (0.00 sec)mysql>

创建数据表:

mysql> use advs;
Database changed
mysql> show tables;
Empty set (0.00 sec)mysql> create table adv(id int,title varchar(100));
Query OK, 0 rows affected (0.01 sec)mysql> show tables;
+----------------+
| Tables_in_advs |
+----------------+
| adv            |
+----------------+
1 row in set (0.00 sec)mysql>

插入数据:

mysql> insert into adv values(1,"tom is tom");
Query OK, 1 row affected (0.01 sec)mysql>

查询数据:

mysql> select * from adv;
+------+------------+
| id   | title      |
+------+------------+
|    1 | tom is tom |
+------+------------+
1 row in set (0.00 sec)mysql> 

更新数据:

mysql> update adv set title = "tom is not tom" where id =1;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0mysql> select * from adv;
+------+----------------+
| id   | title          |
+------+----------------+
|    1 | tom is not tom |
+------+----------------+
1 row in set (0.00 sec)mysql> 

我们看下宿主机中是否有映射的数据:

宿主机中已经有我们创建的数据库和数据表了。

[root@192 mysql]# ls
conf  data  log
[root@192 mysql]# cd data
[root@192 data]# ls
advs      ca-key.pem  client-cert.pem  ib_buffer_pool  ib_logfile0  ibtmp1  mysql.sock          private_key.pem  server-cert.pem  sys
auto.cnf  ca.pem      client-key.pem   ibdata1         ib_logfile1  mysql   performance_schema  public_key.pem   server-key.pem
[root@192 data]# cd advs
[root@192 advs]# ls
adv.frm  adv.ibd  db.opt
[root@192 advs]# 

删除数据:

mysql> delete from adv where id = 1;
Query OK, 1 row affected (0.00 sec)mysql> select * from adv;
Empty set (0.00 sec)mysql> 

数据库容器数据被映射到宿主机中,相当于备份。即使容器被删除,数据也会存在。

3.MySQL容器状态

docker ps 查询

docker ps --filter "name=mysql2"

容器日志

docker logs mysql2

容器资源情况

docker stats mysql2

检查容器inspect

docker inspect  mysql2

4. 进入MySQL容器

docker exec -it 容器ID /bin/bash
[root@192 /]# docker exec -it ed45beb0dafd /bin/bash
bash-4.2# ls
bin  boot  dev	docker-entrypoint-initdb.d  entrypoint.sh  etc	home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
bash-4.2# cd var
bash-4.2# ls
adm  cache  db	empty  games  gopher  kerberos	lib  local  lock  log  mail  nis  opt  preserve  run  spool  tmp  yp
bash-4.2# cd lib
bash-4.2# ls
alternatives  games  misc  mysql  mysql-files  mysql-keyring  rpm  rpm-state  supportinfo  yum
bash-4.2# cd mysql
bash-4.2# ls
advs	  ca-key.pem  client-cert.pem  ib_buffer_pool  ib_logfile1  ibtmp1  mysql.sock		private_key.pem  server-cert.pem  sys
auto.cnf  ca.pem      client-key.pem   ib_logfile0     ibdata1	    mysql   performance_schema	public_key.pem	 server-key.pem
bash-4.2# 

使用这个命令,可以进入容器内部,管理mysql设置与数据,但是一般情况下,我们都是通过映射数据卷来管理。

5. 管理MySQL数据库

我们使用数据库管理工具Navicat管理MySQL数据库

链接成功后,我们看到之前创建的数据库与数据表

创建数据表

插入数据:

查询数据:

更新数据:

删除数据:

6.最后

感谢大家,请大家多多支持!

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

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

相关文章

盛元广通数字化实验动物中心LIMS综合管理系统

盛元广通数字化实验动物中心LIMS综合管理系统通过集成各种功能,从实验申请、伦理审批、笼位预约、动物采购到开展动物实验、数据归档等全流程智能化管理,保证了实验信息随时可查,管理可视化、流程简单化。实验动物中心采用电脑端、APP和微信小…

LangSplat和3D language fields简略介绍

LangSplat: 3D Language Gaussian Splatting 相关技术拆分解释: 3dgs:伟大无需多言SAM:The Segment Anything Model,是图像分割领域的foundational model,已经用在很多视觉任务上(如图像修复、物体追踪、图…

Linux目录

一、虚拟机环境配置 1.安装虚拟机 安装步骤 新建虚拟机-->典型安装-->选择稍后安装操作系统-->选择系统类型和版本(这里安装的是CentOS7 64位)-->选择虚拟机文件路径(建议每台虚拟机单独存放并且路径不要有中文)--&…

商淘云连锁管理系统

商淘云连锁管理系统助力连锁企业实现“人货账”全方位数字化管理,它依托连锁品牌进销存管理实现门店订货、线下收银、线上商城、会员营销等一体化管理。 门店订货补货支持连锁直营、加盟 不同门店不同进货价、不同门店不同商品、不同门店在线或者账期支付、门店PC或…

Go语言Gin框架的常规配置和查询数据返回json示例

文章目录 路由文件分组查询数据库并返回jsonservice层controller路由运行效果 启动多个服务 在 上一篇文章《使用Go语言的gorm框架查询数据库并分页导出到Excel实例》 中主要给大家分享了较多数据的时候如何使用go分页导出多个Excel文件并合并的实现方案,这一篇文章…

跨界创新|使用自定义YOLOv11和Ollama(Llama 3)增强OCR文本识别

《博主简介》 小伙伴们好,我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。 ✌更多学习资源,可关注公-仲-hao:【阿旭算法与机器学习】,共同学习交流~ 👍感谢小伙伴们点赞、关注! 《------往期经典推…

Electron-(三)网页报错处理与请求监听

在前端开发中,Electron 是一个强大的框架,它允许我们使用 Web 技术构建跨平台的桌面应用程序。在开发过程中,及时处理网页报错和监听请求是非常重要的环节。本文将详细介绍 Electron 中网页报错的日志记录、webContents 的监听事件以及如何监…

CTFHUB技能树之XSS——过滤关键词

开启靶场&#xff0c;打开链接&#xff1a; 看上去跟上一题应该差不多&#xff0c;应该只是添加多点过滤规则吧 直接拿xss平台的代码试试&#xff1a; <sCRiPt sRC//xs.pe/6b6></sCrIpT> 这时候突然听到xss平台的上线语音提醒&#xff1a; 成功得到flag&#xff1…

react里实现左右拉伸实战

封装组件&#xff1a; 我自己写的一个简单的组件&#xff0c;可能有bug。不想自己写&#xff0c;建议用第三方库实现。 新建一个resizeBox.tsx文件写上代码如下&#xff1a; import React, { ReactNode, useState, useEffect, useRef } from react; import styles from &quo…

具备哪些特质的内外网文件交换系统 才是高科技企业需要的?

高科技企业是指涉及对国家产生深远和积极影响的先进技术的产业集群&#xff0c;它们以持续的创新和高研发投入为核心&#xff0c;推动科技进步和产业升级。高科技企业是市场经济的重要组成&#xff0c;为经济发展和技术进步提供充足动力&#xff0c;因此&#xff0c;高科技企业…

LeetCode刷题日记之贪心算法(五)

目录 前言无重叠区间划分字母区间合并区间单调递增的数字监控二叉树总结 前言 随着对贪心算法的不断深入&#xff0c;本篇文章将继续挑战一些经典的题目&#xff0c;进一步巩固这一算法的应用技巧。希望博主记录的内容能够帮助大家更好地掌握贪心算法的解题思路✍✍✍ 无重叠区…

【K8S系列】Kubernetes Pod节点CrashLoopBackOff 状态及解决方案详解【已解决】

在 Kubernetes 中&#xff0c;Pod 的状态为 CrashLoopBackOff 表示某个容器在启动后崩溃&#xff0c;Kubernetes 尝试重启该容器&#xff0c;但由于持续崩溃&#xff0c;重启的间隔时间逐渐增加。下面将详细介绍 CrashLoopBackOff 状态的原因、解决方案及相关命令的输出解释。 …

Openlayers高级交互(3/20):动态添加 layer 到 layerGroup,并动态删除

layerGroup 是 OpenLayers 库中的一个类,用于创建图层组。图层组允许您将多个图层组合在一起,并作为一个整体来控制它们的可见性和其他属性。本示例动态添加layer到layerGroup,并动态删除。 效果图 专栏名称内容介绍Openlayers基础实战 (72篇)专栏提供73篇文章,为小白群…

回归预测||时序预测||基于灰狼优化的时域卷积TCN连接Transformer-BiLSTM的数据回归预测|时序预测Matlab程序

回归预测||时序预测||基于灰狼优化的时域卷积TCN连接Transformer-BiLSTM的数据回归预测|时序预测Matlab程序 文章目录 一、基本原理一、基本概念二、原理和流程1. 数据准备2. 模型构建3. 灰狼优化算法设计4. 模型训练与优化5. 模型评估与预测 三、优势与应用四、总结 二、实验结…

Docker 用例:15 种最常见的 Docker 使用方法

容器化应用程序而不是将它们托管在虚拟机上是过去几年一直流行的概念&#xff0c;使容器管理流行起来。Docker 处于这一转变的核心&#xff0c;帮助组织无缝地采用容器化技术。最近&#xff0c;Docker 用例遍布所有行业&#xff0c;无论规模大小和性质如何。 什么是Docker&…

Windows--使用node.js的免安装版本

原文网址&#xff1a;Windows--使用node.js的免安装版本_IT利刃出鞘的博客-CSDN博客 简介 本文介绍Windows下如何使用node.js的免安装版本。 下载 1.访问官网 https://nodejs.org/en 记住这个版本号&#xff0c;这个是长期支持的版本。 2.找到压缩包 点击其他下载&#…

windows系统中,在cmd窗口演练 Redis 基本操作命令

文章目录 一、Redis 介绍1.1 Redis 的应用场景1.2 Redis 的特点 二、Windows版Redis安装三、Redis Desktop Manager安装四、Redis 常用基本操作4.1 查看操作4.2 操作string类型的命令4.2.1 设置获取Key4.2.2 MSET&#xff08;Multi&#xff09;支持批量设置key、MGET支持批量获…

平时使用Xshell能连接虚拟机,现在突然连接不上

问题&#xff1a;平时使用Xshell能连接虚拟机&#xff0c;现在突然连接不上&#xff0c;使用ip addr 命令查看ip地址 ens33 接口状态为 DOWN&#xff0c;没有分配IP地址&#xff0c;这通常意味着该网络接口未激活或存在配置问题。&#xff08;因为平时能连接&#xff0c;就说明…

DNS代理是什么?浅析DNS代理的工作原理及应用

DNS代理作为计算机网络中重要的一环&#xff0c;扮演着连接用户和互联网服务的关键角色。来了解DNS代理的定义、功能、工作原理以及在网络中的应用场景和重要性吧。 一、理解DNS代理。 DNS代理充当在用户和真正的DNS服务器之间的中介。它接收来自用户端的DNS查询请求&#xf…

std::function和bind绑定器

本文来自《深入应用C11 代码优化与工程级应用》 std::function和std::bind&#xff0c;使我们使用标准库函数时更加方便&#xff0c;且还能方便地实现延迟求值。 1.可调用对象(Callable Objects) 可调用对象有如下几种定义&#xff1a; (1)是一个函数指针 #include<ios…