如何在Docker容器中运行MySQL Server 8

时间:2020-01-09 10:34:20  来源:igfitidea点击:

了解如何在Docker容器中部署MySQL Server 8.

使用限制进行资源管理

高性能数据库会在RAM中存储尽可能多的数据。这样做的原因是访问RAM的速度比从服务器中任何其他可用存储的速度快。因此,我们可以在其中放置的数据越多,访问速度就越快。

我们可能会在运行其他容器的服务器上运行数据库容器。为了防止其他容器使关键RAM耗尽数据库服务器,我们可以授予MySQL更高的优先级。

为了更好地了解使用Docker管理系统资源,请阅读我们的文章以限制Docker容器的内存和CPU。

使用卷的持久数据

关系数据库需要其数据是持久的。另一方面,Docker默认以短暂状态运行容器,这意味着永远不会保留数据。一旦容器停止,它就会丢失。

Docker提供了卷来使数据持久化。例如,我们可以将数据存储在主机文件系统中,而不是将卷数据存储在丢失的容器本身中。

运行MySQL Server 8

在开始之前,我们将需要MySQL Server映像。立即下拉最新的官方MySQL Server映像。

docker pull mysql/mysql-server

通过列出可用的图像来验证图像是否已被下拉。

docker images

让我们启动没有任何选项的服务器。

docker run -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=mypassword mysql/mysql-server

太好了,我们现在应该有了一个运行中的MySQL服务器容器,可以使用root密码mypassword访问。不幸的是,数据是临时的,一旦容器停止,数据将丢失我们创建的任何数据库。

让我们从装载了MySQL数据库的卷的容器开始。

docker run -d -p 3306:3306 -v /var/lib/mysql -e MYSQL_ROOT_PASSWORD=mypassword

在容器中添加了一个作为/ var / lib / mysql的卷后,MySQL目录存储了数据库文件,我们的数据将不会持久。任何安装了相同卷的新MySQL服务器容器都可以访问我们以前的数据。

使用上面的卷示例,Docker将已安装的卷数据存储在其自己的本地卷存储中。如果我们希望将卷映射到特定目录,则需要使用volume标志设置主机路径和容器路径。

在这里,我们将使用从/ data / mysql挂载的卷运行Docker服务器文件系统上的MySQL服务器容器。

创建数据卷目录。

mkdir -p /data/mysql

启动一个新的MySQL服务器容器,该容器将装入我们的新目录。

docker run -d -p 3306:3306 -v /data/mysql:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=mypassword mysql/mysql-server

容器启动时,检查数据目录的内容。我们应该看到在运行MySQL的服务器上的/ var / lib / mysql中通常会看到的内容。

MySQL Server 8身份验证插件问题

随着MySQL 8的推出,一个新的身份验证插件。即使运行最新的客户端,这也可能导致身份验证问题,这很奇怪。值得庆幸的是,Oracle在启动容器时允许我们使用较旧的身份验证插件。

如果我们无法登录MySQL Server,请检查日志

docker logs <container id>

我们可能会注意到以下错误。这意味着我们需要告诉MySQL Server用户使用较旧的身份验证插件。

docker run -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=password mysql/mysql-server --default_authentication_plugin=mysql_native_password