使用Docker容器在Linux上部署MySQL

使用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

  • 23
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值