Docker 上运行 MySQL 8

Scroll Down

本篇简单介绍下在 Docker 上运行 MySQL 8,用到的工具如下:

  • 环境:CentOS 7
  • Docker:版本 19.03.4
  • MySql 镜像:版本 8.0.18

1. 下载 MySQL 镜像,以 8.0.18 版本为例。

  各版本可前往 Docker Hub 查看。

docker image pull mysql:8.0.18

2. 创建 MySQL 数据文件和配置文件 目录。

# 宿主机创建 MySQL conf、data 目录
mkdir -p /home/data/docker/mysql/{conf,data}

# 创建一个 MySQL 容器(临时的,只是为了复制文件)
docker run --name mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:8.0.18

# 复制容器中 MySQL data 到宿主机
docker cp mysql:/var/lib/mysql /home/data/docker/mysql/data

# 复制容器中 MySQL 配置文件到宿主机
docker cp mysql:/etc/mysql/my.cnf /home/data/docker/mysql/conf/my.cnf

# 删除临时的 MySQL 容器
docker rm -f mysql

3. 创建运行 MySQL 容器

docker run \
    -p 3306:3306 \
    -e MYSQL_ROOT_PASSWORD=123456 \
    -e TZ=Asia/Shanghai \
    -v /etc/localtime:/etc/localtime:ro \
    -v /home/data/docker/mysql/data/mysql:/var/lib/mysql \
    -v /home/data/docker/mysql/conf/my.cnf:/etc/mysql/my.cnf \
    --name mysql_8.0.18 \
    --privileged=true \
    --restart=always \
    -d mysql:8.0.18

参数说明:

  • -p 3306:3306 容器 3306 端口映射到主机 3306 端口
  • -e MYSQL_ROOT_PASSWORD=123456 指定 MySQL 初始密码
  • -e TZ=Asia/Shanghai 设置容器默认时区
  • -v /etc/localtime:/etc/localtime:ro 设置容器时间与宿主机时间同步
  • -v /home/data/docker/mysql/data/mysql:/var/lib/mysql 将容器 mysql data 目录挂载到宿主机
  • -v /home/data/docker/mysql/conf/my.cnf:/etc/mysql/my.cnf 将容器 mysql 配置文件挂载到宿主机
  • --name mysql_8.0.18 设置容器名称
  • --restart=always Docker 服务启动后,自动启动该容器
  • --privileged=true 让容器中 root 用户拥有 root 权限,默认只有普通用户权限
  • -d 后台运行容器,并返回容器ID
  • mysql:8.0.18 镜像名,不加版本号,会使用最新版本

4. 进入容器修改初始密码,开启远程连接

# 进入容器
docker exec -it mysql_8.0.18 /bin/sh

# 容器内执行,输入初始密码(如果初始密码不可以,不输密码直接敲回车试试)
mysql -u root -p

# 指定数据库
mysql> use mysql;

# 修改初始密码,改变密码验证方式为 mysql_native_password 
mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'P@ssw0rd';

# 修改初始密码,改变密码验证方式为 mysql_native_password 
mysql> ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'P@ssw0rd';

# 如果上面的 sql 出错,执行
mysql> update user set host = '%' where user = 'root';

mysql> FLUSH PRIVILEGES;

# 执行完以上命令,验证一下
mysql> select host,user,plugin from user where user = 'root';
+-----------+------+-----------------------+
| host      | user | plugin                |
+-----------+------+-----------------------+
| %         | root | mysql_native_password |
+-----------+------+-----------------------+

安装完成 ctrl + q + p 退出容器。

5. 如果需要删除 MySQL 容器,执行以下操作。

# 停止并删除 MySQL 容器
docker rm -f mysql_8.0.18

# 删除 MySQL 数据文件和配置文件
rm -rf /home/data/docker/mysql/
鲁ICP备 19052590 号

Copyright © 2020 码动青春

Powered by Halo • Theme by Subtle Galaxy • REFERENCE FROM 寒山

本站运行:

感谢位小伙伴的 次访问

Back to the top