主页
文章
分类
标签
关于
docker安装mysql8.4
发布于: 2025-2-3   更新于: 2025-2-3   收录于: docker , mysql
文章字数: 1241   阅读时间: 3 分钟   阅读量:

前言

实验环境: ubuntu22.04server

镜像的导入与导出,请参考该文章

在线拉取镜像

当我们能直接连接外网时,镜像的拉取就变得非常简单:

1
2
3
4
# 拉取mysql8.4
docker pull mysql:8.4
# 查看镜像
docker imgaes

离线导入镜像

当我们不能直接拉取镜像时,我们先要从一台能访问dockerhub的电脑上拉取,比如我的win11笔记本:

1
2
3
4
# 拉取mysql8.4
docker pull mysql:8.4
# save 镜像
docker save mysql:8.4 -o mysql_images_save.tar

保存好镜像后上传到server上,然后load

1
2
3
4
# 导入镜像
docker load -i mysql_images_save.tar
# 查看镜像
docker imgaes

运行mysql镜像

当我们准备好mysql的镜像后,我们就可以开始创建容器并运行了:

先来创建容器挂载的地方:

1
mkdir -p  ~/mysqldata/{conf,data,log}

然后再conf文件夹下,创建一个my.cnf,内容如下

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
[client]
#设置客户端默认字符集utf8mb4
default-character-set=utf8mb4
[mysql]
#设置服务器默认字符集为utf8mb4
default-character-set=utf8mb4
[mysqld]
#配置服务器的服务号,具备日后需要集群做准备
server-id = 1
#开启MySQL数据库的二进制日志,用于记录用户对数据库的操作SQL语句,具备日后需要集群做准备
log-bin=mysql-bin
#设置清理超过30天的日志,以免日志堆积造过多成服务器内存爆满。2592000秒等于30天的秒数
binlog_expire_logs_seconds = 2592000
#解决MySQL8.0版本GROUP BY问题
sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION'
#允许最大的连接数
max_connections=1000
# 禁用符号链接以防止各种安全风险
symbolic-links=0
# 设置东八区时区
default-time_zone = '+8:00'

创建完成之后,就可以开始启动容器了:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
docker run \
--name mysql_test \
-p 3306:3306 \
--restart unless-stopped \
--privileged=true \
-v ~/mysqldata/mysql/log:/var/log/mysql \
-v ~/mysqldata/mysql/data:/var/lib/mysql \
-v ~/mysqldata/mysql/conf/my.cnf:/etc/mysql/my.cnf \
-e MYSQL_ROOT_PASSWORD=123456 \
-d mysql:8.4\
参数 解释
-d --detach 的缩写,让容器以守护进程模式在后台运行,不占用当前终端的输入输出,方便用户继续在终端执行其他操作
--name mysql 为新创建的容器指定名称为 mysql,便于后续对容器进行管理操作,如停止、重启、查看日志等,无需使用冗长的容器 ID
-p 3306:3306 端口映射参数,将容器内部的 3306 端口映射到宿主机的 3306 端口,使外部客户端能通过宿主机的 IP 地址和 3306 端口连接到容器内的 MySQL 服务
--restart unless-stopped 容器的重启策略,除非用户手动停止容器,否则在 Docker 服务重启、宿主机重启或容器因故障意外退出时,Docker 会自动尝试重新启动该容器,保证 MySQL 服务的高可用性
--privileged=true 赋予容器可以修改宿主文件的权力
-v ~/mysqldata/mysql/log:/var/log/mysql 数据卷挂载,把宿主机用户主目录下的 ~/mysqldata/mysql/log 目录挂载到容器内的 /var/log/mysql 目录,实现容器内 MySQL 日志文件在宿主机的持久化存储,方便查看和管理
-v ~/mysqldata/mysql/data:/var/lib/mysql 数据卷挂载,将宿主机的 ~/mysqldata/mysql/data 目录挂载到容器内的 /var/lib/mysql 目录,/var/lib/mysql 是 MySQL 存储数据文件的位置,确保容器删除或重建时数据不丢失
-v ~/mysqldata/mysql/conf:/etc/mysql 数据卷挂载,把宿主机的 ~/mysqldata/mysql/conf 目录挂载到容器内的 /etc/mysql 目录,/etc/mysql 是 MySQL 配置文件所在目录,可在宿主机修改配置且实时生效,无需重新构建镜像
-e MYSQL_ROOT_PASSWORD=123456 设置环境变量,指定 MySQL 的 root 用户密码为 123456,容器启动时 MySQL 服务会根据该值初始化 root 用户密码
mysql:8.4 指定要使用的 Docker 镜像为 MySQL 8.4 版本的官方镜像,若本地没有,Docker 会尝试从 Docker Hub 拉取

创建好mysql容器后,我们查看当前容器情况:

1
docker ps -a

连接mysql

我们可以在自己的电脑上,来连接mysql,测试一下连通性,这里我用workbench来连接: alt text alt text 经验证可以正常使用。

参考