资讯动态

Windows上用Docker跑MySQL 8.0:从安装到实战的完整指南

发布时间:2026/9/20 2:21:09 来源:尧图企业网站定制
1. 为什么在Windows上推荐用Docker跑MySQL1.1 本地安装MySQL的痛点如果你在Windows上装过MySQL大概率遇到过下面这些情况官网下载的安装包有好几百兆装的时候一堆勾选项稍微选错一个后面就得折腾半天装完之后服务管理器里多了一个常驻进程开机自己跑起来占内存不说想停掉还得去服务里找最麻烦的是卸载MySQL在Windows上出了名的卸不干净注册表残留、C盘目录残留、服务项残留下次重装直接报错只能手动去清注册表。这些我都经历过尤其是一次开发环境里需要同时跑MySQL 5.7和8.0两个版本做兼容性测试本地装两个MySQL实例简直是一场噩梦——端口要改、数据目录要分开、服务名要区分连配置文件都得复制两份。那时候我就在想要是能像Linux上那样直接用容器管理数据库就好了。后来我转向了Docker方案在Windows上用Docker Desktop跑MySQL 8.0真的省了太多事。容器里跑数据库数据文件全部放到本机挂载的目录里删容器、换版本、换配置都不影响数据。需要哪个版本直接拉对应镜像互相独立互不干扰用完就删干净利落。1.2 Docker方案的优势和适用场景Docker跑MySQL到底解决了什么问题我总结下来主要有三点第一是环境隔离。MySQL容器里自带完整的运行环境不依赖Windows系统里装了什么、缺了什么依赖。别人给你一个项目你只需要一个docker-compose.yml文件一条命令就能把数据库拉起来版本、配置、初始化脚本全部统一再也不用担心我这边能跑你那边连不上这种问题。第二是版本切换方便。mysql:8.0、mysql:5.7、mysql:8.4想用哪个用哪个。拉下来直接换个镜像名就能启动一个全新的实例数据目录分开挂载测试完删除容器即可不会对系统产生任何污染。第三是快速清理和迁移。不想要了docker rm -f mysql8一行命令全删掉数据目录留着就留着删了就删了完全不会像本地安装版那样留下一堆残留。团队协作时把一个docker-compose.yml文件发给同事对方直接复现一模一样的数据库环境。这套方案尤其适合几类人做开发但不想折腾环境的人、需要在多个MySQL版本之间切换测试的人、希望快速搭建本地开发库的团队。当然如果你需要跑高并发的生产数据库Windows Docker这条路本身就不推荐生产环境还是老老实实上Linux服务器但在开发机和个人电脑上这套方案足够用。2. 环境准备装好Docker Desktop2.1 先检查系统要求和虚拟化设置在Windows上使用Docker本质上是通过Docker Desktop这个图形化工具来管理容器。Docker Desktop本身不是一个简单的Windows程序它底层依赖虚拟化技术来运行Linux容器。你用Docker拉取的镜像绝大多数都是Linux镜像所以Windows上必须有一个轻量级虚拟机来承载这些容器。安装之前先确认三件事一是系统版本。Windows 10 64位专业版/企业版/教育版或者Windows 11这是官方明确支持的。Windows 10家庭版也能装但需要额外手动开启Hyper-V功能稍微麻烦一点。老旧的Windows 7、Windows 8就不要想了Docker Desktop已经不支持了。二是CPU虚拟化是否开启。这一步最常见的问题是BIOS里没打开虚拟化开关。开机进BIOS找到Intel Virtualization Technology或AMD SVM Mode设置为Enabled。开机后可以在任务管理器-性能-CPU里查看虚拟化是否显示已启用显示已启用说明BIOS层面没问题。三是内存。建议至少8GB内存因为Docker Desktop默认要给虚拟机分配2GB以上的内存如果你的电脑只有4GB内存跑MySQL容器会比较吃力。我自己实际体验16GB内存跑两三个容器很顺畅8GB内存跑一个MySQL加一个Redis也没问题。如果检查完系统版本满足、虚拟化已开启、内存够用那就可以进入安装了。2.2 安装Docker Desktop的完整步骤安装Docker Desktop的流程不算复杂但有几个地方容易踩坑我一个个说。第一步去Docker官网下载Docker Desktop for Windows安装包。下载地址是hub.docker.com或者www.docker.com官网选择Windows版本下载文件大约500MB左右。如果你的网络下载速度慢可以考虑使用国内镜像加速站点但注意不要下载来路不明的绿色版破解版安全性没保障。第二步双击安装包进入安装向导。安装过程中有一个关键选项是否使用WSL 2作为后端。当前版本的Docker Desktop默认推荐WSL 2除非你的系统不支持WSL 2否则我建议勾选上。WSL 2相比传统的Hyper-V方案启动速度更快、内存占用更小而且可以和Windows文件系统直接交互后面做数据卷挂载也更灵活。第三步安装完成后可能会提示需要重启系统重启就好。重启后首次打开Docker Desktop它会自动完成WSL 2内核的更新和初始化这个过程中可能会弹出一个Linux内核更新包的安装窗口点安装并重启即可。第四步启动Docker Desktop后会看到一个类似设置界面的欢迎页要求你接受服务条款点Accept就行。到这里Docker Desktop就装好了。装好之后还需要做一步操作开启镜像加速。国内直接访问Docker Hub拉取镜像速度很慢甚至超时所以需要在Docker Desktop的Settings - Docker Engine里配置镜像源。打开配置文件找到registry-mirrors字段填入国内可用的镜像加速地址。配置好之后点Apply RestartDocker Desktop会自动重启。配置完镜像加速有一个验证方法在命令提示符或PowerShell里执行docker info如果看到Registry Mirrors列表里出现了你配置的地址说明加速生效了。2.3 验证Docker环境是否正常安装完Docker Desktop之后我们要验证系统里的Docker环境是否真正可用。这一步很重要因为很多后续问题的根源都能在这里提前暴露出来。打开PowerShell或者Windows Terminal执行命令docker version如果看到Client和Server两段信息并且Server段里有Operating System: Docker Desktop这样的输出说明Docker服务正常运行。如果只看到Client而Server报错说明Docker Desktop没有启动成功需要回到上一步排查。再执行docker run hello-world这个命令会从Docker Hub拉取一个测试镜像并运行一个容器容器会打印一段欢迎信息然后退出。如果能看到Hello from Docker!的输出说明整个Docker运行链路是通的。我遇到过一种情况docker version显示Server正常但docker run hello-world拉镜像超时。这种情况八成是镜像加速没配置或者配置的地址失效了。处理办法就是重新换一个可用的镜像加速地址然后重启Docker Desktop。确认Docker环境正常后我们就可以进入正题开始拉取MySQL 8.0镜像了。3. 拉取MySQL 8.0镜像3.1 镜像版本怎么选Docker Hub上MySQL官方镜像的仓库名是mysql标签Tag对应不同版本。MySQL 8.0这个系列里常见的标签有这么几个mysql:8.0指向8.0系列的最新版本比如8.0.40。适合大多数场景。mysql:8.0.40锁定具体小版本适合需要精确复现环境的场景。mysql:8.4这是MySQL 8.4 LTS长期支持版本不是8.0系列。mysql:latest当前指向8.4不是8.0容易搞混不建议在生产场景用这个标签。我建议直接用mysql:8.0这个标签。原因有两个第一8.0系列目前是最广泛使用的版本绝大多数项目、ORM框架、客户端工具都对8.0做了很好的适配第二8.0这个标签会跟随8.0系列更新你之后重新拉取镜像时能拿到最新的补丁版本安全性和稳定性都有保障。另外不建议使用latest标签。很多教程里写docker pull mysql:latest看起来方便实际上latest现在指向的是8.4不再是8.0你要是照着8.0的习惯去配置可能会遇到一些细微的差异。既然项目明确要装MySQL 8.0就直接用mysql:8.0一步到位不会混淆。3.2 执行拉取并确认镜像确定好版本标签接下来执行拉取命令docker pull mysql:8.0这个命令会从Docker Hub拉取MySQL 8.0镜像。如果你的镜像加速配置正常几分钟内就能拉取完成。如果中途卡住或者报错先检查网络再检查镜像加速地址是否有效。拉取完成后执行以下命令查看本地镜像列表docker images输出结果里应该能看到mysql仓库、8.0标签、镜像ID和大小。我在实际安装过程中发现MySQL 8.0镜像的大小大约在600MB左右不同版本略有差异比想象中大一些因为里面包含了完整的MySQL运行环境、默认配置文件、初始化脚本等。如果你的磁盘空间比较紧张要注意预留足够的空间。到这里MySQL 8.0镜像已经准备好下一步就是创建并运行容器。4. 创建并运行MySQL容器4.1 关键参数解释端口、数据卷、密码运行MySQL容器时docker run命令的参数比较多我先把最关键的几个参数讲清楚再给出完整命令。端口映射用-p参数。MySQL默认监听3306端口容器内部的3306端口对外不可见必须映射到Windows宿主机的一个端口上。常见的写法是-p 3306:3306意思是把宿主机的3306端口映射到容器内的3306端口。如果你本地已经装了MySQL占用了3306端口可以换成-p 3307:3306这样连接时访问3307端口就行。注意冒号左边的端口是宿主机端口冒号右边是容器内端口千万别写反。数据卷挂载用-v参数。MySQL容器本身是临时性的容器一旦删除容器内的数据就全没了。所以必须把容器内的数据目录挂载到宿主机的某个目录下这样数据才能持久化。MySQL镜像里数据目录是/var/lib/mysql我们需要把它挂载到Windows上的一个自定义目录。例如-v D:/docker/mysql/data:/var/lib/mysql这个命令把Windows下D:/docker/mysql/data目录映射为容器内的/var/lib/mysql目录。以后容器被删除重建只要挂载目录不变数据就不会丢。配置文件目录也可以挂载用-v指定MySQL配置目录。MySQL镜像的配置目录是/etc/mysql/conf.d你可以把自定义的my.cnf配置文件放到Windows目录里再挂载进去容器启动时会自动加载。但如果你只是默认配置跑开发环境这一步可做可不做。root密码通过环境变量设置用-e参数。MySQL官方镜像启动时会读取MYSQL_ROOT_PASSWORD这个环境变量来设置root用户的密码。注意密码复杂度建议不要太低MySQL 8.0默认的密码校验策略是caching_sha2_password太简单的密码可能会被拒绝。我建议用一个包含大小写字母、数字、特殊字符的密码长度超过8位。比如-e MYSQL_ROOT_PASSWORDMyStr0ngPass容器名称用--name参数。给容器起一个有意义的名字后面管理起来方便比如--name mysql8。不用--name的话Docker会随机分配一个名字每次查看容器列表还要去认ID很麻烦。后台运行用-d参数。-d表示以守护态运行容器命令执行后容器在后台运行不会阻塞终端。不加这个参数的话终端会一直挂在MySQL容器的日志输出上CtrlC退出后容器就停了。4.2 完整的docker run命令和启动流程综合上面这些参数一个完整的启动命令长这样docker run -d \ --name mysql8 \ -p 3306:3306 \ -e MYSQL_ROOT_PASSWORDMyStr0ngPass \ -v D:/docker/mysql/data:/var/lib/mysql \ -v D:/docker/mysql/conf:/etc/mysql/conf.d \ mysql:8.0逐行解释一下docker run -d运行容器并后台运行。--name mysql8容器命名为mysql8。-p 3306:3306宿主机3306映射容器3306。-e MYSQL_ROOT_PASSWORDMyStr0ngPass设置root密码。-v D:/docker/mysql/data:/var/lib/mysql数据目录挂载。-v D:/docker/mysql/conf:/etc/mysql/conf.d配置目录挂载。mysql:8.0使用镜像名和标签。执行完命令后Docker会先检查本地有没有mysql:8.0镜像有了就会直接用然后创建容器、初始化数据目录、启动MySQL服务。这个过程大概需要几十秒。启动过程中建议开一个终端实时看日志docker logs -f mysql8正常启动的日志末尾会看到类似这样的输出[System] [MY-010116] [Server] /usr/sbin/mysqld (mysqld 8.0.40) starting as process 1 [System] [MY-010931] [Server] /usr/sbin/mysqld: ready for connections. Version: 8.0.40 socket: /var/run/mysqld/mysqldx.sock port: 3306 MySQL Community Server - GPL.看到ready for connections说明MySQL已经启动成功了。启动完成后执行以下命令确认容器状态docker ps输出列表里应该有一个名为mysql8的容器状态为Up运行中。如果容器状态是Exited说明启动失败需要查看日志排查原因。常见的失败原因我后面单独开一节讲。4.3 使用docker-compose管理MySQL容器如果你的项目里不止MySQL一个容器比如还要跑Redis、Nginx或者你希望把数据库配置固化下来、方便以后重新搭建环境那我强烈建议使用docker-compose来管理。首先在项目目录下创建一个docker-compose.yml文件内容如下version: 3.8 services: mysql8: image: mysql:8.0 container_name: mysql8 restart: always ports: - 3306:3306 environment: MYSQL_ROOT_PASSWORD: MyStr0ngPass TZ: Asia/Shanghai volumes: - D:/docker/mysql/data:/var/lib/mysql - D:/docker/mysql/conf:/etc/mysql/conf.d - D:/docker/mysql/init:/docker-entrypoint-initdb.d command: --character-set-serverutf8mb4 --collation-serverutf8mb4_unicode_ci这个配置里多了几个东西restart: always容器退出后自动重启相当于开机自启。Windows里Docker Desktop启动后会自动拉起这些容器对开发环境来说很省心。TZ: Asia/Shanghai设置容器时区为上海避免MySQL时间与本地时间相差8小时。D:/docker/mysql/init:/docker-entrypoint-initdb.dMySQL镜像有个特殊机制容器首次启动时会执行挂载到/docker-entrypoint-initdb.d目录下的所有.sql脚本。这非常适合放初始化表结构和基础数据的SQL首次启动自动执行不需要你手动导入。command覆盖容器默认启动命令这里指定了MySQL的字符集为utf8mb4。MySQL 8.0默认字符集虽然是utf8mb4但排序规则默认是utf8mb4_0900_ai_ci如果你希望兼容老项目建议显式指定utf8mb4_unicode_ci。配置好之后在docker-compose.yml所在目录执行docker-compose up -dDocker Compose会按照配置创建并启动容器。以后需要停止就执行docker-compose stop删除容器就执行docker-compose down非常方便。5. 连接MySQL并验证可用性5.1 在宿主机命令行中连接MySQL容器启动成功后我们需要验证MySQL服务是否真的可以连接。最简单的方法是在Windows的PowerShell或命令提示符里通过Docker提供的客户端连接。如果你本机没有安装MySQL客户端工具可以在容器内执行客户端命令docker exec -it mysql8 mysql -uroot -p回车后会提示输入密码输入你配置的root密码进入MySQL命令行后执行SELECT VERSION();如果返回8.0.x版本号说明MySQL连接正常。如果你本机安装了Navicat、DBeaver、MySQL Workbench等图形化客户端可以直接连接到localhost:3306用户名root密码就是你设置的那个。如果你还没有本机MySQL客户端工具我建议装一个DBeaver免费开源、跨平台、支持MySQL 8.0的caching_sha2_password认证方式比Navicat更省心。当然Navicat也很好用但需要处理授权问题我不过多展开。5.2 创建应用专用账号日常开发中强烈建议不要直接用root账号连接数据库而是为每个应用创建一个独立账号并且只授予该应用需要的权限。这既是安全规范也方便后续排查问题。比如要给一个名为app_db的数据库创建一个账号CREATE DATABASE app_db DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; CREATE USER app_user% IDENTIFIED BY AppPass123; GRANT ALL PRIVILEGES ON app_db.* TO app_user%; FLUSH PRIVILEGES;这里的%表示允许从任何主机连接。如果你只允许本机连接可以写localhost。如果允许局域网内其他机器连接就把%换成对方机器的IP。MySQL 8.0默认的认证插件是caching_sha2_password如果你的连接工具比较老可能不支持这个认证方式报错信息通常是Authentication plugin caching_sha2_password cannot be loaded。解决办法有两种升级客户端工具或者在MySQL里给这个用户改成mysql_native_password认证方式。但我建议优先升级客户端工具因为mysql_native_password在MySQL 8.4中已被标记为废弃官方正在逐步淘汰它。5.3 设置容器开机自启容器创建时如果加了--restart参数或者用了docker-compose配置了restart: alwaysDocker Desktop启动时会自动拉起容器。但如果你之前创建容器时没有加这个参数可以通过docker update命令动态修改docker update --restartalways mysql8执行之后无论系统重启还是Docker Desktop重启mysql8容器都会自动启动。需要注意的是Docker Desktop本身需要登录Windows后手动启动或者设置为开机启动。打开Docker Desktop的Settings - General勾选Start Docker Desktop when you sign in to your computer这样Windows登录后Docker Desktop会自动启动MySQL容器也会跟着自动拉起基本做到了解放双手。6. 常见问题与排查技巧实录6.1 Docker Desktop启动失败虚拟化未开启这是Windows上Docker最经典的坑。Docker Desktop打开后闪退或者提示类似Virtualization support was not detected的错误十有八九是BIOS里虚拟化没开。排查步骤打开任务管理器点击性能标签选择CPU查看右下角虚拟化一栏。显示已启用说明虚拟化已经开了显示已禁用就去BIOS开启。重启电脑开机时按Del或F2进入BIOS设置。不同品牌的主板进入方式略有不同具体可以在网上搜主板型号 进入BIOS。在BIOS里找到Intel Virtualization TechnologyIntel平台或SVM ModeAMD平台设置为Enabled保存退出。重新进入Windows再启动Docker Desktop。如果BIOS里已经开启了虚拟化但任务管理器仍然显示已禁用可能是Windows的Hyper-V功能没有启用。以管理员身份打开PowerShell执行以下命令启用Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V -All执行完重启系统再检查虚拟化状态。6.2 3306端口被占用启动MySQL容器时如果报错port is already allocated说明宿主机的3306端口已经被其他程序占用了。最常见的情况是Windows系统服务里有MySQL服务在运行。先找出谁占用了3306端口在PowerShell执行netstat -ano | findstr :3306输出结果最后一列是PID然后执行tasklist | findstr PID看到占用3306的进程名。如果是MySQL服务mysqld.exe说明你之前装过MySQL需要先把原来的服务停掉或者卸载。以管理员身份打开命令提示符执行net stop mysql或者直接在服务管理器WinR输入services.msc里找到MySQL服务右键停止并改为手动启动类型。如果你不想停掉原来的MySQL那就换一个宿主机映射端口把-p 3306:3306改成-p 3307:3306连接时访问localhost:3307即可。6.3 容器启动后立刻退出docker ps -a看到容器状态是Exited说明容器启动后异常退出了。查看日志定位问题docker logs mysql8常见的日志报错有以下几种一是Cant start server: Bind on TCP/IP port: Permission denied。这是端口权限问题检查端口号是否小于1024MySQL默认3306不受影响但如果你改成了特殊端口注意避开系统保留端口。二是[ERROR] [MY-010457] [Server] --initialize specified but the data directory has files in it。这说明数据目录里已经有数据了但初始化脚本还想再初始化一次。通常发生在你挂载的数据目录里已经存在一个MySQL数据但容器是首次启动的情况下。解决办法是清空数据目录让镜像重新初始化。三是[ERROR] [MY-010162] [Server] malloc size can only be less than or equal to innodb_buffer_pool_size。这是配置文件中设置了过大的innodb_buffer_pool_size但容器可用内存不足。通过-e或--memory限制容器内存或者修改配置文件减小缓冲池大小。6.4 Windows防火墙拦截导致连接失败容器已经正常运行但在同一局域网的其他机器上连接数据库失败报错Cant connect to MySQL server。这种情况多半是Windows防火墙拦截了3306端口。解决办法在Windows防火墙中添加入站规则允许TCP 3306端口访问。操作路径控制面板 - Windows Defender防火墙 - 高级设置 - 入站规则 - 新建规则 - 端口 - TCP - 特定本地端口填写3306 - 允许连接 - 勾选域/专用/公用 - 命名规则。如果你是开发测试场景嫌麻烦也可以临时关闭防火墙验证一下问题是否出在防火墙上但测试完记得重新开启。6.5 连接时报错Authentication plugin问题用Navicat老版本或某些客户端工具连接MySQL 8.0时可能会报错Authentication plugin caching_sha2_password cannot be loaded原因MySQL 8.0默认使用caching_sha2_password认证插件而客户端工具版本太老不支持这个插件。解决方法优先级从高到低升级客户端工具到最新版本Navicat 16以上、DBeaver最新版、MySQL Workbench 8.0都支持。给指定用户切换到mysql_native_password认证方式SQL命令如下ALTER USER app_user% IDENTIFIED WITH mysql_native_password BY AppPass123; FLUSH PRIVILEGES;但要注意这个认证方式在MySQL 8.0里虽然能用但官方已经在8.4版本弃用了建议还是升级客户端工具而不是改变服务端行为。7. 一些使用心得和数据备份建议7.1 每天自动备份MySQL数据的做法开发环境的数据虽然不那么重要但做一次备份保平安还是很有必要的。既然用了Docker备份MySQL数据库就变得非常简单不用在Windows上安装任何备份工具直接利用docker exec执行mysqldump命令即可。在PowerShell或任务计划程序里配置一个定时任务执行以下命令docker exec mysql8 sh -c exec mysqldump -uroot -p$MYSQL_ROOT_PASSWORD --all-databases D:/docker/mysql/backup/all_$(date %Y%m%d_%H%M%S).sql注意$MYSQL_ROOT_PASSWORD是容器内的环境变量在sh -c中通过$引用需要保证容器创建时设置了该环境变量。如果需要定时执行可以在Windows任务计划程序里新建一个任务触发器设置为每天凌晨执行操作里填写PowerShell命令。备份文件按日期命名保留最近7天的备份可以定期清理。7.2 MySQL 8.0与老项目兼容性问题MySQL 8.0相比5.7有不少变化如果你把项目从5.7迁移到8.0可能会遇到下面几个问题一是认证插件变化。前面提过8.0默认caching_sha2_password老客户端工具不支持。解决方案已经说过优先升级客户端。二是sql_mode变化。MySQL 8.0默认启用ONLY_FULL_GROUP_BY某些老项目里写的SQL没有按标准聚合查询在5.7可能能跑在8.0会直接报错。解决办法是在连接会话里设置sql_mode或者在配置文件中加入[mysqld] sql_mode STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION但这是临时解决办法长期来看还是要把SQL改正确。三是保留字增加。MySQL 8.0新增了一些保留字比如groups、rank、window如果你的表名或字段名恰好用了这些词SQL语句会报语法错误。解决办法是给字段名加上反引号。7.3 容器时区和中文乱码问题MySQL容器默认时区是UTC如果你直接用了默认配置NOW()函数返回的时间会比北京时间晚8个小时。解决办法是在docker run或docker-compose里设置TZ环境变量我在前面的docker-compose配置里已经写过了。中文乱码问题通常是因为字符集设置不对。MySQL 8.0默认字符集就是utf8mb4比5.7时代默认latin1好很多。但如果你从旧版本数据库迁移数据还是要检查一下表级别的字符集。在my.cnf或启动命令里显式指定[mysqld] character-set-server utf8mb4 collation-server utf8mb4_unicode_ci连接串里也要指定字符集比如JDBC连接串加上characterEncodingutf8。这样基本不会出现中文乱码。7.4 从本机迁移数据到容器如果你之前在本机装过MySQL现在想切换到Docker方案数据迁移的思路很简单。步骤一用原来的MySQL导出数据。在命令提示符执行mysqldump -uroot -p --all-databases all_databases.sql步骤二启动Docker容器并导入数据。把all_databases.sql放到挂载的init目录下对应/docker-entrypoint-initdb.d然后删除容器、重新用docker-compose启动容器首次启动时会自动执行这个SQL脚本。或者不删除容器直接手动导入docker exec -i mysql8 mysql -uroot -p all_databases.sql导入完成后检查数据库中表数量和数据行数是否与原来一致。我在实际迁移中踩过一个坑直接用旧的5.7导出的SQL导入到8.0会有部分兼容性问题。比如utf8mb4_0900_ai_ci排序规则在5.7里不存在或者某些存储过程语法差异。稳妥的办法是先导出SQL看看如果有不兼容的地方先做替换处理再导入。7.5 总结一下我个人的最佳实践用Docker在Windows上跑MySQL这段时间我自己总结了一套最顺手的配置方式分享出来供参考使用WSL 2作为Docker后端不要用Hyper-V兼容模式WSL 2对开发环境更友好。所有数据库容器用docker-compose统一管理确保配置可复现不依赖某一次手敲命令。数据目录单独挂载不使用volumes匿名卷因为匿名卷不好定位换机器迁移不方便。每个项目的数据库单独建库、建账号不使用root连接应用。开启容器restart: always配合Docker Desktop开机自启数据库服务几乎不需要手动管。预留init目录放初始化SQL新环境拉起来自动建表建索引免去手动导入。每天定时备份一次保留最近7天的备份文件。开发环境数据丢了重建成本高备份这一下成本很低值得做。最后提醒一句Docker方案适合开发测试和中小型项目的部署运维如果你要做高可用或者高性能的数据库集群还是建议用原生环境部署在Linux服务器上或者直接使用云数据库服务把运维成本交给专业团队。在Windows开发机上Docker跑MySQL这套方案省心程度和可维护性已经远超本地安装版了。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价