2.5.7.1 使用 Docker 部署 MySQL 服务器的基本步骤
Warning
MySQL 团队维护的 MySQL Docker 映像是专门为 Linux 平台构建的。不支持其他平台,在这些平台上使用这些 MySQL Docker 映像的用户需要自担风险。有关在非 Linuxos 上运行这些容器的一些已知限制,请参见这里的讨论。
下载 MySQL 服务器 Docker 映像
严格来说,无需单独下载服务器映像。但是,在创建 Docker 容器之前执行此步骤可确保本地映像是最新的。要下载 MySQL Community Edition 映像,请运行以下命令:
docker pull mysql/mysql-server:tag
tag
*是您要拉取的图像版本的标签(例如5.5
,5.6
,5.7
,8.0
或latest
)。如果省略:tag
,则使用latest
标签,并下载最新版本的 MySQL Community Server 的映像。请参阅Docker Hub 中的 mysql/mysql-server 页面上可用列 table 的标签列 table。
要下载 MySQL Enterprise Edition 映像,请访问我的 Oracle 支持网站,登录到您的 Oracle 帐户,并在登录页面上执行以下步骤:
-
选择补丁和更新选项卡。
-
转到补丁搜索区域,然后在“搜索”选项卡上,切换到“产品”或“系列(高级)”子选项卡。
-
在“产品”字段中 Importing“ MySQL Server”,然后在“发布”字段中 Importing 所需的版本号。
-
使用其他过滤器的下拉菜单选择“描述”(包含),然后在文本字段中 Importing“ Docker”。
下图显示了 MySQL Enterprise Edition 映像的搜索设置:
-
单击搜索按钮,然后从结果列 table 中选择所需的版本,然后单击下载按钮。
-
在出现的“文件下载”对话框中,单击并下载 Docker 映像的
.zip
文件。
解压缩下载的.zip
归档文件以获得内部(mysql-enterprise-server-version.tar
)的压缩包,然后通过运行以下命令来加载图像:
docker load -i mysql-enterprise-server-version.tar
您可以使用以下命令列出下载的 Docker 映像:
shell> docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
mysql/mysql-server latest 3157d7f55f8d 4 weeks ago 241MB
启动 MySQL 服务器实例
要为 MySQL 服务器启动新的 Docker 容器,请使用以下命令:
docker run --name=container_name -d image_name:tag
可以使用 docker images 命令获取映像名称,如下载 MySQL 服务器 Docker 映像中所述。用于为服务器容器提供自定义名称的--name
选项是可选的。如果没有提供容器名称,则会生成一个随机的容器名称。
例如,要为 MySQL Community Server 启动新的 Docker 容器,请使用以下命令:
docker run --name=mysql1 -d mysql/mysql-server:5.7
要使用从 My Oracle Support 下载的 Docker 映像为 MySQL Enterprise Server 启动新的 Docker 容器,请使用以下命令:
docker run --name=mysql1 -d mysql/enterprise-server:5.7
如果先前的 docker pull 或 docker run 命令尚未下载指定名称和标签的 Docker 映像,则现在已下载该映像。容器的初始化开始,并且当您运行 docker ps **命令时,该容器会出现在正在运行的容器列 table 中。例如:
shell> docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a24888f0d6f4 mysql/mysql-server "/entrypoint.sh my..." 14 seconds ago Up 13 seconds (health: starting) 3306/tcp, 33060/tcp mysql1
容器初始化可能需要一些时间。当服务器准备好使用时, docker ps 命令输出中容器的STATUS
从(health: starting)
变为(healthy)
。
上面的 docker run 命令中使用的-d
选项使容器在后台运行。使用以下命令监视容器的输出:
docker logs mysql1
初始化完成后,命令的输出将包含为 root 用户生成的随机密码。使用以下命令检查密码:
shell> docker logs mysql1 2>&1 | grep GENERATED
GENERATED ROOT PASSWORD: Axegh3kAJyDLaRuBemecis&EShOs
从容器内连接到 MySQL Server
服务器准备就绪后,您可以在刚启动的 MySQL Server 容器中运行mysqlClient 端,并将其连接到 MySQL Server。使用 docker exec -it **命令在已启动的 Docker 容器内启动mysqlClient 端,如下所示:
docker exec -it mysql1 mysql -uroot -p
询问时,Importing 生成的 root 密码(有关如何查找密码,请参见上面启动 MySQL 服务器实例的最后一步)。因为MYSQL_ONETIME_PASSWORD选项默认情况下为 true,所以在将mysqlClient 端连接到服务器后,必须通过发出以下语句来重置服务器根密码:
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'password';
用您选择的密码替换* password
*。重置密码后,即可使用服务器。
容器 Shell 访问
要具有对 MySQL Server 容器的 shell 访问权限,请使用 docker-exec -it **命令在容器内部启动 bash shell:
shell> docker exec -it mysql1 bash
bash-4.2#
然后,您可以在容器内运行 Linux 命令。例如,要查看容器内服务器的数据目录中的内容,请使用以下命令:
bash-4.2# ls /var/lib/mysql
auto.cnf ca.pem client-key.pem ib_logfile0 ibdata1 mysql mysql.sock.lock private_key.pem server-cert.pem sys
ca-key.pem client-cert.pem ib_buffer_pool ib_logfile1 ibtmp1 mysql.sock performance_schema public_key.pem server-key.pem
停止和删除 MySQL 容器
要停止我们创建的 MySQL Server 容器,请使用以下命令:
docker stop mysql1
docker stop 向mysqld进程发送 SIGTERMsignal,以便正常关闭服务器。
还要注意,当容器的主进程(在 MySQL Server 容器中为mysqld)停止时,Docker 容器会自动停止。
要再次启动 MySQL Server 容器:
docker start mysql1
要使用单个命令停止并重新启动 MySQL Server 容器:
docker restart mysql1
要删除 MySQL 容器,请先将其停止,然后使用 docker rm 命令:
docker stop mysql1
docker rm mysql1
如果您希望同时删除服务器数据目录的 Docker 卷,请将-v
选项添加到 docker rm 命令。
升级 MySQL 服务器容器
Important
-
在执行任何 MySQL 升级之前,请仔细遵循第 2.11 节“升级 MySQL”中的说明。在此处讨论的其他说明中,在升级之前备份数据库尤为重要。
-
本节中的说明要求服务器的数据和配置已保留在主机上。有关详情,请参见持续的数据和配置更改。
请按照以下步骤将 Docker 安装的 MySQL 5.6 升级到 5.7:
- 停止 MySQL 5.6 服务器(在此示例中,容器名称为
mysql56
):
docker stop mysql56
-
下载 MySQL 5.7 服务器 Docker 映像。请参阅下载 MySQL 服务器 Docker 映像中的说明;确保为 MySQL 5.7 使用正确的标签。
-
启动一个新的 MySQL 5.7 Docker 容器(在此示例中名为
mysql57
),该容器具有旧的服务器数据和配置(如果需要,请进行适当的修改,请参见第 2.11 节“升级 MySQL”),这些容器和配置已在主机上保留(在此示例中为bind-mounting)。对于 MySQL Community Server,运行以下命令:
docker run --name=mysql57 \
--mount type=bind,src=/path-on-host-machine/my.cnf,dst=/etc/my.cnf \
--mount type=bind,src=/path-on-host-machine/datadir,dst=/var/lib/mysql \
-d mysql/mysql-server:5.7
如果需要,将mysql/mysql-server
调整为正确的存储库名称-例如,对于从我的 Oracle 支持下载的 MySQL 企业版映像,将其替换为mysql/enterprise-server
。
-
await 服务器完成启动。您可以使用 docker ps 命令检查服务器的状态(有关方法,请参阅启动 MySQL 服务器实例)。
-
在 MySQL 5.7 服务器容器中运行mysql_upgradeUtil:
docker exec -it mysql57 mysql_upgrade -uroot -p
出现提示时,Importing 旧 MySQL 5.6 服务器的 root 密码。
- 通过重新启动 MySQL 5.7 Server 容器来完成升级:
docker restart mysql57
有关使用 Docker 部署 MySQL 服务器的更多主题
有关使用 Docker 部署 MySQL Server 的更多主题,例如服务器配置,持久化数据和配置,服务器错误日志以及容器环境变量,请参见第 2.5.7.2 节“有关使用 Docker 部署 MySQL 服务器的更多主题”。