同步到具有相同配置的另一台机器后目录大小增加

同步到具有相同配置的另一台机器后目录大小增加

有一台 MySQL(percona,14.14 Distrib 5.6.28-76.1)机器,配有 1TB SSD,托管约 712Gb 的 mysql 数据。MySQL 有 4 个数据库,其中 database1 占用了大部分空间,656Gb。我们称这台机器为 machine1。

想要重建另一台具有完全相同配置的 MySQL DB 机器,例如 machine2。因此在 machine1 上创建了 LVM 快照。

df -h 命令将显示 MySQL 和 LVM 分区的以下输出:

On Machine1, after taking LVM snapshot:

/dev/mapper/vgmysql-mysql_tmp        100G   33M  100G   1% /var/tmp/mysql
/dev/mapper/vgmysql-mysql            900G  713G  188G  79% /var/lib/mysql
/dev/mapper/vgmysql-mysql_snapshot   900G  713G  188G  79% /var/cache/mylvmbackup/mnt/backup
/dev/mapper/vgroot-mysql_backup      905G   33M  905G   1% /var/cache/mylvmbackup/backup

使用 NFS 导出挂载选项将 machine2 的 SSD 分区 (/var/lib/mysql) 挂载到 machine1 上,并从 LVM 快照执行 rsync 到远程挂载。挂载远程分区并执行 rsync 后,df -h 在 machine1 上显示以下输出。

On Machine1, after rsyncing to Machine2's remote mount:

/dev/mapper/vgmysql-mysql           800G  713G   88G  90% /var/lib/mysql
/dev/mapper/vgmysql-mysql_tmp       100G   33M  100G   1% /var/tmp/mysql
/dev/mapper/vgmysql-mysql_snapshot  800G  712G   89G  89% /var/cache/mylvmbackup/mnt/backup
/dev/mapper/vgroot-mysql_backup     805G   33M  805G   1% /var/cache/mylvmbackup/backup
machine2:/var/lib/mysql             900G  864G   36G  97% /mnt/machine2

因此,在 rsync 之后,数据的总大小增加了 150Gb。比较每个单独文件的大小和文件数量,发现它们都相同。使用ls -ldu命令检查大小。检查 machine2 上的分区大小时,输出结果如下,确认磁盘使用量已增加:

On Machine2:

/dev/mapper/vgmysql-mysql_tmp      100G   33M  100G   1% /var/tmp/mysql
/dev/mapper/vgmysql-mysql          900G  864G   36G  97% /var/lib/mysql

删除了 machine2 上的所有数据,并重新执行了 rsync,结果还是一样。现在,MySQL 总共拥有 4 个数据库,我们分别称之为数据库 1、数据库 2 .... 和数据库 4。每个数据库在 /var/lib/mysql 中都有自己的目录。

如前所述,database1 的大小最大,约为 656Gb。检查 machine2 上 /var/lib/mysql 中 database1 目录的大小时,其大小约为 799G。其余所有目录和文件的大小相同。检查每个文件(ibd 和 frm)并将它们与 machine1 上的文件进行比较,发现每个文件的大小相同。没有额外的隐藏文件。

因此再次删除所有数据,销毁逻辑卷 (/dev/mapper/vgmysql-mysql) 并重新创建它们。再次执行 rsync 并得到相同结果,磁盘使用量增加了 150Gb。

检查了两台机器上的文件系统 (XFS) 参数,全部相同。使用 ncdu 命令,差异很明显:

总磁盘使用量:864.3GiB 表观大小:713.3GiB 项目:1500

是什么原因导致磁盘使用量增加这么多?我在这里遗漏了什么?

答案1

我不确定,但也许你的 MySQL 正在使用稀疏文件

您可以尝试使用 --sparse 或 --inplace 执行 rsync,如下所述:Rsync 和稀疏文件

相关内容