docker部署mysql

docker部署mysql

  • Docker部署MySQL
  • 配置远程登录
  • 持久化数据
    • 创建容器时配置挂载卷
    • 后置配置挂载卷
  • Docker卸载MySQL
  • 部署特定版本mysql
  • 【出现1251错误】远程连接docker容器中的mysql8.0数据库时出现连接不上

Docker部署MySQL

要使用Docker部署MySQL,你可以使用官方的MySQL Docker镜像,遵循以下步骤:

  1. 首先,确保你已经在CentOS上安装了Docker,可以参考前面的回答来安装。

  2. 使用以下命令来拉取官方MySQL Docker镜像:

docker pull mysql:latest

这将下载最新版本的MySQL镜像到你的系统。

  1. 创建一个MySQL容器并运行它,同时设置root密码和将容器内部的3306端口映射到宿主机的某个端口(比如3306):
docker run -d --name mysql-container -e TZ=Asia/Shanghai -e MYSQL_ROOT_PASSWORD=your_password -p 3306:3306 mysql

请将 your_password 替换为你所需的MySQL root密码。

  1. MySQL容器将在后台运行。你可以使用以下命令来检查容器的状态:
docker ps
  1. 接下来,你可以使用MySQL客户端连接到MySQL容器。首先,安装MySQL客户端,如果尚未安装:
sudo yum install mysql
  1. 使用以下命令连接到MySQL容器:
# mysql -h 127.0.0.1 -P 3306 -u root -p
docker exec -it some-mysql mysql -uroot -p

然后输入之前设置的密码。

现在,你已经成功部署了一个MySQL容器。你可以在容器内创建数据库、用户等,或者将你的应用程序连接到该MySQL容器。在实际生产环境中,你应该更加细致地配置MySQL容器,包括持久化数据和设置安全性选项。请查看Docker和MySQL的官方文档以获取更多详细信息。

配置远程登录

要配置MySQL允许远程连接,你需要执行以下步骤:

  1. 首先,确保MySQL服务器正在运行,并且你可以通过本地访问MySQL服务器。可以使用以下命令来验证:
docker exec -it mysql-container mysql -u root -p
  1. 一旦连接到MySQL服务器,使用以下命令创建一个新用户(如果尚未存在):
CREATE USER 'your_username'@'%' IDENTIFIED BY 'your_password';

在这里,将 your_username 替换为你想要的用户名,your_password 替换为相应的密码。这将创建一个具有指定用户名和密码的新MySQL用户。

  1. 授予新用户远程访问权限:
GRANT ALL PRIVILEGES ON *.* TO 'your_username'@'%' WITH GRANT OPTION;

这将为新用户授予对所有数据库和所有表的完全访问权限。

  1. 刷新MySQL特权以使更改生效:
FLUSH PRIVILEGES;
  1. 最后,确保防火墙未阻止MySQL端口(默认情况下为3306)。如果你使用的是防火墙,请确保已允许MySQL流量通过3306端口。

完成上述步骤后,你的MySQL服务器应该已经配置允许远程访问了。现在,你应该能够使用指定的用户名和密码从远程计算机连接到MySQL服务器。

持久化数据

现在可以使用宿主机或其他网络连接到 Docker 中运行的 MySQL 数据库。记住,这种方法仅适用于开发和测试,因为容器中的数据不会保留在容器被删除后。如果需要持久化数据,你可以通过挂载卷将 MySQL 数据存储到宿主机文件系统中。

创建容器时配置挂载卷

挂载卷(Volume Mounting)是一种将宿主机文件系统中的目录或文件与容器中的目录或文件关联起来的方法。在 Docker 中,挂载卷允许容器中的数据持久保存在宿主机上,即使容器被删除或重建,数据也不会丢失。

对于 MySQL 容器,你可以通过挂载卷来持久化存储数据库数据。以下是一些简单的示例步骤:

  1. 创建一个用于持久化存储 MySQL 数据的目录(比如 /my/mysql/data):
mkdir -p /my/mysql/data
  1. 运行 MySQL 容器时,通过 -v 参数将宿主机的目录与容器中的 MySQL 数据目录关联起来:
