在开发和测试过程中,快速搭建一个独立、干净的数据库环境是至关重要的。传统安装MySQL过程繁琐,而使用Docker,你可以在一分钟内完成所有工作。本文将手把手教你如何使用Docker安装MySQL,并详细说明如何连接、使用和管理这个数据库。

一、为什么选择Docker安装MySQL?
  1. 极速部署:无需下载安装包、配置系统服务,一条命令即可运行。

  2. 环境隔离:数据库环境与宿主机完全隔离,不会污染系统,可以轻松运行多个不同版本的MySQL实例。

  3. 易于清理:测试完成后,直接删除容器和镜像即可彻底清除,不留任何痕迹。

  4. 一致性:确保开发、测试、生产环境使用完全相同的MySQL版本和配置。

二、一步到位:运行MySQL容器

这是最核心的一步。我们使用 docker run 命令来从Docker Hub拉取官方MySQL镜像并启动一个容器。

打开你的终端,执行以下命令:

bash

docker run -d \
  --name mysql-server \
  -e MYSQL_ROOT_PASSWORD=my-secret-pw \
  -p 3306:3306 \
  -v mysql_data:/var/lib/mysql \
  mysql:8.0

让我们拆解这条命令的每个部分:

  • docker run:创建并启动一个新容器。

  • -d:在“后台”(分离模式)运行容器。

  • --name mysql-server:为容器起一个有意义的名字,方便后续管理(启动、停止等)。

  • -e MYSQL_ROOT_PASSWORD=my-secret-pw:设置环境变量。这是最关键的一步,它配置了MySQL root 用户的密码。请务必将其中的 my-secret-pw 替换为你自己的强密码。

  • -p 3306:3306:端口映射。

    • 第一个 3306 是宿主机的端口。

    • 第二个 3306 是容器内MySQL服务的默认端口。

    • 含义:将所有发送到宿主机3306端口的请求,转发到容器的3306端口。

  • -v mysql_data:/var/lib/mysql:数据卷挂载。

    • mysql_data 是Docker管理卷的名称(Docker会自动创建)。

    • /var/lib/mysql 是容器内MySQL存储数据文件的位置。

    • 重要性:这个操作实现了数据持久化。即使你删除了容器,你的数据库数据仍然保留在 mysql_data 卷中。下次启动新容器时重新挂载即可恢复。

  • mysql:8.0:指定要使用的镜像名和标签(版本)。这里我们使用MySQL 8.0版本。你可以替换为 mysql:5.7 等其他版本。

三、验证安装与连接数据库

容器运行后,如何确认它工作正常并开始使用呢?

1. 检查容器状态

bash

docker ps

你应该能看到一个名为 mysql-server 的容器状态为 Up

2. 方法一:通过命令行客户端直接连接(推荐)

最直接的方式是进入容器内部,使用MySQL自带的命令行客户端。

bash

# 执行容器内的mysql客户端
docker exec -it mysql-server mysql -u root -p

系统会提示你输入密码,输入之前在 -e MYSQL_ROOT_PASSWORD 中设置的密码(如 my-secret-pw)即可。

连接成功后的操作示例:

一旦进入MySQL命令行(提示符变为 mysql>),你就可以执行任何SQL命令。

sql

-- 显示所有数据库
SHOW DATABASES;

-- 创建一个新的数据库
CREATE DATABASE my_docker_db;

-- 使用这个新数据库
USE my_docker_db;

-- 创建一张新表
CREATE TABLE users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(100) NOT NULL,
    email VARCHAR(100)
);

-- 向表中插入数据
INSERT INTO users (name, email) VALUES ('Alice', 'alice@example.com');

-- 查询数据
SELECT * FROM users;

3. 方法二:使用宿主机上的MySQL客户端连接

如果你在Ubuntu宿主机上也安装了MySQL客户端,可以直接连接。

  • 首先,安装MySQL客户端:

    bash

    sudo apt-get update
    sudo apt-get install mysql-client
  • 然后,连接至容器化的MySQL服务器:

    bash

    mysql -h 127.0.0.1 -P 3306 -u root -p
    • -h 127.0.0.1:指定主机为本地。

    • -P 3306:指定端口(就是你映射的宿主机端口)。

4. 方法三:使用图形化工具(如DBeaver、MySQL Workbench)连接

你也可以使用任何你喜欢的数据库管理工具。

  • Host127.0.0.1 或 localhost

  • Port3306

  • Usernameroot

  • Password: 你设置的密码(如 my-secret-pw

四、日常管理与常用命令

学会如何管理你的MySQL容器至关重要。

  • 停止容器

    bash

    docker stop mysql-server
  • 启动已停止的容器

    bash

    docker start mysql-server
  • 重启容器

    bash

    docker restart mysql-server
  • 查看容器日志(用于排查问题):

    bash

    docker logs mysql-server
  • 进入容器内部的bash shell(而不直接启动MySQL客户端):

    bash

    docker exec -it mysql-server bash
  • 备份数据库(导出SQL文件)

    bash

    docker exec mysql-server mysqldump -u root -pmy-secret-pw my_docker_db > backup.sql
  • 彻底删除容器(谨慎操作!数据会因卷的挂载方式而决定是否保留)

    bash

    docker stop mysql-server
    docker rm mysql-server
    # 注意:此操作不会删除 mysql_data 卷,你的数据是安全的。
五、高级配置:自定义MySQL配置

如果你想使用自定义的 my.cnf 配置文件,可以将其挂载到容器中。

  1. 在宿主机上创建一个配置文件,例如 /path/to/custom/my.cnf

  2. 运行容器时添加一个 -v 挂载选项:

    bash

    docker run -d \
      --name mysql-server \
      -e MYSQL_ROOT_PASSWORD=my-secret-pw \
      -p 3306:3306 \
      -v mysql_data:/var/lib/mysql \
      -v /path/to/custom/:/etc/mysql/conf.d/ \
      mysql:8.0

    这样,容器会自动加载 /etc/mysql/conf.d/ 目录下所有以 .cnf 结尾的配置文件。

总结

通过以上步骤,你已经成功地:

  1. 使用 docker run 命令一键部署了MySQL。

  2. 通过环境变量安全地设置了root密码。

  3. 使用数据卷实现了数据持久化。

  4. 通过多种方式连接到了容器内的MySQL并进行基本操作。

  5. 学会了日常的管理命令。

Docker让MySQL的搭建和管理变得前所未有的简单。现在,你可以尽情地在你的新数据库上进行开发测试,而无需担心搞乱你的主机环境了!

更多推荐