InnoDB 引擎在使用页面压缩时,严重依赖于文件系统对稀疏文件的支持。InnoDB 页面压缩。
它提出了一个问题,mariabackup/xtrabackup 将如何处理那些 InooDB 稀疏文件
--backup
--prepare
--copy-back
操作?
假设我们总共有 100G InnoDB 表,(ls
报告 100G 但du
报告 0.5G)。提出以下问题:
当我
--backup
使用 mariabackup/xtrabackup 时,备份本身会在目标目录中稀疏吗?当我
--prepare
使用 mariabackup/xtrabackup 时,结果会很稀疏吗?当我
--copy-back
使用 mariabackup/xtrabackup 时,结果将是稀疏的说 mariabackup/xtrabackup 不处理稀疏文件。(悲剧)。我可以用 using
cp --sparse=always
instead of来纠正这种行为吗,mariabackup --copy-back ...
或者这不是那么简单......
mariabackup 识别页面压缩文件,并且每当它复制页面时,它
lseek
)推进到目标文件页面的末尾,也就是说,它“跳过”二进制零这个逻辑封装在这个函数中,它适用于
--backup
and--copy-back
(以及每当 mbstream “解包”流时)。人们可以认识到这是相同的技术 - 在文件末尾后面写入,Unixes 多年来一直使用这种技术来获取稀疏文件。
令人惊讶的是,适用于旧 Unix 的东西现在不一定适用于所有文件系统,显然,这种逻辑似乎在 XFS 上被打破了
当然,您可以自己“稀疏”文件,使用任何可以在其中打孔的工具。
附言。mariabackup
--prepare
相当于启动服务器进行崩溃恢复,所以每当 --prepare 写入数据文件时,它都会使用通常的服务器逻辑,打孔。聚苯硫醚。mariabackup
--backup --stream
确实将二进制零写入 stdout,因此建议使用任何通用压缩工具对 stdout 进行管道传输 -(gzip、7zip)只是为了从流中删除这些零。