Ubuntu22.04.5 + Docker + MySQL 5.7

Ubuntu22.04.5 + Docker + MySQL 5.7 安装完整流程

适用于:Ubuntu 服务器(国内环境优化版)


一、安装 Docker

🟢 1. 更新系统
复制代码
sudo apt update

🟢 2. 安装依赖
复制代码
sudo apt install -y ca-certificates curl gnupg lsb-release

🟢 3. 安装 Docker(推荐官方脚本)
复制代码
curl -fsSL https://get.docker.com | bash

👉 说明:

  • 自动安装 Docker
  • 自动配置环境(比手动稳定)

🟢 4. 启动 Docker
复制代码
sudo systemctl start docker
sudo systemctl enable docker

🟢 5. 验证安装
复制代码
docker -v

👉 看到版本号说明成功


二、准备 MySQL 数据目录

复制代码
sudo mkdir -p /data/mysql
sudo chmod -R 777 /data/mysql

👉 用于数据持久化(非常重要)


三、获取 MySQL 5.7 镜像(国内方案)

👉 由于 Docker Hub 网络问题,使用国内镜像:

复制代码
docker pull swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/mysql:5.7

🟢 转换为标准镜像名
复制代码
docker tag swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/mysql:5.7 mysql:5.7

四、启动 MySQL 容器

复制代码
docker run -d \
  --name mysql57 \
  -p 3306:3306 \
  -v /data/mysql:/var/lib/mysql \
  -e MYSQL_ROOT_PASSWORD=AAaa@123 \
  --restart=always \
  mysql:5.7

五、验证 MySQL 是否成功

🟢 1. 查看容器
复制代码
docker ps

🟢 2. 查看日志
复制代码
docker logs -f mysql57

👉 出现:

复制代码
ready for connections

🟢 3. 登录测试
复制代码
mysql -h 127.0.0.1 -P 3306 -u root -p

六、开启远程访问(可选但推荐)

进入容器:

复制代码
docker exec -it mysql57 mysql -uroot -p

执行:

复制代码
ALTER USER 'root'@'%' IDENTIFIED BY 'AAaa@123';
FLUSH PRIVILEGES;

七、数据说明(很重要)

复制代码
/data/mysql  ← 数据真实存储位置

👉 优点:

  • 容器删除 → 数据不丢
  • 可备份 / 可迁移

八、常见问题总结

❗1. docker pull 失败

👉 原因:国内网络限制

👉 解决:使用华为云镜像(上面已处理)


❗2. 端口占用
复制代码
3306 被占用

👉 解决:

复制代码
-p 13306:3306

❗3. 无法远程连接

👉 检查:

  • 防火墙
  • MySQL权限

九、最终结构

复制代码
服务器
├── Docker
│   └── mysql57(容器)
│
└── /data/mysql(数据库文件)

一句话总结

👉 在 Ubuntu 上:

复制代码
Docker = 运行环境
MySQL容器 = 数据库服务
/data/mysql = 数据存储

👉 这是标准生产部署方式

👉使用navicat也可以远程连接


删除docker的操作步骤

1、先确认一个关键问题(非常重要)

👉 你当时启动 MySQL 有没有加这个参数:-v /data/mysql:/var/lib/mysql

情况分两种:

🟢 情况1:有挂载(推荐)

✔ 数据在 /data/mysql

👉 删除容器 ≠ 删除数据(安全)

🔴 情况2:没挂载

❌ 数据在容器里

👉 删除容器 = 数据全没

👉 不确定的话可以先执行:

复制代码
docker inspect mysql57

看有没有:

复制代码
/data/mysql

2、删除 MySQL 容器(标准步骤)

🟢 1. 停止容器
复制代码
docker stop mysql57
🟢 2. 删除容器
复制代码
docker rm mysql57

💾 2、是否删除数据(你自己决定)

✔ 保留数据(推荐)

👉 什么都不用做

👉 /data/mysql 还在,之前保存的数据没有删除

❗彻底删除(重新来一套干净的)
复制代码
rm -rf /data/mysql

👉 ⚠️ 这个操作不可恢复!

相关推荐
一掬净土2 分钟前
kubelet 报错如下:docker does not support reopening container log files
docker·云原生·kubelet·logfiles
要开心吖ZSH6 分钟前
一次线上锁风暴复盘:号源表大范围 DELETE 的隐患与分批删除改造
数据库·mysql·行锁·1024程序员节·间隙锁·lockwaittimeout
TTATTC2 小时前
为什么 Python 做 Agent 总在并发中崩溃?拆解 Blockcell 在 Rust 下的 Host-Cell 隔离与自愈状态机
docker·开源
John_Hui3 小时前
MySQL 进阶知识
数据库·sql·mysql·1024程序员节
Random Glow3 小时前
一条 SQL 从输入到返回,中间经历了什么
数据库·后端·mysql·性能优化·innodb·1024程序员节
何中应3 小时前
MySQL 连接驱动单独下载的两种方式
数据库·mysql·maven
余槐i3 小时前
开虚拟线程后接口反而更慢:JDK 21 synchronized 锁住载体线程的排查
java·spring boot·redis·mysql·性能优化
csdn_aspnet4 小时前
.NETCore EF Core 根据 mysql 数据表按顺序生成简单编号
mysql·.net core·efcore·1024程序员节·sequence·编号
fb_123454 小时前
K8s存储与配置核心实战
云原生·容器·kubernetes
骑着蜗牛撵大象3274 小时前
N1 小盒子撑起 AI 接口中转层:New-API 接管本地 Ollama,用 Token 分发模型能力
docker·llama·1024程序员节·api网关·飞牛nas·new-api