0
点赞
收藏
分享

微信扫一扫

docker mysql 持久化

兵部尚输 2023-09-04 阅读 41

Docker MySQL 持久化

引言

在容器化的世界中,Docker 是最为流行和广泛使用的容器平台之一。它提供了一种轻量级、可移植和可扩展的解决方案,使得开发人员和运维人员能够更加方便地构建、部署和管理应用程序。然而,由于容器的特性,如随时创建和销毁的能力,使得容器中的数据往往是非持久化的。在本文中,我们将探讨如何通过 Docker 来实现 MySQL 数据的持久化。

Docker Volume

Docker 提供了一种称为 Volume 的机制,用于在容器和主机之间共享和存储数据。Volume 是 Docker 中的一种特殊目录,可以存在于容器的文件系统中,也可以存在于宿主机的文件系统中。通过 Volume,我们可以实现容器中数据的持久化存储。

在 Docker 中创建一个 Volume 很简单,可以使用以下的命令:

docker volume create myvolume

这里我们创建了一个名为 myvolume 的 Volume。创建好 Volume 后,我们可以将其挂载到容器中的特定路径,以实现数据的持久化。

持久化 MySQL 数据

在使用 Docker 来运行 MySQL 时,默认情况下,MySQL 的数据是存储在容器的文件系统中的,也就是说,当容器被删除或重新创建时,数据也会丢失。为了实现 MySQL 数据的持久化,我们需要将 MySQL 的数据存储到一个 Volume 中。

创建一个 Volume

首先,我们需要创建一个 Volume 来存储 MySQL 的数据。可以使用以下命令来创建一个名为 mysql_data 的 Volume:

docker volume create mysql_data

启动 MySQL 容器

接下来,我们可以使用以下的命令来启动一个 MySQL 容器,并将 Volume 挂载到容器中的 /var/lib/mysql 路径:

docker run -d -p 3306:3306 -v mysql_data:/var/lib/mysql --name mymysql -e MYSQL_ROOT_PASSWORD=password mysql:latest

在上述命令中,我们使用了 -v 参数来将 Volume mysql_data 挂载到容器中的 /var/lib/mysql 路径。这样,MySQL 的数据就会存储在 Volume 中,而不是容器的文件系统中。

数据持久化测试

现在,我们可以测试一下数据的持久化。首先,我们可以通过以下命令进入到 MySQL 容器中:

docker exec -it mymysql bash

然后,我们可以使用以下命令登录到 MySQL 服务器:

mysql -uroot -ppassword

在 MySQL 中,我们可以创建一个数据库和一张表,并插入一些数据,如下所示:

CREATE DATABASE testdb;
USE testdb;
CREATE TABLE user (id INT, name VARCHAR(20));
INSERT INTO user (id, name) VALUES (1, 'John');

然后,我们可以退出 MySQL 容器,并停止并删除该容器:

exit
docker stop mymysql
docker rm mymysql

接下来,我们可以重新启动一个新的 MySQL 容器,并将 Volume mysql_data 再次挂载到容器中的 /var/lib/mysql 路径:

docker run -d -p 3306:3306 -v mysql_data:/var/lib/mysql --name mymysql -e MYSQL_ROOT_PASSWORD=password mysql:latest

然后,我们可以再次进入到 MySQL 容器中,并登录到 MySQL 服务器:

docker exec -it mymysql bash
mysql -uroot -ppassword

在 MySQL 中,我们可以使用以下命令查询之前创建的数据库和表的数据:

USE testdb;
SELECT * FROM user;

如果我们能够看到之前插入的数据,那么说明数据已经成功地持久化了。

序列图

sequenceDiagram
    participant User
    participant Docker
    participant Host
    participant MySQL

    User->>Docker: 创建 Volume
    Docker->>Host: 创建 Volume
    User->>Docker: 启动 MySQL 容器
    Docker->>Host: 挂载 Volume
    Docker
举报

相关推荐

0 条评论