按照 Docker 文档中官方的说法,备份容器的卷直接 tar 打包 /var/lib/docker/volumes/ 下的目录就行,但我在打包含有 MySQL 的卷时总是提示
tar: /var/lib/docker/volumes/mysql-data/_data/mysql.ibd: file changed as we read it
请问会对数据完整性产生影响吗?
会,你需要停止运行的时候备份
直接备份正在运行的数据库文件也太心大了吧。。。
文件还在变动的时候你就备份?
我们用的阿里云 HBR,添加定时任务的时候可以指定执行前和执行后的命令,可以先把容器停掉
把容器停掉会导致服务不可用,而我们的服务 24 小时都有人在用,目前我们选择的是备份脚本打包 Volumes 前先执行一次 mysqldump 。请问有没有更好的方法?
emmm 我记得 PostgreSQL 是允许在启用 WAL 日志的情况下直接用 tar 备份的,MySQL 你看看应该也有相关
看起来你需要 Cow 文件系统.可以直接创建快照,zvol 还可以在文件系统是 ext4 的情况下在块层面创建快照
你需要 xtrabackup,可以在线备份 innodb 的表,myisam 需要加制度锁。
制度==> 只读
如果要服务在线的话,可以考虑主从拉一个备机出来,然后把备机停了备份。
我手里小型生产机都是这么搞的。
不使用 COW 的情况下很难做到保证一致性的备份正在被读写的文件,建议考虑下次计划维护的时候迁移一下(现在就忍着,备份不保证一致性就当断了次电)
之后使用的文件系统 /块级存储管理可以考虑比如 LVM,ZVol,zfs,btrfs 等等可以实现 COW 的方案。
这就是典型的:
本来没啥事,加上 docker 之后又没事找事
mysql 的备份应该使用 mysqldump --single-transaction 或者 xtrabackup 工具
和 volume 基本没有任何关系
直接打包数据文件备份只适用于已经停止的服务。。。