您的位置:

Docker启动MySQL详解

一、Docker启动MySQL容器

在使用Docker启动MySQL之前,我们需要先检查本地是否已经有MySQL镜像,如果没有,需先下载。我们可以通过以下命令来检查本地是否已有MySQL镜像:

docker images | grep mysql

如果本地没有MySQL镜像,我们可以再终端中通过以下命令下载MySQL镜像:

docker pull mysql

下载完成后,我们可以通过以下命令启动MySQL容器:

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

这里解释一下各个参数的意义:

  • --name mysql 指定容器名称为mysql,可以根据实际需要进行修改;
  • -p 3306:3306 端口映射,将容器中MySQL的3306端口映射到主机的3306端口;
  • -e MYSQL_ROOT_PASSWORD=123456 设置MySQL的root用户的密码为123456;
  • -d mysql 后台运行mysql镜像。

启动后,我们可以通过以下命令检查容器是否已经启动:

docker ps -a | grep mysql

如果返回结果中能看到mysql容器,说明已经成功启动。

二、Docker访问不到MySQL

在使用Docker启动MySQL容器时,可能会遇到Docker容器无法访问MySQL的情况。这时我们需要检查以下两方面:

  • 是否设置了正确的端口映射;
  • MySQL是否启动。

如果端口映射正确,可以通过以下命令检查MySQL是否正常启动:

docker logs mysql | grep password

如果返回类似于以下结果,则说明MySQL已正常启动:

2021-07-21T02:27:06.427867Z 1 [System] [MY-011011] [Server] mysqld: ready for connections. Version: '8.0.11'  socket: '/tmp/mysql.sock'  port: 3306  MySQL Community Server - GPL.
2021-07-21T02:27:06.460330Z 1 [System] [MY-013172] [Server] Received SHUTDOWN from user root. Shutting down mysqld (Version: 8.0.11).
2021-07-21T02:27:09.288095Z 0 [System] [MY-010910] [Server] /usr/sbin/mysqld: Shutdown complete (mysqld 8.0.11)  MySQL Community Server - GPL.

三、Docker启动MySQL 8.0

如果需要启动MySQL 8.0版本,可以通过以下命令启动:

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

四、Docker启动MySQL立马停止

有时候我们启动MySQL容器后会立即停止,这很有可能是因为MySQL配置文件没有正确设置。

我们可以通过以下命令来启动MySQL,并指定一个本地的MySQL配置文件:

docker run --name mysql -p 3306:3306 -v /your-path/my.cnf:/etc/mysql/my.cnf -e MYSQL_ROOT_PASSWORD=123456 -d mysql

通过该命令,我们将本地的一个my.cnf文件挂载到了容器的/etc/mysql/my.cnf路径下,这样就可以保证MySQL的配置文件正确设置。

五、Docker启动MySQL镜像命令

以下是常用的启动MySQL镜像命令:

# 拉取MySQL镜像
docker pull mysql

# 启动MySQL 5.7
docker run -d --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7

# 启动MySQL 8.0
docker run -d --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql:8.0

# 启动MySQL 5.7 并指定数据存放路径
docker run -d --name mysql \
    -v /your-path/mysql/data:/var/lib/mysql \
    -p 3306:3306 \
    -e MYSQL_ROOT_PASSWORD=123456 \
    mysql:5.7

# 启动MySQL 8.0 并指定数据存放路径
docker run -d --name mysql \
    -v /your-path/mysql/data:/var/lib/mysql \
    -p 3306:3306 \
    -e MYSQL_ROOT_PASSWORD=123456 \
    mysql:8.0

六、Docker启动MySQL容器时添加地址

有时候我们的MySQL需要绑定到指定的IP地址上,这时我们可以通过以下命令启动MySQL容器:

docker run --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql --bind-address=0.0.0.0

这里通过--bind-address=0.0.0.0参数绑定MySQL的IP地址为0.0.0.0,表示MySQL绑定所有的IP地址。

七、Docker启动MySQL失败

如果启动MySQL失败,我们可以先删除已有的容器,然后再重新启动,可以通过以下命令删除容器:

docker rm -f mysql

然后再按照前面的步骤重新启动即可。

八、Docker启动MySQL指定配置文件

有时候我们需要在启动MySQL容器时指定一个配置文件,这时我们可以通过以下命令启动MySQL容器:

docker run --name mysql \
    -v /your-path/my.cnf:/etc/mysql/my.cnf \
    -p 3306:3306 \
    -e MYSQL_ROOT_PASSWORD=123456 \
    -d mysql --defaults-file=/etc/mysql/my.cnf

这里通过-v /your-path/my.cnf:/etc/mysql/my.cnf参数指定了MySQL的配置文件路径,通过--defaults-file=/etc/mysql/my.cnf参数指定配置文件。

九、Docker启动MySQL容器没有权限

有时候我们在启动MySQL容器时可能会出现权限问题,这时我们可以通过以下命令启动容器,并将MySQL数据目录和/config目录权限都设置为777:

docker run --name mysql \
    -p 3306:3306 \
    -e MYSQL_ROOT_PASSWORD=123456 \
    -v /your-path/data:/var/lib/mysql \
    -v /your-path/config/mysql:/etc/mysql/conf.d \
    -v /your-path/logs/mysql:/logs/mysql \
    -d mysql

# 设置数据目录和/config目录权限为777
docker exec mysql chmod 777 -R /var/lib/mysql
docker exec mysql chmod 777 -R /etc/mysql/conf.d

这里我们通过docker exec命令进入到容器中,然后通过chmod命令设置目录权限。

总结

本文从多个方面详细阐述了Docker启动MySQL的过程,包括:启动MySQL容器、访问不到MySQL、启动MySQL 8.0、启动MySQL立马停止、指定MySQL配置文件、指定MySQL地址和启动MySQL失败等问题的解决方案。