Docker中MySQL的安装与实践

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: MySQL 是世界上最受欢迎的开源数据库。凭借其可靠性、易用性和性能,MySQL 已成为 Web 应用程序的数据库优先选择。我们在写 Demo 项目或者学习的时候,都经常会使用到 MysQL 数据库或集群,使用 Docker 能方便随时随地的搭建数据库环境。


一、MySQL 镜像下载



1. 查找 MySQL 镜像


登录 Docker Hub 官网搜索 MySQL 镜像,或者直接访问 https://hub.docker.com/_/mysql

也可以在终端使用docker search mysql来搜索 MySQL 镜像,OFFICAL 列为 OK 的为官方镜像。


2. 下载MySQL镜像


从 Docker Hub 拉取 MySQL 5.7 镜像,命令如下:

$ docker pull mysql:5.7

使用docker pull mysql:来指定下载镜像的 tag,不指定默认为 latest。下载完成后使用docker images来查看本地已经下载好的镜像。

$ docker images
REPOSITORY    TAG    IMAGE ID    CREATED    SIZE
mysql       5.7    718a6da099d8  3 weeks ago  448MB


二、MySQL 容器运行



安装完成后,可以使用docker run 命令来运行 MySQL 容器。


1. 配置端口映射


$ docker run --name mysql -p 3306:3306 -d mysql:5.7
8c3026a0acd14f53e702a9854b2ffe4aa2668a552e11e171b3ae667cbe691d31


  • --name:指定容器名称,方便对容器的操作
  • -p ::指定端口映射,将容器的端口映射到主机的端口
  • -d:指定容器在后台运行,以守护进程的形式运行
  • 8c3026a...:容器ID,对容器进行操作时用于指定容器

运行成功后可以使用下面命令查看运行中的 MySQL 容器:

# 查看运行中的容器
$ docker ps # 或 docker container ls
CONTAINER ID    IMAGE    COMMAND    CREATED    STATUS    PORTS    NAMES
# 查看所有容器
$ docker ps -a # 或 docker container ls -a
CONTAINER ID    IMAGE    COMMAND           CREATED      STATUS        PORTS    NAMES
1280ffeb3616    mysql:5.7  "docker-entrypoint.s…"   52 seconds ago  Exited (1) 50 seconds ago      mysql

我们发现没有运行成功的容器,再使用docker ps -a命令查看所有容器,查看STATUS列发现容器状态为已经退出。此时使用docker logs mysql来查看容器运行的日志来找出问题:

$ docker logs mysql
2020-08-30 03:25:12+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 5.7.31-1debian10 started.
2020-08-30 03:25:12+00:00 [Note] [Entrypoint]: Switching to dedicated user 'mysql'
2020-08-30 03:25:12+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 5.7.31-1debian10 started.
2020-08-30 03:25:12+00:00 [ERROR] [Entrypoint]: Database is uninitialized and password option is not specified
        You need to specify one of MYSQL_ROOT_PASSWORD, MYSQL_ALLOW_EMPTY_PASSWORD and MYSQL_RANDOM_ROOT_PASSWORD

日志提示我们需要指定一个MYSQL_ROOT_PASSWORDMYSQL_ALLOW_EMPTY_PASSWORDMYSQL_RANDOM_ROOT_PASSWORD的环境变量来作为数据库 root 用户的密码。


2. 配置环境变量


移除刚才运行失败的容器,并指定环境变量重新运行:

# 移除容器
$ docker container rm mysql
mysql
# 指定端口映射和环境变量运行
$ docker run --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7
bdfa70905470e241daaf9fcd332c957550e24b10b74c4a2232001c79e3dae898


  • -e key=value:用于指定容器中系统的环境变量

此时使用docker ps查看容器已经运行成功了,接下来我们可以使用 MySQL 数据库客户端来连接使用了。使用下面命令,并输入我们刚才配置的密码,就可以进入数据库了。

$ mysql -h 127.0.0.1 -u root -p

微信图片_20220519203134.png


3. 查看数据卷


在 Docker 中,MySQL 数据库的数据持久化是通过创建数据卷来实现的,也就是说所有在数据库中存储的数据,都会保存在主机上,使用下面命令来查看数据卷详情:

