У вас есть машина MySQL (percona, 14.14 Distrib 5.6.28-76.1) с 1 ТБ SSD, на которой размещено около 712 ГБ данных mysql. MySQL имеет 4 базы данных, из которых, скажем, database1 занимает много места, 656 ГБ. Назовем эту машину machine1.
Хотите перестроить другую машину MySQL DB, скажем, machine2, которая имеет точно такую же конфигурацию. Итак, сделал снимок LVM на machine1.
Команда 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
Смонтировал раздел SSD машины2 (/ var / lib / mysql) на машину1, используя параметр монтирования экспорта NFS, и выполнил rsync из снимка LVM на удаленное монтирование. После монтирования удаленного раздела и выполнения rsync команда df -h показала следующий вывод на машине1.
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 общий размер данных увеличивается на 150 ГБ. При сравнении размеров каждого отдельного файла и количества файлов все одинаковы. Размеры проверены с помощью ls -l
и du
команда. При проверке размера раздела на 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, и снова тот же результат. Теперь, всего это 4 базы данных, которые хранятся в MySQL, давайте затем вызовем database1, database2 .... и database4. Каждая база данных имеет свой собственный каталог в / var / lib / mysql.
Как упоминалось ранее, database1 имеет самый большой размер, около 656 ГБ. При проверке размера каталога database1 в / var / lib / mysql на машине2 он составляет около 799 ГБ. Остальные все каталоги и файлы имеют одинаковый размер. Проверил каждый файл (ibd и frm) и сравнил их с файлами на machine1, и каждый из них имеет одинаковый размер. Никаких лишних скрытых файлов.
Поэтому снова удалил все данные, уничтожил логический том (/ dev / mapper / vgmysql-mysql) и воссоздал их. Сделал rsync снова и получил те же результаты, использование диска увеличилось на 150 ГБ.
Проверены параметры файловой системы (XFS) на обеих машинах, все одинаковы. Используется команда ncdu, и разница очевидна:
Общее использование диска: 864,3 ГБ Видимый размер: 713,3 ГБ Элементы: 1500
Что приводит к такому увеличению использования диска? Что мне здесь не хватает?
Я не уверен, но, возможно, ваш MySQL использует разреженные файлы
Вы можете попробовать выполнить свою rsync с помощью --sparse или --inplace, как описано здесь: Rsync и разреженные файлы