sudo docker run \
--name some-mysql \
-e MYSQL_ROOT_PASSWORD=my-secret-pw \
-v /my/mysql/data:/var/lib/mysql \
-d \
-p 3306:3306 mysql:8.0

这将把宿主机中的 /my/mysql/data 目录挂载到容器内的 MySQL 数据目录 /var/lib/mysql

通过挂载卷,你可以确保 MySQL 数据持久存储在宿主机上,即使容器被删除后也能保留。这对于避免数据丢失和容器重建时的数据恢复非常重要。

后置配置挂载卷

如果你已经创建了一个没有挂载卷的容器,并且想要添加一个挂载卷以持久化存储数据,你可以使用 docker volume create 命令创建一个 Docker 卷,并使用 docker volume inspect 命令来获取该卷的详细信息。然后,可以使用 docker container inspect 命令获取容器的详细信息,包括其 ID。最后,使用 docker container update 命令将挂载卷附加到容器上。

下面是一个示例,演示如何为已创建的容器添加一个挂载卷:

  1. 首先,创建一个 Docker 卷:
docker volume create my_mysql_data
  1. 获取容器的 ID,可以使用以下命令获取容器的 ID:
docker container inspect -f '{{.Id}}' some-mysql

确保将 some-mysql 替换为你实际的容器名称。

  1. 获取卷的详细信息,包括路径等信息:
docker volume inspect my_mysql_data
  1. 最后,使用 docker container update 命令将卷附加到容器上:
docker container update --mount source=my_mysql_data,target=/var/lib/mysql <CONTAINER_ID>

确保将 替换为你的容器的实际 ID。

通过以上步骤,你应该能够为已创建的容器添加一个挂载卷,并将数据持久化存储到 Docker 卷中。

Docker卸载MySQL

要卸载Docker中的MySQL容器,可以按照以下步骤进行操作:

  1. 首先,使用以下命令查看正在运行的Docker容器:
docker ps
  1. 从列表中找到正在运行的MySQL容器的CONTAINER ID 或者 NAME。

  2. 停止正在运行的MySQL容器。如果使用CONTAINER ID,可以运行以下命令:

docker stop <CONTAINER_ID>

如果使用容器名称,可以运行以下命令:

docker stop <CONTAINER_NAME>
  1. 确认容器已停止。可以再次运行 docker ps 命令查看容器状态。

  2. 最后,使用以下命令来删除已停止的MySQL容器:

docker rm <CONTAINER_ID or CONTAINER_NAME>

确保使用正确的CONTAINER ID或容器名称替换命令中的占位符。

现在,MySQL容器已经从Docker中卸载并删除。如果你不再需要使用MySQL镜像,也可以选择删除该镜像。

部署特定版本mysql

要安装特定版本的MySQL Docker镜像,你可以使用标签来指定所需的版本。以下是基于Docker官方MySQL镜像的示例步骤:

  1. 首先,查找可用的MySQL版本列表。你可以通过以下命令列出可用的MySQL版本标签:
docker search mysql

这将列出所有可用的MySQL Docker镜像及其标签。

  1. 选择你想要的特定版本的MySQL。假设你想要安装8.0版本,可以运行以下命令:
docker pull mysql:8.0

这将下载MySQL 8.0版本的Docker镜像到你的系统中。

  1. 创建并运行一个MySQL容器,设置root密码并将容器内部的3306端口映射到宿主机的某个端口(比如3306):
docker run -d --name mysql-container -e MYSQL_ROOT_PASSWORD=your_password -p 3306:3306 mysql:8.0

确保将 your_password 替换为你想要设置的MySQL root密码。

现在,你已经成功安装了指定版本的MySQL Docker镜像,并创建了一个基于该版本的MySQL容器。

【出现1251错误】远程连接docker容器中的mysql8.0数据库时出现连接不上

docker部署mysql_第1张图片

参考一下
【出现1251错误】

你可能感兴趣的:(Docker学习专题内容总结,docker,mysql,容器)