阅读 213

Docker部署MySQL服务

安装部署环境

  • Ubuntu 20.04.1 LTS

  • Docker 20.10.11

  • MySQL latest(8.0.27)

下载镜像

从仓库中拉取mysql镜像,如果没加标签的话,默认获取最新版本(latest)

$ docker pull mysql:tag 复制代码

简单启动 MySQL服务器

启动 MySQL 实例很简单:

$ docker run --name some-mysql \ -e MYSQL_ROOT_PASSWORD='my-secret-pw' \ -d mysql:tag 复制代码

  • some-mysql:分配给容器的名称

  • root:为root用户设置的密码

  • tagmysql镜像标签

挂载数据卷以及配置文件启动

查找配置文件位置

不同版本部署的 MySQL 内,可能文件路径不一致,如 /etc/mysql/my.cnf/etc/mysql/conf.d 或者 /etc/mysql/mysql.conf.d等。运行以下命令查找mysql配置文件my.cnf的位置:

$ docker run --rm mysql mysql --help | grep my.cnf 复制代码

得到结果:

                      order of preference, my.cnf, $MYSQL_TCP_PORT, /etc/my.cnf /etc/mysql/my.cnf ~/.my.cnf 复制代码

意思是按照/etc/my.cnf/etc/mysql/my.cnf~/.my.cnf路径按优先排序。

依次访问上述路径:

$ docker run --rm mysql cat /etc/my.cnf cat: /etc/my.cnf: No such file or directory $ docker run --rm mysql cat /etc/mysql/my.cnf # Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved. # # This program is free software; you can redistribute it and/or modify ... 复制代码

可以得到镜像中mysql配置文件路径为/etc/mysql/my.cnf

查找数据文件位置

运行以下命令查看mysql镜像信息:

$ docker inspect mysql 复制代码

得到结果:

...             "Volumes": {                 "/var/lib/mysql": {}             }, ... 复制代码

可以得到mysql挂载的数据文件路径为/var/lib/mysql

创建本地路径

在物理机上,创建指定数据和配置文件的挂载路径(须在docker进程有写权限的目录下,如/home/docker

$ mkdir -p /home/docker/mysql/conf && mkdir -p /home/docker/mysql/datadir 复制代码

将容器的mysql默认配置文件/etc/mysql/my.cnf拷贝出来

$ CID=`docker run -d mysql` \ && docker cp $CID:/etc/mysql/my.cnf /home/docker/mysql/conf \ && docker stop $CID \ && docker rm $CID 复制代码

挂载启动MySQL

知道了mysql配置文件和数据文件位置,就可以挂载启动mysql服务了

$ docker run --name some-mysql \ -p 3306:3306 \ -e MYSQL_ROOT_PASSWORD=my-secret-pw \ -v /home/docker/mysql/conf/my.cnf:/etc/my.cnf \ -v /home/docker/mysql/datadir:/var/lib/mysql \ --restart=on-failure:3 \ -d mysql 复制代码

  • --name:为容器指定一个名字

  • -p:指定端口映射,格式为:主机(宿主)端口:容器端口

  • -e:设置环境变量

  • --restart=on-failure:3:是指容器在未来出现异常退出(退出码非0)的情况下循环重启3次

  • --mount:目录挂载

  • -d:后台运行容器,并返回容器 id

MySQL 命令行客户端

命令启动另一个mysql容器实例进入命令行客户端:

$ docker run -it --rm mysql mysql \ -hsome.mysql.host -usome-mysql-user -p 复制代码

查看MySQL日志

$ docker logs some-mysql 复制代码

环境变量说明

在启动mysql镜像时,可以通过在docker run命令行中传递一个或多个环境变量来调整 MySQL 实例的配置。请注意,如果您使用已经包含数据库的数据目录启动容器,则以下任何变量都不会产生任何影响:在容器启动时,任何预先存在的数据库将始终保持不变。

MYSQL_ROOT_PASSWORD

此变量是必需的,它指定将为 MySQLroot超级用户帐户设置的密码。在上面的例子中,它被设置为root

MYSQL_DATABASE

此变量是可选的,允许您指定要在映像启动时创建的数据库的名称。如果提供了用户/密码(见下文),则该用户将被授予对该数据库的超级用户访问权限(对应于GRANT ALL)。

MYSQL_USER, MYSQL_PASSWORD

这些变量是可选的,结合使用来创建新用户和设置该用户的密码。该用户将被授予对MYSQL_DATABASE变量指定的数据库的超级用户权限(见上文)。

MYSQL_ALLOW_EMPTY_PASSWORD

这是一个可选变量。设置为非空值,例如yes,以允许使用 root 用户的空白密码启动容器。

MYSQL_RANDOM_ROOT_PASSWORD

这是一个可选变量。设置为非空值,如yes,为 root 用户生成随机初始密码(使用pwgen)。生成的 root 密码将打印到控制台 ( GENERATED ROOT PASSWORD: .....)。

MYSQL_ONETIME_PASSWORD

初始化完成后,将root(不是MYSQL_USER! 中指定的用户)用户设置为过期,强制在首次登录时更改密码。任何非空值都将激活此设置。注意:此功能仅在 MySQL 5.6+ 上受支持。在 MySQL 5.5 上使用此选项将在初始化期间引发适当的错误。

MYSQL_INITDB_SKIP_TZINFO

默认情况下,入口点脚本会自动加载CONVERT_TZ()函数所需的时区数据。如果不需要,任何非空值都会禁用时区加载。

备份和恢复

创建数据库转储

启动mysql镜像使用mysqldump命令备份:

$ docker exec some-mysql sh -c 'exec mysqldump --all-databases -uroot -p"$MYSQL_ROOT_PASSWORD"' > /some/path/on/your/host/all-databases.sql 复制代码

从转储文件中恢复数据

启动mysql镜像执行.sql文件

$ docker exec -i some-mysql sh -c 'exec mysql -uroot -p"$MYSQL_ROOT_PASSWORD"' < /some/path/on/you


作者:用户4341695334892
链接:https://juejin.cn/post/7035388660283342878

 伪原创工具 SEO网站优化  https://www.237it.com/


文章分类
代码人生
文章标签
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