Não tenho certeza, mas talvez o seu MySQL esteja usando arquivos esparsos
Você pode tentar fazer o seu rsync com --sparse ou --inplace como explicado aqui: Arquivos rsync e esparsos
Tenha uma máquina MySQL (percona, 14.14 Distrib 5.6.28-76.1) com um SSD de 1TB que hospeda cerca de 712Gb de dados mysql. O MySQL possui 4 bancos de dados, com, digamos, database1, ocupando um espaço maior, 656Gb. Vamos chamar esta máquina machine1.
Deseja reconstruir outra máquina MySQL DB, digamos, machine2, que possui exatamente a mesma configuração. Então, tomou um instantâneo LVM na máquina1.
O comandodf -h mostrará a seguinte saída para as partições MySQL e 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
Montou a partição SSD da máquina2 (/ var / lib / mysql) na máquina1 usando a opção de montagem de exportação NFS e fez um rsync da captura instantânea do LVM para a montagem remota. Depois de montar a partição remota e fazer o rsync, df -h mostrou a seguinte saída na máquina1.
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
Então, após o rsync, o tamanho total dos dados aumenta em 150Gb. Ao comparar os tamanhos de cada arquivo individual e contagem de arquivos, todos são iguais. Os tamanhos foram verificados usando o comando ls -l
e du
. Quando marcado o tamanho da partição na máquina2, o seguinte é a saída, confirmando que o uso do disco aumentou:
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
Excluiu os dados inteiros no machine2 e refez o rsync e novamente o mesmo resultado. Agora, em todos os seus 4 bancos de dados que o MySQL está mantendo, vamos chamar então database1, database2 .... e database4. Cada banco de dados possui seu próprio diretório em / var / lib / mysql.
Como mencionado anteriormente, database1 tem o maior tamanho, ou cerca de 656Gb. Quando verificar o tamanho do diretório database1 em / var / lib / mysql em machine2, é em torno de 799G. Descanse todos os diretórios e arquivos com o mesmo tamanho. Verifiquei cada arquivo (ibd e frm) e comparei-os aos arquivos na máquina1, e cada um tem o mesmo tamanho. Nenhum arquivo oculto extra.
Então apagou todos os dados novamente, destruiu o Volume Lógico (/ dev / mapper / vgmysql-mysql) e os recriou. Rsync novamente e obteve os mesmos resultados, aumentando o uso do disco em 150Gb.
Verificados os parâmetros do sistema de arquivos (XFS) em ambas as máquinas, todos são iguais. Usou o comando ncdu e a diferença é clara:
Total disk usage: 864.3GiB Apparent size: 713.3GiB Items: 1500
O que está causando o uso do disco para aumentar tanto? O que estou perdendo aqui?
Não tenho certeza, mas talvez o seu MySQL esteja usando arquivos esparsos
Você pode tentar fazer o seu rsync com --sparse ou --inplace como explicado aqui: Arquivos rsync e esparsos