如何在Docker上运行MySQL

时间:2020-07-27 12:58:48  来源:igfitidea点击:

MySQL是最常用的开源关系数据库管理系统。
在本教程中,我们将学习如何在Docker引擎上运行MySQLDocker。

  • 下载Docker MySQL镜像。
  • 启动新的MySQL容器。
  • Docker MySQL环境变量。
  • 与另一个Docker容器的链接。
  • 启动MySQL容器,远程访问。
  • 使用自定义MySQL配置文件。
  • 使用自定义数据目录。
  • 来自主机的备份数据库。

下载docker mysql镜像

要运行MySQL容器,我们需要一个MySQL镜像。
我们可以使用Docker Lifl命令获取最新版本的MySQL镜像。

docker pull mysql:latest

或者我们可以下载特定版本的MySQL Docker镜像,下面的命令将从Docker MySQL存储库下载“MySQL 5.7”镜像。

docker pull mysql:5.7

找到可用版本转到Docker集线器并搜索MySQL。

启动新的MySQL容器

Docker MySQL容器非常直接。
启动新服务器实例非常简单。

以下示例将从“MySQL 5.7”镜像中启动名为“mysql_server”的新MySQL实例。

docker run -d --name mysql_server -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7

请注意,最重要的选项是MySQL_Root_Password,我们还使用-d选项将容器运行作为后台进程。

我们可以使用Docker Exec命令获取与MySQL实例的交互式shell会话。

docker exec -it mysql_server bash

要从主机获取到MySQL控制台的直接交互式会话,请键入:

docker exec -it mysql_server mysql -uroot -p

Docker MySQL环境变量

当我们启动一个新实例时,我们可以通过使用docker运行命令传递一个或者多个环境变量来调整MySQL实例的配置。

下表显示了与Docker MySQL一起使用的环境变量。

  • mysql_root_password - 设置mysql root用户的密码。这个变量是强制性的。
  • mysql_user,mysql_password - 创建新的MySQL用户并设置用户密码。这是可选的。
  • mysql_database - 在启动时创建一个新数据库。这是可选的。如果创建用户,则将授予用户对数据库的超级用户访问权限。
  • mysql_allow_empty_password - 如果设置为“是”,则新容器可以以空的根密码开头。
  • mysql_random_root_password - 如果设置为“是”,将创建root用户的随机初始密码。

在以下示例中,我们创建一个新的容器,其中包含一个名为“test_db”的新MySQL数据库。

docker run -d --name mysql_server -e MYSQL_ROOT_PASSWORD=123456 -e MYSQL_DATABASE=test_db  mysql:5.7

使用新的MySQL用户启动一个容器:

docker run -d --name mysql_server -e MYSQL_ROOT_PASSWORD=123456 -e MYSQL_DATABASE=test_db -e MYSQL_USER=myuser -e MYSQL_PASSWORD=mypass  mysql:5.7

使用空root密码启动MySQL容器:

docker run -d --name mysql_server -e MYSQL_ALLOW_EMPTY_PASSWORD="yes" -e MYSQL_ROOT_PASSWORD="" mysql:5.7

与另一个Docker容器的链接

通常,我们需要将MySQL实例与其他容器链接。
例如,以下命令将启动新的Apache Httpd容器,其中包含一个名为“mysql_server”的MySQL实例的链接。

docker run -d --name apache-web --link mysql_server:mysql httpd:latest

Apache容器现在可以访问MySQL容器中的MySQL服务器。
连接到MySQL Server时,MySQL主机应为MySQL容器的名称或者ID。

mysql -p -h mysql_server

使用远程访问启动MySQL容器

为了允许远程访问MySQL容器,我们需要使用容器端口3306映射主机端口3306,我们创建新实例时。

docker run -d -p 3306:3306 --name mysql_server -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7

从主机中可以使用127.0.0.1作为MySQL主机访问MySQL控制台。

mysql -p -h 127.0.0.1

请注意,在创建容器时,应完成端口映射。

使用自定义MySQL配置文件

启动配置文件是/etc/mysql/my.cnf文件,该文件依次包括以/etc/mysql/conf.d或者/etc/mysql/mysql.conf.d目录中找到的任何文件。
CNF延期。

当我们启动一个新的容器时,我们可以用主机上的目录替换配置目录。
例如,在主机上创建一个名为/var/config的目录。

mkdir /var/config

然后在/var/config目录中创建mysqld.cnf文件,并将任何MySQL配置添加到MySQLD.CNF文件中。

touch /var/config/mysqld.cnf

现在我们可以将/var/config目录挂载为mysql容器中的/etc/mysql/mysql.conf.d。

docker run -d --name mysql_server -v /var/config:/etc/mysql/mysql.conf.d -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7

根据上面的示例,我们使用-v标志替换使用local/var/config目录的/etc/mysql/mysql.conf.d目录。

使用自定义数据目录

同样的方式我们还可以从主机安装MySQL数据目录。
docker mysql上的默认数据目录是“/var/lib/mysql”。

首先,在主机上创建数据目录:

mkdir -p /mysql/data

然后使用本地数据目录启动服务器实例:

docker run -d --name mysql_server -v /mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7

备份来自主机的数据库

使用docker exec命令,我们可以从主机创建数据库转储。

以下命令将从“mysql_server”实例转储“example_db”数据库。

docker exec mysql_server sh -c 'exec mysqldump -u root -p"$MYSQL_ROOT_PASSWORD" example_db' > example_db.sql

以下命令将从MySQL容器中转储所有数据库。

docker exec mysql_server sh -c 'exec mysqldump --all-databases -u root -p"$MYSQL_ROOT_PASSWORD"' > all_databases.sql