> 技术文档 > 使用 Docker 安装 MySQL 的详细教程_docker安装mysql

使用 Docker 安装 MySQL 的详细教程_docker安装mysql

Docker 是一种开源的容器化平台,可以轻松地将应用程序及其依赖项打包在一个容器中,从而在任何环境中运行。本文将详细介绍如何使用 Docker 安装 MySQL 数据库,并包括端口配置和防火墙设置。

1. 安装 Docker

在安装 MySQL 之前,确保你的系统已经安装了 Docker。如果还没有安装 Docker,请参考上一篇博客

2. 拉取 MySQL 镜像

Docker 提供了官方的 MySQL 镜像,你可以直接从 Docker Hub 拉取该镜像。

1. 拉取 MySQL 5.7 镜像

docker pull mysql:5.7

命令从 Docker Hub 拉取 MySQL 5.7 版本的官方镜像。如果镜像已经存在,Docker 会直接使用本地镜像;如果镜像不存在,则会从 Docker Hub 下载。

2. 查看本地 Docker 镜像

docker images

此命令列出当前 Docker 主机上所有可用的镜像。你会看到包括 MySQL 镜像在内的所有镜像信息,如镜像 ID、标签(tag)、创建时间、大小等。

3. 创建 MySQL 数据和配置目录

mkdir -p /home/service/mysql/data mkdir -p /home/service/mysql/conf

这两条命令分别创建了用于存储 MySQL 数据和配置文件的目录:

  • /home/service/mysql/data:用来存储 MySQL 数据文件,这样可以将 MySQL 数据持久化,避免容器删除后数据丢失。
  • /home/service/mysql/conf:用来存储 MySQL 配置文件,通常是 my.cnf 文件,可以在这里调整 MySQL 的配置。

4. 进入配置文件目录并创建 my.cnf 配置文件

cd /home/service/mysql/conf touch my.cnf

这两条命令切换到配置文件目录,并创建一个空的 my.cnf 配置文件。这个文件是 MySQL 的主配置文件,存储了 MySQL 的各种配置选项(如端口号、缓冲区大小、日志选项等)。

5. 编辑 my.cnf 配置文件(如果提示不识别此命令,请先安装 yum install my.cnf)

vim my.cnf

这条命令打开 my.cnf 配置文件进行编辑。你可以在文件中添加或修改 MySQL 的配置选项。例如,以下是一个简单的 my.cnf 配置文件示例:

[mysqld]user=mysqlcharacter-set-server=utf8default_authentication_plugin=mysql_native_passworddefault-time_zone = \'+8:00\'[client]default-character-set=utf8[mysql]default-character-set=utf8
  • user=mysql:指定 MySQL 服务以 mysql 用户身份运行。这样可以避免以 root 用户运行 MySQL,从而提高系统的安全性。

  • character-set-server=utf8:指定 MySQL 服务端的默认字符集为 utf8。这个设置确保了数据库、表和列默认使用 UTF-8 编码,支持多语言字符,避免乱码问题。

  • default_authentication_plugin=mysql_native_password:这个设置指定使用 mysql_native_password 插件作为身份验证插件。它适用于 MySQL 5.7 及以下版本,以确保兼容性。默认情况下,新创建的用户使用 caching_sha2_password 插件,而这个设置强制 MySQL 使用传统的 mysql_native_password 插件,确保与旧版应用兼容。

  • default-time_zone = \'+8:00\':设置 MySQL 容器的默认时区为 UTC+8:00(中国标准时间)。这个设置可以确保时间存储和显示在本地时区,避免时区不一致导致的问题。

6.创建并运行 MySQL 容器

这些命令创建了一个 MySQL 容器,设置了 root 密码,并在 MySQL 中创建了一个新的 admin 用户,赋予该用户所有权限。

6.1 Docker 运行命令
docker run -p 3306:3306 --name mysql -v /home/service/mysql/logs:/logs -v /home/service/mysql/data:/mysql_data -e MYSQL_ROOT_PASSWORD=Wing1Q2W#E -d mysql:5.7
  • docker run:启动一个新的 Docker 容器。
  • -p 3306:3306:将宿主机的 3306 端口(MySQL 默认端口)映射到容器的 3306 端口,使你可以通过宿主机访问 MySQL。
  • --name mysql:将容器命名为 mysql
  • -v /home/service/mysql/logs:/logs:将宿主机的 /home/service/mysql/logs 目录挂载到容器的 /logs 目录,用于存储 MySQL 日志。
  • -v /home/service/mysql/data:/mysql_data:将宿主机的 /home/service/mysql/data 目录挂载到容器的 /mysql_data 目录,用于存储 MySQL 数据。
  • -e MYSQL_ROOT_PASSWORD=Wing1Q2W#E:设置 MySQL 的 root 用户密码为 Wing1Q2W#E
  • -d mysql:5.7:指定容器使用 mysql:5.7 镜像,并在后台运行。
6.2 进入容器命令
docker exec -it mysql bash
  • docker exec -it mysql bash:进入名为 mysql 的容器并启动一个 bash shell,允许你在容器内执行命令。
6.3 MySQL 命令
mysql -u root -p
  • mysql -uroot -p:使用 root 用户登录 MySQL。系统会提示你输入密码(在之前的命令中设置为 Wing1Q2W#E)。
CREATE USER \'admin\'@\'%\' IDENTIFIED BY \'Wing1Q2W#E\'; GRANT ALL ON *.* TO \'admin\'@\'%\';FLUSH PRIVILEGES;
  • CREATE USER \'admin\'@\'%\' IDENTIFIED BY \'Wing1Q2W#E\';:创建一个名为 admin 的新用户,允许从任何主机(%)连接,并设置其密码为 Wing1Q2W#E
  • admin\'@\'%\'设置 MySQL 远程访问属性
  • GRANT ALL ON *.* TO \'admin\'@\'%\';:授予 admin 用户对所有数据库和表的所有权限。
  • FLUSH PRIVILEGES;:刷新权限,使刚才的权限修改生效。

docker ps 查看启动状态

7. 配置防火墙

注意:公网的3306并不是真正mysql的3306而是一个外部访问端口

为了确保能够通过外部网络访问 MySQL 服务,需要在防火墙中开放 3306 端口。如果你的系统使用 firewalld 防火墙,执行以下命令来开放 MySQL 端口:

4.1 开放 3306 端口

检查防火墙状态:

sudo firewall-cmd --list-ports

或者:

sudo iptables -L -n
如果使用 firewalld,可以这样开放 3306 端口:
sudo firewall-cmd --zone=public --add-port=3306/tcp --permanent sudo firewall-cmd --reload

云服务器(如阿里云、腾讯云)是否开放了安全组的 3306 端口

然后就可以愉快的使用本地工具访问服务器数据库了