如果您是 MySQL 的新手或希望快速轻松地安装 MySQL 数据库的人,那么本文适合您,在本文中,我们将学习如何在 Linux 中使用 Docker 和 Docker compose 设置 MySQL。
让我们首先设置 docker 环境来启动 MySQL 容器。
1. 安装 Docker
在启动 MySQL docker 容器之前,您需要在您的机器上安装 docker 和 docker-compose。
您还可以参考下面给出的官方 Docker 文档链接,了解如何设置 Docker 和 Docker compose。
https://docs.docker.com/engine/install/
https://docs.docker.com/compose/install/
您可以运行以下命令来检查您正在运行的 docker 和 docker-compose 版本。
$ docker --version
Docker version 20.10.11, build dea9396
$ docker-compose --version
docker-compose version 1.29.2, build unknown
2. 下载 MySQL Docker 镜像
前往Docker Hub获取MySQL docker 镜像。重要的是您必须决定要运行的 MySQL 版本。
运行以下命令将 MySQL 映像从 docker hub 拉到您的机器上。
$ docker pull mysql:latest
注意:没有必要使用标签“ latest”,默认情况下它会拉取最新的图像。
要检查图像是否在本地可用,您可以运行以下命令:
$ docker images mysql
示例输出:
REPOSITORY TAG IMAGE ID CREATED SIZE
mysql latest b05128b000dd 12 days ago 516MB
现在图像已准备好启动容器。您也可以跳过此步骤并运行“ docker run”命令,如下一节所示,如果本地不可用,它将拉取映像。
3. 启动 MySQL 容器
运行以下命令来启动 MySQL docker 容器:
$ docker run --name mysql -p 3306:3306 -v mysql_volume:/var/lib/mysql/ -d -e "MYSQL_ROOT_PASSWORD=temp123" mysql
让我们分解上面的命令,看看每个标志的作用。
- --name→ 为您的容器命名。如果您未指定此标志,docker 将分配一些随机生成的名称。
- -p→ 端口映射。MySQL 将侦听端口,3306因此我们将端口 ( 3306→ 3306) 从您的主机映射到 docker 容器。主机端口不必是3306,它可以是任何可用的。
netstat在您的本地机器上运行以下命令以检查容器启动后映射的端口是否正在侦听。
$ netstat -tlnup | grep -i 3306
示例输出:
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 168870/docker-proxy
tcp6 0 0 :::3306 :::* LISTEN 168878/docker-proxy
- -v→ 将卷附加到容器。docker 的默认行为是一旦容器被移除就不会持久化数据,因此您将丢失所有数据。
为了创建持久存储,我创建了名为“ mysql_volume”的卷。MySQL 将数据存储在/var/lib/mysql/容器内,并在此处映射到 localhost 目录/var/lib/docker/volumes/mysql_volume1/_data
,因此您的数据将是持久的。
- -d→ 将以分离模式启动和运行容器。如果省略该-d标志,那么您将在终端中看到容器启动日志,您必须打开一个新的终端会话才能连接到容器。
- -e→ 环境变量。您必须使用以下任一参数设置 mysql root 用户密码。
- MYSQL_ROOT_PASSWORD → 使用此环境变量设置您自己的密码。
- MYSQL_ALLOW_EMPTY_PASSWORD→ 将设置空白或空密码。你必须设置MYSQL_ALLOW_EMPTY_PASSWORD=1.
- MYSQL_RANDOM_ROOT_PASSWORD→ 容器启动时会生成随机密码。您必须设置MYSQL_RANDOM_ROOT_PASSWORD=1生成随机密码。
如果跳过此步骤,则会引发如下所示的错误。
4. 检查 MySQL 容器状态
您可以使用以下命令检查启动的容器状态:
$ docker ps
示例输出:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
e1fb895f6f0f mysql "docker-entrypoint.s..." 3 minutes ago Up 3 minutes 0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp mysql
5.连接到MySQL数据库
运行以下命令连接到 MySQL 容器。
$ docker exec -it mysql bash
root通过运行以下命令以用户身份连接到 MySQL 数据库。就我而言,我已经通过MYSQL_ROOT_PASSWORD.
$ mysql -u root -p
如果您MYSQL_RANDOM_ROOT_PASSWORD=1在启动容器时使用过,那么您可以从日志中获取自动生成的密码。
$ docker logs
$ docker logs mysql
自动生成的root密码会很长,不需要记住。您可以通过运行以下查询来重置 root 密码。
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'mysqlpassword';
将密码“mysqlpassword”替换为您自己的密码。您还可以创建自己的用户并根据需要授予他权限。
6. 加载样本数据
设置 mysql 的主要目的是加载一些数据并对其运行查询。有几种方法可以加载数据。我有一个名为“ load_data.sql”的示例文件,其中包含以下查询。
如果不存在足球,则创建数据库;
CREATE DATABASE IF NOT EXISTS football;
USE football;
CREATE TABLE IF NOT EXISTS players (
player_name VARCHAR(16) NOT NULL,
player_age INT NOT NULL,
player_club VARCHAR(16) NOT NULL,
player_country VARCHAR(16) NOT NULL
);
INSERT INTO players VALUES ("Messi",34,"PSG","Argentina");
INSERT INTO players VALUES ("Ronaldo",36,"MANU","Portugal");
INSERT INTO players VALUES ("Neymar",29,"PSG","Brazil");
INSERT INTO players VALUES ("Kane",28,"SPURS","England");
INSERT INTO players VALUES ("E Hazard",30,"MADRID","Belgium");
第一种方法是使用“ docker cp”命令将数据从本地机器复制到 docker 容器。
$ docker cp load_data.sql mysql:/tmp
$ docker exec -it mysql bash
$ ls -l /tmp/
现在您可以连接到 mysql 客户端并运行 source 命令或将文件重定向到 mysql 客户端。
$ mysql -u root -p
mysql> source /tmp/load_data.sql
或者
$ mysql -u root -p < /tmp/load_data.sql
连接到数据库并查询您的表。
$ mysql -u root -p
mysql> show databases;
mysql> use football;
mysql> show tables;
mysql> select * from players;
第二种方法是.sql在运行docker exec命令时重定向文件。
$ docker exec -i mysql mysql -u root -p < load_data.sql
7. 使用 Docker-Compose 设置 MySQL 容器
docker run您可以使用docker-compose快速启动容器,而不是拉取镜像并运行命令。当您要创建多个容器时,Docker-compose 最适合。
创建一个名为docker-compose.yml或docker-compose.yaml文件的文件。复制并粘贴以下 yaml 代码。
version: '3.8'
services:
database:
image: mysql:latest
container_name: mysql
environment:
MYSQL_ROOT_PASSWORD: temp1234
ports:
- "3306:3306"
volumes:
- mysql_volume:/var/lib/mysql
volumes:
mysql_compose_volume:
现在运行以下命令,这将启动 MySQL docker 容器。
$ docker-compose up
运行以下命令以使用 docker-compose 检查已启动容器的状态:
$ docker-compose ps
示例输出:
Name Command State Ports
-------------------------------------------------------------------------------------------------
mysql docker-entrypoint.sh mysqld Up 0.0.0.0:3306->3306/tcp,:::3306->3306/tcp, 33060/tcp
8. 使用 MySQL Workbench 连接到 MySQL 数据库
到目前为止,我们已经看到了如何从容器内部使用 mysql 客户端连接到数据库。您还可以使用任何 GUI 客户端(如 mysql workbench、dbeaver、Heidi SQL 等)连接到数据库。
无论您使用什么 GUI 客户端,都要注意的重要一点是,启动容器时映射的端口是什么。
就我而言,我已经映射了localhost ( 3306) ->容器( 3306)。所以如果我必须建立到数据库的连接,我必须连接到localhost:3306或127.0.01:3306。
我使用 MySQL Workbench 作为我的 GUI 客户端,如果您还没有在您的机器上安装 MySQL Workbench,那么您可以使用以下说明进行安装。
8.1. 在 Linux 中安装 MySQL Workbench
导航到官方站点下载包文件,您必须选择您的操作系统才能下载.deb或.rpm文件。
在下一步中,它会要求您登录或注册,您可以通过单击“不,谢谢,只需开始我的下载”选项跳过登录或注册。
在基于 Debian 的系统上,安装 MySQL Workbench,如下所示:
$ cd
$ sudo apt install ./mysql-workbench-community_8.0.27-1ubuntu21.04_amd64.deb
在基于 RHEL 的系统上,安装 MySQL Workbench,如下所示:
$ cd
$ sudo dnf localinstall ./mysql-workbench-community-8.0.27-1.el8.x86_64.rpm
安装完成后,您可以从菜单或破折号启动 mysql 工作台。
8.2. 连接到 MySQL 数据库
连接到在 docker 容器内运行的数据库,您应该尝试连接到localhost:3306或localhost:取决于您的容器的设置方式。
在连接到数据库之前,您可以按“测试连接”来检查 MySQL Workbench 是否能够成功连接到数据库实例。
现在您可以开始针对您创建的表运行查询。
9. 结论
在本文中,我们简要了解了如何在 docker 中启动 MySQL 容器的使用docker run和docker-compose方法,如果你想设置 MySQL 用于测试或学习目的,Docker 就足够了。
-
Linux
+关注
关注
87文章
11219浏览量
208872 -
数据库
+关注
关注
7文章
3759浏览量
64265 -
容器
+关注
关注
0文章
492浏览量
22041 -
MySQL
+关注
关注
1文章
801浏览量
26433
发布评论请先 登录
相关推荐
评论