外观
实训 07:MariaDB 复制、备份与恢复
约 942 字大约 3 分钟
云计算实训第07次课
2026-07-30
所有数据库、卷和备份限定在 ~/cloud-course/lab-07,Compose 项目名为 cloud-course-lab-07。
一、目标与最终证据
- 两项数据库服务健康,复制 IO 与 SQL 线程为
Yes; - 主库写入后,从库查到同一条记录;
course_db.sql具有校验值;- 删除测试库后,主从都能从备份恢复记录;
verify.sh通过,课程项目清理完成。
二、安全边界
- 不连接、查询或删除服务器上的其他数据库。
- 不映射宿主机 3306,不修改防火墙或安全组。
.env、SQL 备份和数据卷不上传智慧职教。DROP DATABASE前必须核对项目名、库名和校验结果。- 只运行
DROP DATABASE course_db,不能使用变量、通配或批量删库脚本。
三、任务 1:准备配置
[ECS] mkdir -p ~/cloud-course/lab-07
[ECS] cd ~/cloud-course/lab-07
[ECS] cp .env.example .env
[ECS] chmod 600 .env编辑 .env,为三项密码填入不同随机值。检查服务与配置:
[ECS] docker compose config --services
[ECS] docker compose config --quiet截图 1:服务名和配置检查。
说明:配置检查尚未证明哪些运行结果?
四、任务 2:预检并启动
[ECS] free -h
[ECS] df -hT /
[ECS] docker compose ls确认资源和现有项目后启动:
[ECS] docker compose up -d
[ECS] docker compose ps等待两项服务为 healthy。截图 2:两项服务状态和内部 3306。
五、任务 3:检查复制机制
[ECS] docker compose exec -T replica sh -lc \
'mariadb -uroot -p"$MARIADB_ROOT_PASSWORD" -e "SHOW REPLICA STATUS\G"' \
| grep -E 'Slave_(IO|SQL)_Running|Seconds_Behind_Master|Last_(IO|SQL)_Error'截图 3:IO、SQL 线程和延迟。
如果任一线程为 No,保留 Last_IO_Error 或 Last_SQL_Error,不要删除卷重来。
六、任务 4:主库写、从库读
[ECS] docker compose exec -T primary sh -lc \
'mariadb -uroot -p"$MARIADB_ROOT_PASSWORD" course_db' \
< seed.sql[ECS] docker compose exec -T replica sh -lc \
'mariadb -uroot -p"$MARIADB_ROOT_PASSWORD" course_db \
-e "SELECT id,item FROM course_check ORDER BY id;"'截图 4:主库写入命令和从库查询结果。
说明:这项证据与复制线程状态有什么不同?
七、任务 5:创建并核对逻辑备份
[ECS] mkdir -p backup
[ECS] docker compose exec -T primary sh -lc \
'mariadb-dump -uroot -p"$MARIADB_ROOT_PASSWORD" \
--single-transaction --routines --events --databases course_db' \
> backup/course_db.sql[ECS] ls -lh backup/course_db.sql
[ECS] sha256sum backup/course_db.sql | tee backup/course_db.sql.sha256截图 5:备份文件、大小和校验值。不得截取 SQL 中的真实业务数据。
八、任务 6:三项确认后删除测试库
第一项确认项目:
[ECS] docker compose ls第二项确认库名:
[ECS] docker compose exec -T primary sh -lc \
'mariadb -uroot -p"$MARIADB_ROOT_PASSWORD" -Nse \
"SELECT SCHEMA_NAME FROM information_schema.SCHEMATA WHERE SCHEMA_NAME=\"course_db\";"'第三项确认备份:
[ECS] sha256sum -c backup/course_db.sql.sha256三项输出分别为 cloud-course-lab-07、course_db 和 OK 后,才执行:
[ECS] docker compose exec -T primary sh -lc \
'mariadb -uroot -p"$MARIADB_ROOT_PASSWORD" -e "DROP DATABASE course_db;"'等待复制后,分别在主库、从库确认目标库不存在。截图 6:三项确认与删除后的结果。
九、任务 7:恢复并回归
[ECS] docker compose exec -T primary sh -lc \
'mariadb -uroot -p"$MARIADB_ROOT_PASSWORD"' \
< backup/course_db.sql[ECS] docker compose exec -T primary sh -lc \
'mariadb -uroot -p"$MARIADB_ROOT_PASSWORD" course_db \
-e "SELECT id,item FROM course_check ORDER BY id;"'[ECS] docker compose exec -T replica sh -lc \
'mariadb -uroot -p"$MARIADB_ROOT_PASSWORD" course_db \
-e "SELECT id,item FROM course_check ORDER BY id;"'截图 7:导入退出码、主库记录和从库记录。
十、验收与清理
在服务仍运行时执行:
[ECS] bash verify.sh完成报告后清理:
[ECS] docker compose down普通 down 会删除本课容器和网络,保留命名卷。是否删除个人实验卷由教师统一安排;不要触碰未知卷。
最终只上传:
班级_学号_姓名_第07次课_数据库复制与恢复报告.docx