用 Docker 装 MySQL 的朋友,是不是遇到过这些头疼事?容器一删数据全没了,辛辛苦苦建的表白搭;或者容器里的 MySQL 跑起来了,本地工具却连不上?别愁,今天兔子哥就手把手教你在 Docker 里装 MySQL,重点讲数据持久化怎么配置、端口映射怎么设,保证你装完数据不丢、连接通畅,新手也能一次学会!
一、先搞懂 Docker 装 MySQL 的好处(新手必看)
为啥要用 Docker 装 MySQL?和直接在系统上装比,优势可不少:
- 不用操心环境依赖,Docker 里啥都给你配好,Windows、Linux、Mac 都能用同一套步骤。
- 想装多个版本?开多个容器就行,互相不影响,测试新版本超方便。
- 卸载干净,删容器删镜像就行,不会留一堆配置文件在系统里。
但新手最容易踩的坑就是数据没持久化,容器一删数据全没了,所以这篇教程重点讲怎么避免这个问题,一起往下看吧!
二、安装前的准备工作(这些得先弄好)
在装 MySQL 容器前,得先把 Docker 环境搭好,步骤不复杂:
- 安装 Docker:
- Windows 和 Mac 直接装 Docker Desktop,官网下载一路下一步就行。
- Linux 的话,以 CentOS 为例,输
sudo yum install docker -y,装完输sudo systemctl start docker启动服务,再输sudo systemctl enable docker设开机自启。
- 验证 Docker 是否能用:
输docker --version,能看到版本号就说明装好了;再输docker run hello-world,出现 “Hello from Docker!” 就没问题了。
问:Docker 启动不了怎么办?
答:Windows 可能要开 Hyper-V,在 “控制面板→程序→启用或关闭 Windows 功能” 里勾选;Linux 可能权限不够,输
sudo usermod -aG docker $USER,重启后生效。三、拉取 MySQL 镜像(选对版本很重要)
Docker 装软件先拉镜像,MySQL 镜像在 Docker Hub 上有官方的,步骤这样:
- 查看可用版本:
输docker search mysql,能看到各种镜像,咱们用官方的mysql就行。想指定版本的话,比如 8.0,镜像名是mysql:8.0;5.7 就是mysql:5.7。 - 拉取镜像:
新手推荐用最新稳定版 8.0,输docker pull mysql:8.0,等进度条跑完。拉完输docker images,能看到mysql:8.0的镜像就成功了。
| 镜像名 | 说明 | 适合人群 |
|---|---|---|
| mysql:latest | 最新版本 | 想尝鲜的用户 |
| mysql:8.0 | 8.0 稳定版 | 大多数新手 |
| mysql:5.7 | 5.7 长期支持版 | 需要兼容旧程序的用户 |
兔子哥建议新手直接用
mysql:8.0,功能全又稳定,出问题网上教程也多。四、创建 MySQL 容器(核心步骤来了)
拉好镜像就可以建容器了,关键是配置数据持久化和端口映射,一步到位:
- 创建数据持久化目录:
在本地建个文件夹存 MySQL 数据,比如 Linux/Mac 输mkdir -p /home/mysql/data,Windows 在 D 盘建D:\docker\mysql\data(路径别带中文)。这样容器删了,数据还在这个文件夹里。 - 创建并启动容器:
输这条命令(根据自己系统改路径):
plaintextdocker run -d \--name mysql8 \-p 3306:3306 \-v /home/mysql/data:/var/lib/mysql \-e MYSQL_ROOT_PASSWORD=123456 \mysql:8.0
解释下参数意思:-d:后台运行容器--name mysql8:给容器起个名,好记-p 3306:3306:端口映射,把容器的 3306 映射到主机的 3306-v 本地路径:/var/lib/mysql:数据持久化,本地路径就是刚才建的文件夹-e MYSQL_ROOT_PASSWORD=123456:设 root 密码,自己改成复杂点的
Windows 用户注意路径格式,把/home/mysql/data换成/d/docker/mysql/data(D 盘的话)。 - 检查容器是否启动:
输docker ps,能看到mysql8的状态是Up就成了;如果没启动,输docker logs mysql8看日志,一般是密码太简单或路径错了。
五、端口映射详解(本地怎么连容器里的 MySQL)
刚才命令里的
-p 3306:3306就是端口映射,意思是主机的 3306 端口对应容器的 3306 端口。新手常问:- 问:主机 3306 被占用了怎么办?
答:改主机端口,比如-p 3307:3306,这样本地连 3307 端口就行。 - 问:映射后还是连不上?
答:先查容器 IP,输docker inspect mysql8 | grep IPAddress,看看 IP 是不是对的;再看看主机防火墙有没有开 3306 端口,Linux 输sudo ufw allow 3306,Windows 在防火墙里添规则。
六、数据持久化验证(确保数据不丢)
怎么知道数据真的持久化了?咱们测试下:
- 登录容器里的 MySQL:
输docker exec -it mysql8 mysql -u root -p,输入密码 123456,登录后输create database testdb;建个库,再输exit退出。 - 删除容器:
输docker stop mysql8停容器,再输docker rm mysql8删容器。 - 重新建容器:
还用之前的命令,注意数据路径不变,启动后登录 MySQL,输show databases;,能看到testdb还在,就说明持久化成功了!
七、常见问题自问自答
问:容器启动后,本地 Navicat 连不上怎么办?
答:先检查端口映射对不对,密码有没有输错;MySQL 8.0 默认加密方式可能不兼容,登录容器后输
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '密码';,刷新权限FLUSH PRIVILEGES;再试。问:数据目录权限不够,容器启动失败?
答:Linux 用户给目录加权限,输
sudo chmod -R 777 /home/mysql/data(测试用,生产环境别这么设),或改目录所有者为 Docker 用户。问:想改 MySQL 配置怎么办?
答:再映射个配置文件,建
/home/mysql/conf/my.cnf,启动时加-v /home/mysql/conf:/etc/mysql/conf.d,容器就会用你的配置了。兔子哥的个人建议
用 Docker 装 MySQL,数据持久化一定要做,不然容器误删哭都来不及。端口映射别用默认 3306,换成 3307、3308 这些,避免和本地 MySQL 冲突。密码别设太简单,虽然是测试环境,但好习惯得从小养成。
平时多看看容器日志,
docker logs 容器名能解决大部分问题。镜像和容器别乱删,不用的容器先停掉,docker ps -a能看到所有容器,避免占空间。刚开始练手多建几个容器试试,熟悉了就会觉得 Docker 真的很方便!希望这篇教程能帮到刚开始用 Docker 的朋友,有问题评论区问我,看到就回!
版权声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。
还木有评论哦,快来抢沙发吧~