技术分享 | 使用 Docker 安装 MySQL

做者:Peter Zaitsev
翻译:管长龙
原文: https://www.percona.com/blog/...

在工做中,我常常须要安装特定版本的 MySQL、MariaDB 或 Percona 来运行一些实验,例如:检查版本差别或是提供测试说明。此博客系列将阐述如何使用 Docker 安装 MySQL、MariaDB 或 Percona。这篇文章是第一篇,重点是 MySQL。html

Docker 的优势在于它能够很是轻松地安装最新的 MySQL 版本以及任何其余版本,但每每与典型的生产安装不匹配。当您须要简单的单个实例时,Docker 的确很方便。若是您正在研究一些与复制相关的行为,那么则不必定适合。mysql

这些说明皆在快速、轻松地运行测试实例的状况下。不适用于生产部署。如下内容所假定已安装 Docker。linux

首先,您应该知道只有两个“官方” MySQL Docker 存储库。其中之一由 Docker 团队维护,可经过一个简单的 docker 命令 mysql:latest 运行起来。另外一个由 Oracle 的 MySQL 团队维护,语法:sql

docker run mysql / mysql-server:latest

说明:语法中的 latest 是 tag 值,表示默认安装库中的最新版本docker

在如下示例中,咱们将使用 MySQL 团队的 Docker 映像,尽管 Docker 团队的工做方式与此相似。安全

使用 Docker 安装最新版本的 MySQL

docker run --name mysql-latest  \
-p 3306:3306 -p 33060:33060  \
-e MYSQL_ROOT_HOST='%' -e MYSQL_ROOT_PASSWORD='strongpassword'   \
-d mysql/mysql-server:latest

这将启动最新版本的 MySQL 实例,可使用指定的 root 密码从任何地方远程访问该实例。这很容易测试,但不是好的安全习惯(这就是为何它不是默认值)的缘由。服务器

链接到 MySQL Server Docker 容器

使用 Docker 安装意味着您没法直接在主机上得到任何工具,实用程序或库,所以您能够单独安装它们,从远程主机访问建立的实例,或使用 Docker 映像附带的命令行。工具

经过 Docker 启动 MySQL 命令行客户端:

docker exec -it mysql-latest mysql -uroot -pstrongpassword

使用 Docker 启动 MySQL Shell:

docker exec -it mysql-latest mysqlsh -uroot -pstrongpassword

在 Docker 容器中管理 MySQL 服务器

当您要中止 MySQL Server Docker 容器运行时:测试

docker stop mysql-latest

若是要从新启动已中止的 MySQL Docker 容器,则不该尝试使用 docker run 从新启动它。相反,您应该使用:命令行

docker start mysql-latest

若是出现错误,例如,若是容器未启动,则可使用如下命令访问其日志:

docker logs mysql-latest

若是要从头开始从新建立一个新的 Docker 容器,能够运行:

docker stop mysql-latest
docker rm mysql-latest

以后再次执行 docker run 命令。

将命令行选项传给 Docker 容器中的 MySQL Server

若是要将某些命令行选项传给 MySQL Server,能够采用如下方式:

docker run --name mysql-latest  \
-p 3306:3306 -p 33060:33060  \
-e MYSQL_ROOT_HOST='%' -e MYSQL_ROOT_PASSWORD='strongpassword'   \
-d mysql/mysql-server:latest \
--innodb_buffer_pool_size=256M \
--innodb_flush_method=O_DIRECT \

在 Docker 中运行指定版本的 MySQL 服务器

若是想在 Docker 容器中运行某版本的 MySQL,这很简单。您可使用 Docker Image Tag 选择想要的版本,并将 Name 更改成其余名称,以免名称冲突:

docker run --name mysql-8.0.17  \
-p 3306:3306 -p 33060:33060  \
-e MYSQL_ROOT_HOST='%' -e MYSQL_ROOT_PASSWORD='strongpassword'   \
-d mysql/mysql-server:8.0.17

这将在 Docker 容器中启动 MySQL 8.0.17。

docker run --name mysql-5.7  \
-p 3306:3306 -p 33060:33060  \
-e MYSQL_ROOT_HOST='%' -e MYSQL_ROOT_PASSWORD='strongpassword'   \
-d mysql/mysql-server:5.7

这将在 Docker 中启动最新的 MySQL 5.7。

在 Docker 中同时运行多版本的 MySQL 服务器

同时在 Docker 中运行多版本的 MySQL ,潜在问题是 TCP 端口冲突。若是您不从外部访问 Docker 容器,而只运行同一容器中包含的程序,则能够删除端口映射(-p option),而后能够运行多个容器:

docker run --name mysql-latest  \
-e MYSQL_ROOT_HOST='%' -e MYSQL_ROOT_PASSWORD='strongpassword'   \
-d mysql/mysql-server:latest
 
docker run --name mysql-8.0.17  \
-e MYSQL_ROOT_HOST='%' -e MYSQL_ROOT_PASSWORD='strongpassword'   \
-d mysql/mysql-server:8.0.17

在更常见的状况下,当您须要从外部访问 Docker 容器时,您将须要将其映射为使用不一样的外部端口名称。 例如,要在端口 3306/33060 和 MySQL 8.0.17 在 3307/33070 处启动最新的 MySQL 8,咱们可使用:

docker run --name mysql-latest  \
-p 3306:3306 -p 33060:33060  \
-e MYSQL_ROOT_HOST='%' -e MYSQL_ROOT_PASSWORD='strongpassword'   \
-d mysql/mysql-server:latest
  
docker run --name mysql-8.0.17  \
-p 3307:3306 -p 33070:33060  \
-e MYSQL_ROOT_HOST='%' -e MYSQL_ROOT_PASSWORD='strongpassword'   \
-d mysql/mysql-server:8.0.17

若是要在 Docker 上使用 MySQL 进行更复杂的事请,那还有不少事情要考虑。

有关更多信息,请查阅:
https://hub.docker.com/r/mysq...
https://dev.mysql.com/doc/ref...

相关文章
相关标签/搜索