当前位置:首页 >  站长 >  建站经验 >  正文

容器删了数据就没了?Docker卷的备份恢复,别等出事才想起来

 2026-08-31 09:00  来源: 互联网   我来投稿 撤稿纠错

  一键部署OpenClaw

用Docker跑MySQL的站长,最该问自己的一个问题:数据库文件现在能被备份脚本摸到吗?数据在卷(volume)里,如果卷是匿名卷、或者备份脚本只tar了网站目录,那数据库其实处于裸奔状态,容器一坏就只能恢复到上次手动导出的时点。

先搞清楚自己的数据在哪。Docker存数据两种方式:bind mount直接挂宿主机目录(docker-compose.yml里写 ./mysql:/var/lib/mysql这种),数据就在明面上,好办;named volume(只写个名字),实际存放在/var/lib/docker/volumes/下面,路径深还得root权限,很多备份脚本就是在这里漏掉的。

# 恢复:先起个空库容器
docker run -d --name mysql-restore -e MYSQL_ROOT_PASSWORD=test \
-v ./restore:/docker-entrypoint-initdb.d mysql:5.7
gunzip < all.sql.gz > ./restore/init.sql
# 容器首次启动会自动执行init目录里的sql,起来即恢复

MySQL这种数据库直接tar目录有个隐患:备份时数据库还在写,tar出来的文件可能前后不一致,恢复时启动报错。正规做法是mysqldump导出逻辑备份,容器化环境下用docker exec执行。

# 每日备份脚本(cron凌晨3点)
#!/bin/bash
BACKUP=/backup/mysql/$(date +%F)
mkdir -p $BACKUP

docker exec mysql容器名 \
mysqldump -uroot -p密码 --all-databases --single-transaction \
| gzip > $BACKUP/all.sql.gz

# 备份完顺手传异地
rsync -az $BACKUP/ backup@备机:/backup/mysql/

# 保留30天
find /backup/mysql -mtime +30 -delete

恢复演练必须做,没恢复过的备份等于没有备份。找个测试容器,把sql.gz灌回去,起来之后抽查几张表的数据。

# 恢复:先起个空库容器
docker run -d --name mysql-restore -e MYSQL_ROOT_PASSWORD=test \
-v ./restore:/docker-entrypoint-initdb.d mysql:5.7
gunzip < all.sql.gz > ./restore/init.sql
# 容器首次启动会自动执行init目录里的sql,起来即恢复

网站文件这类静态数据不用这么讲究,直接tar挂载目录就行。建议一套完整的备份清单:网站目录、MySQL逻辑备份、docker-compose.yml和所有配置文件、SSL证书。最后一样最容易被忘,证书丢了重新签发要时间,中间域名验证还可能卡住。

数据来源:Docker官方文档 

申请创业报道,分享创业好点子。点击此处,共同探讨创业新机遇!

相关标签
php教程
mysql

相关文章

  • docker pull龟速还磁盘报警?镜像加速和空间清理一次讲清

    Docker用久了两大顽疾:拉镜像慢得像挂了,以及/var/lib/docker目录悄悄吃掉几十G直到磁盘写满、整站报错。这两件事都有标准解法,十分钟配完。先说拉取慢。DockerHub在国内直连基本不可用,需要配镜像加速器。各家云厂商都提供免费加速地址,阿里云的控制台里有一串专属地址,填到daem

    标签:
    php教程
  • 容器启动顺序乱成一锅粥?Compose依赖、健康检查和一键启停

    站稍微复杂一点,容器就不止三个:Web、PHP、MySQL、Redis,再加个定时任务的容器。用dockerrun一个个敲,重启顺序错一次就一堆报错——PHP比MySQL先起来,连接失败直接崩。Compose的价值就是把这套依赖关系写进配置,一键按正确顺序拉起。关键是depends_on加健康检查。

    标签:
    php教程
  • 环境配一次崩一次?Docker一条命令拉起LNMP,搬家不再从零开始

    传统装LNMP的痛,装过的都懂:PHP版本、扩展依赖、MySQL配置,换台服务器全部重来一遍,中途各种版本冲突。Docker把整套环境固化成配置文件,机器挂了,新机器上dockercomposeup一条命令,几分钟恢复原样。核心概念就三个:镜像(环境模板)、容器(跑起来的实例)、卷(挂出来的数据目录

    标签:
    php教程
    docker
  • WAF不是大站专利:ModSecurity加OWASP免费规则,老站也能上

    WAF这个词听着像金融级配置,其实开源方案零授权费。ModSecurity是老牌WAF引擎,OWASPCRS是一套社区维护的攻击特征规则,两个加起来能挡住绝大多数SQL注入、XSS、路径穿越扫描。你被WebShell和注入攻击折腾过的站,这套东西值得配一次。Nginx上跑ModSecurity用v3

  • 被CC打挂之前先做这三步:SYN Flood内核参数调优实战

    SYNFlood的原理一句话:攻击者狂发TCP握手第一个包(SYN),但不回第三次握手的ACK,服务器傻等,半连接队列被占满,正常用户的握手请求进不来,表现为网站打不开但机器负载并不高。这种攻击成本极低,一个脚本就能打,站长几乎人人会遇到。先确认是不是这个病:ss-s看一眼,或者netstat-an

热门排行

信息推荐