使用Docker部署MySQL服务器的基本步骤包括以下几点
MySQL团队维护的MySQL Docker镜像专门针对Linux平台构建。其他平台不受支持,而在这些平台上使用这些MySQL Docker镜像的用户将自担风险。
下载MySQL Server Docker镜像
重要提示
对于MySQL企业版用户:要使用MySQL企业版的Docker镜像,需要订阅。订阅采用自带许可证模式(Bring Your Own License model)。
在单独的步骤中下载服务器镜像并非绝对必要;然而,在创建Docker容器之前执行此步骤可确保本地镜像是最新的。要从Oracle容器注册表(OCR)下载MySQL社区版镜像,请运行以下命令:
docker pull container-registry.oracle.com/mysql/community-server:tag
标签(tag)是您想要拉取的镜像版本的标签(例如,5.7、8.0或者latest)。如果省略了`:tag`,将使用latest标签,并且将下载MySQL社区服务器最新通用版本(GA)的镜像。
要从OCR下载MySQL企业版镜像,您需要首先在OCR上接受许可协议,并使用您的Docker客户端登录到容器仓库。请按照以下步骤进行:
- 访问OCR网站 https://container-registry.oracle.com/ 并选择MySQL。
- 在MySQL仓库列表下,选择enterprise-server。
- 如果您尚未登录OCR,请单击页面右侧的“登录”按钮,然后在提示时输入您的Oracle帐户凭据。
- 按照页面右侧的说明接受许可协议。
- 使用您的容器客户端登录到OCR,例如使用docker login命令:
# docker login container-registry.oracle.com
Username: Oracle-Account-ID
Password: password
Login successful.
使用以下命令从OCR下载MySQL企业版的Docker镜像:
docker pull container-registry.oracle.com/mysql/enterprise-server:tag
要从My Oracle Support网站下载MySQL企业版镜像,请访问该网站,登录您的Oracle账户,然后在登陆页面执行以下步骤:
• 选择“Patches and Updates(补丁和更新)”标签页。
• 转到“Patch Search(补丁搜索)”区域,并在“Search(搜索)”标签下切换到“Product or Family(产品或家族)(Advanced)(高级)”子标签。
• 在“Product(产品)”字段输入“MySQL Server”,并在“Release(发布版本)”字段输入所需的版本号。
• 使用附加过滤器的下拉菜单选择“Description—contains(描述—包含)”,并在文本框中输入“Docker”。
• 点击“Search”(搜索)按钮,从结果列表中选择您想要的版本,然后点击“Download”(下载)按钮。
• 在出现的“File Download”(文件下载)对话框中,点击并下载Docker镜像的.zip文件。
解压下载的 .zip 压缩包以获取其中的 tarball (mysql-enterprise-server-version.tar),然后运行以下命令加载镜像:
docker load -i mysql-enterprise-server-version.tar
您可以使用以下命令列出已下载的 Docker 镜像:
$> docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
container-registry.oracle.com/mysql/community-server latest 1d9c2219ff69 2 months ago 496MB
启动 MySQL 服务器实例
要为 MySQL Server 启动一个新的 Docker 容器,请使用以下命令:
docker run --name=container_name --restart on-failure -d image_name:tag
image_name 是用于启动容器的镜像的名称;
--name 选项用于为您的服务器容器提供自定义名称,是可选的;如果没有提供容器名称,则会生成一个随机名称。
--restart 选项用于配置容器的重启策略;它应设置为值 on-failure,以启用对服务器在客户端会话中重新启动的支持(例如,当客户端执行 RESTART 语句或在配置 InnoDB 集群实例时发生)。启用重启支持后,在客户端会话中发出重启会导致服务器和容器停止然后重新启动。支持服务器重启可用于 MySQL 8.0.21 及更高版本。
例如,要为 MySQL Community Server 启动一个新的 Docker 容器,请使用以下命令:
docker run --name=mysql1 --restart on-failure -d container-registry.oracle.com/mysql/community-server:lates
要使用从 OCR 下载的 Docker 镜像启动 MySQL Enterprise Server 的新 Docker 容器,请使用以下命令:
docker run --name=mysql1 --restart on-failure -d container-registry.oracle.com/mysql/enterprise-server:late
要使用从My Oracle Support下载的Docker镜像启动新的MySQL Enterprise Server Docker容器,请使用此命令:
docker run --name=mysql1 --restart on-failure -d mysql/enterprise-server:latest
如果指定名称和标签的Docker镜像尚未通过先前的docker pull或docker run命令下载,现在会下载该镜像。容器的初始化开始,并且当您运行docker ps命令时,该容器将出现在正在运行的容器列表中。例如:
$> docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4cd4129b3211 container-registry.oracle.com/mysql/community-server:latest "/entrypoint.sh mysq…" 8 sec
容器初始化可能需要一些时间。当服务器准备就绪可以使用时,运行docker ps命令输出中容器的状态将从(health: starting)更改为(healthy)。
上面使用的docker run命令中的-d选项使容器在后台运行。使用此命令来监视容器的输出:
docker logs mysql1
一旦初始化完成,命令的输出将包含为root用户生成的随机密码;例如,使用以下命令检查密码:
$> docker logs mysql1 2>&1 | grep GENERATED
GENERATED ROOT PASSWORD: Axegh3kAJyDLaRuBemecis&EShOs
从容器内部连接到MySQL服务器
一旦服务器准备就绪,您可以在刚启动的MySQL服务器容器内运行mysql客户端,并连接到MySQL服务器。使用docker exec -it命令在您启动的Docker容器中启动一个mysql客户端,示例如下:
docker exec -it mysql1 mysql -uroot -p
当要求输入时,请输入生成的root密码(请参阅上述“启动MySQL服务器实例”的最后一步,找到密码方法)。由于MYSQL_ONETIME_PASSWORD选项默认为true,在您将mysql客户端连接到服务器之后,必须通过执行以下语句重新设置服务器的root密码:
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'password';
将password替换为您选择的密码。一旦密码重置完成,服务器就准备好供使用了。
容器shell访问
要访问MySQL服务器容器的shell,请使用docker exec -it命令在容器内启动一个bash 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 publ
停止和删除MySQL容器
要停止我们创建的MySQL服务器容器,请使用以下命令:
docker stop mysql1
docker stop向mysqld进程发送一个SIGTERM信号,使服务器能够优雅地关闭。
还要注意,当容器的主要进程(在MySQL服务器容器的情况下是mysqld)停止时,Docker容器会自动停止。
要再次启动MySQL服务器容器:
docker start mysql1
要通过一个命令停止并重新启动MySQL服务器容器:
docker restart mysql1
要删除MySQL容器,首先停止它,然后使用docker rm命令:
docker stop mysql1
docker rm mysql1
如果您希望同时删除服务器数据目录的Docker卷,请在docker rm命令中添加v选项。
升级MySQL服务器容器
重要事项:
- 在对MySQL进行任何升级之前备份您的数据库。
- 本节中的说明要求将服务器的数据和配置持久化到主机上。
按照以下步骤升级Docker中的MySQL 5.7到8.0版本:
• 停止MySQL 5.7服务器(在此示例中容器名称为mysql57):
docker stop mysql57
• 下载MySQL 8.0服务器的Docker镜像。确保使用适用于MySQL 8.0的正确标签。
• 使用在主机上持久保存的旧服务器数据和配置启动一个新的MySQL 8.0 Docker容器(在本示例中命名为mysql80),方法是将其绑定挂载。对于MySQL Community Server,请运行以下命令:
docker run --name=mysql80 \
--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 container-registry.oracle.com/mysql/community-server:8.0
如有需要,请将 container-registry.oracle.com/mysql/community-server 调整为正确的镜像名称,例如,使用 container-registry.oracle.com/mysql/enterprise-server 替换MySQL企业版的镜像,这些镜像可以从OCR下载,或使用 mysql/enterprise-server 从我的Oracle支持下载MySQL企业版镜像。
• 等待服务器完成启动。您可以使用 docker ps 命令检查服务器的状态。
对于在8.0系列中进行升级(即从8.0.x版本升级到8.0.y版本),请按照同样的步骤操作:停止原始容器,然后使用更新的镜像在旧服务器数据和配置上启动一个新的容器。如果在启动原始容器时使用了8.0或最新标签,并且现在有一个您想要升级的新的MySQL 8.0版本,您必须首先使用以下命令拉取新版本的镜像:
docker pull container-registry.oracle.com/mysql/community-server:8.0
您可以通过在旧数据和配置上使用相同标签启动一个新容器来进行升级。
docker run --name=mysql80new \
--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 container-registry.oracle.com/mysql/community-server:8.0