# 查看数据卷
$ docker volume ls
DRIVER    VOLUME NAME
local      b25a62989527e7b0c9113300cdde9fb26354d96c863e942712d02dc2756c80ca
# 查看数据卷详情 
$ docker inspect b25a62989527e7b0c9113300cdde9fb26354d96c863e942712d02dc2756c80ca
[
    {
        "CreatedAt": "2020-08-30T11:35:15+08:00",
        "Driver": "local",
        "Labels": null,
        "Mountpoint": "/var/lib/docker/volumes/b25a62989527e7b0c9113300cdde9fb26354d96c863e942712d02dc2756c80ca/_data",
        "Name": "b25a62989527e7b0c9113300cdde9fb26354d96c863e942712d02dc2756c80ca",
        "Options": null,
        "Scope": "local"
    }
]
# 查看数据卷绑定的主机目录
$ sudo ls /var/lib/docker/volumes/b25a62989527e7b0c9113300cdde9fb26354d96c863e942712d02dc2756c80ca/_data
auto.cnf    client-cert.pem    ib_logfile0    ibtmp1    private_key.pem    server-key.pem
ca-key.pem    client-key.pem    ib_logfile1    mysql public_key.pem    sys
ca.pem    ib_buffer_pool    ibdata1    performance_schema    server-cert.pem

从上面的操作可以看出,数据库数据实际保存的位置在主机的目录下,这样就可以实现 MySQL 容器的数据持久化了。

使用 Docker 搭建数据库环境,不管是单节点还是集群,只需要很简单的操作就能实现,再也不用担心虚拟机消耗太多的电脑资源,也不用担心环境之间有什么差异,因此,我们在学习过程中,只需要关注知识点功能的实现。


相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
目录
相关文章
|
23天前
|
Ubuntu 关系型数据库 MySQL
MySQL源码编译安装
本文详细介绍了MySQL 8.0及8.4版本的源码编译安装全过程,涵盖用户创建、依赖安装、cmake配置、编译优化等步骤,并提供支持多Linux发行版的一键安装脚本,适用于定制化数据库部署需求。
111 4
MySQL源码编译安装
|
23天前
|
Ubuntu 关系型数据库 MySQL
MySQL二进制包安装
本文详细介绍了在多种Linux系统上通过二进制包安装MySQL 8.0和8.4版本的完整过程,涵盖用户创建、glibc版本匹配、程序解压、环境变量配置、初始化数据库及服务启动等步骤,并提供支持多发行版的一键安装脚本,助力高效部署MySQL环境。
144 4
MySQL二进制包安装
|
23天前
|
安全 关系型数据库 MySQL
MySQL包安装 -- SUSE系列(离线RPM包安装MySQL)
本文详细介绍在openSUSE系统上通过离线RPM包安装MySQL 8.0和8.4版本的完整步骤,包括下载地址、RPM包解压、GPG密钥导入、使用rpm或zypper命令安装及服务启动验证,涵盖初始密码获取与安全修改方法,适用于无网络环境下的MySQL部署。
242 3
MySQL包安装 -- SUSE系列(离线RPM包安装MySQL)
|
23天前
|
关系型数据库 MySQL Linux
MySQL包安装 -- SUSE系列(SUSE资源库安装MySQL)
本文介绍了在openSUSE系统上通过SUSE资源库安装MySQL 8.0和8.4版本的完整步骤,包括配置国内镜像源、安装MySQL服务、启动并验证运行状态,以及修改初始密码等操作,适用于希望在SUSE系列系统中快速部署MySQL的用户。
125 3
MySQL包安装 -- SUSE系列(SUSE资源库安装MySQL)
|
20天前
|
NoSQL 算法 Redis
【Docker】(3)学习Docker中 镜像与容器数据卷、映射关系!手把手带你安装 MySql主从同步 和 Redis三主三从集群!并且进行主从切换与扩容操作,还有分析 哈希分区 等知识点!
Union文件系统(UnionFS)是一种**分层、轻量级并且高性能的文件系统**,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下(unite several directories into a single virtual filesystem) Union 文件系统是 Docker 镜像的基础。 镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像。
181 5
|
20天前
|
Java Linux 虚拟化
【Docker】(1)Docker的概述与架构,手把手带你安装Docker,云原生路上不可缺少的一门技术!
1. Docker简介 1.1 Docker是什么 为什么docker会出现? 假定您在开发一款平台项目,您的开发环境具有特定的配置。其他开发人员身处的环境配置也各有不同。 您正在开发的应用依赖于您当前的配置且还要依赖于某些配置文件。 您的企业还拥有标准化的测试和生产环境,且具有自身的配置和一系列支持文件。 **要求:**希望尽可能多在本地模拟这些环境而不产生重新创建服务器环境的开销 问题: 要如何确保应用能够在这些环境中运行和通过质量检测? 在部署过程中不出现令人头疼的版本、配置问题 无需重新编写代码和进行故障修复
210 2
|
数据可视化 Linux Docker
docker 系列:实践工具
本文将介绍 Docker 的相关工具使用经验,比如 Docker-compose:容器编排工具;Portainer:容器可视化管理;以及 DockerFile 的构建。相当于是一套组合拳。让我们能更轻松、更方便去管理 Docker。
250 0
docker 系列:实践工具

热门文章

最新文章