使用 Docker 在 Linux 上部署 MySQL

首先需要在系统上安装docker,参见https://docs.docker.com/engine/installation/。

注意:需要使用sudo运行docker命令,或创建docker用户组,然后向其中添加运行docker命令的用户。

注意:mysql团队维护的MySQL Docker镜像是专门为linux平台构建的。其他平台不受支持。

下载MySQL Docker镜像

不一定需要单独下载服务器镜像;但在创建docker容器之前执行这一步可以确保本地镜像是最新的。运行以下命令,下载MySQL社区版镜像:

docker pull mysql/mysql-server:tag

tag是下载的映像版本(例如,5.5,5.6,5.7,8.0, orlatest)。省略:tag,则使用最新的版本。

使用以下命令列出下载的docker映像:

docker images

REPOSITORY TAG IMAGE ID CREATED SIZE

mysql/mysql-server latest 3157d7f55f8d 4 weeks ago 241MB

执行以下命令从Oracle Container Registry (OCR)下载MySQL社区版镜像:

docker pull container-registry.oracle.com/mysql/mysql-server:tag

启动mysql服务器实例

执行以下命令为MySQL服务器启动新的Docker容器:

docker run --name=container_name --restart on-failure -d image_name:tag

可以用docker images命令来获取映像名称。–name是可选项,用来提供容器的名称,如果没有此选项,就会随机产生一个名字。

–restart选项为容器配置重启策略;一般设置为on-failure值,支持在客户端会话中重启服务器(例如,当客户端执行RESTART语句或在配置InnoDB集群实例时会发生这种情况)。启用重启支持后,在客户端会话中发出重启命令会使服务器和容器停止然后启动。 MySQL 8.0.21和更高版本提供了对服务器重启的支持。

例如:为MySQL Community Server启动一个新的Docker 容器,运行以下命令:

docker run --name=mysql1 -d mysql/mysql-server:8.0

为MySQL EnterpriseServer启动一个新的Docker 容器,运行以下命令:

docker run --name=mysql1 -d mysql/enterprise-server:8.0

如果指定名字和tag的Docker映像没有被docker pulldocker run命令下载,现在就会下载。容器初始化开始,当你运行docker ps命令时,容器出现在容器运行列表中。

容器初始化可能需要一段时间。当服务器准备好使用时,docker ps命令输出中,容器的STATUS从(health: starting)变为(health)。

docker run命令使用的-d选项,是容器在后台运行,使用下面的命令监控容器输出:

docker logs mysql1

初始化完成后,这个命令的输出将包含为root用户生成的随机密码;例如,使用以下命令检查密码:

docker logs mysql1 2>&1 | grep GENERATED

GENERATED ROOT PASSWORD: Axegh3kAJyDLaRuBemecis&EShOs

从容器内连接到mysql服务器

服务器一旦准备好,就可以在启动的MySQL Server容器中运行mysql客户端,并将其连接到MySQL Server。使用docker exec -it命令在已经启动的Docker容器内启动mysql客户端,如下所示:

docker exec -it mysql1 mysql -uroot –p

因为默认情况下MYSQL_ONETIME_PASSWORD选项为true,所以在将mysql客户端连接到服务器后,必须使用以下语句重置服务器root密码:

ALTER USER ‘root’@‘localhost’ IDENTIFIED BY ‘password’;

容器shell入口

要让shell访问MySQL Server容器,使用docker exec -it命令在容器内启动bash shell:

docker exec -it mysql1 bash

您可以在容器中运行linux命令。例如,要查看容器内服务器数据目录中的内容,请使用以下命令:

ls /var/lib/mysql

停止和删除mysql容器

使用以下命令停止创建的MySQL Server容器:

docker stop mysql1

docker stop向mysqld进程发送SIGTERM信号,使服务器正常关闭。

当容器的主进程(MySQL Server容器中的MySQL)停止时,docker容器会自动停止。

再次启动MySQL Server容器:

docker start mysql1

重启MySQL Server容器:

docker restart mysql1

要删除mysql容器,则先停止,然后使用docker rm命令删除:

docker stop mysql1

docker rm mysql1

将-v选项添加到docker rm命令中,则同时删除服务器数据目录的docker卷。

MySQL Server容器升级

升级mysql以前,必须对mysql进行备份,备份见MYSQL的备份及恢复。本节中的说明要求服务器的数据和配置已经保存在主机上。

按照以下步骤将mysql 5.7的docker安装升级到8.0:

  • 停止mysql 5.7服务器(本例中容器名为mysql57):

docker stop mysql57

  • 下载MySQL 8.0 Server Docker映像;
  • 使用主机上保存的旧服务器数据和配置(如果需要,进行适当的修改)启动一个新的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 mysql/mysql-server:8.0

如果需要,将mysql/mysql-server调整到正确的库名称。

  • 等待服务器完成启动。可以使用docker ps命令检查服务器的状态
  • 对于mysql 8.0.15和更低版本,则在MySQL 8.0 Server容器中运行mysql_upgrade实用程序(mysql 8.0.16和更高版本不需要):

docker exec -it mysql80 mysql_upgrade -uroot –p

出现提示时,输入旧mysql 5.7服务器的root密码。

  • 通过重新启动mysql 8.0服务器容器来完成升级:

docker restart mysql80

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值