Снимки LVM очень страшны для InnoDB при определенных обстоятельствах.Почему?
Если у вас отключен innodb_file_per_table , в ibdata1 будет все и его бабушка.Что живет в ibdata1?Четыре вещи:
- Страницы данных
- Индексные страницы
- Метаданные (например, список идентификаторов таблиц-хранилищ)
- Данные MVCC
Если вы пытаетесь выполнить моментальные снимки LVM в среде БД с интенсивной записью, отключив innodb_file_per_table, вы можете выстрелить себе в ногу.Для моментального снимка LVM требуется, чтобы файл ibdata1 был хорошо объединен заранее.
Недавно я провел эксперимент следующим образом:
У клиента в компании, занимающейся веб-хостингом моего работодателя, возникают следующие проблемы с установкой MySQL:
- innodb_file_per_table off
- 1,4 ТБ ibdata1
- только 29 ГБ свободно в файловой системе ibdata1
- ext3 (ограничение размера отдельного файла 2 ГБ, ярк)
Я хотел настроить MySQL Slave, rsycning папку / var / lib / mysql на другой сервер БД .Когда rsync был выполнен на ibdata1 без простоя, это заняло 42 часа.Вторая rsync против ibdata1 заняла 84 часа, обнаружила только 220 ГБ изменений и была выполнена только на 15%.Я прервал эту миссию.
Снимок LVM может работать намного лучше, чем rsync.Несмотря на это, любой снимок LVM с очень большим ibdata1 будет подвержен тем же проблемам.
Если вы используете снимок LVM, используйте следующие параметры:
- OPTION 01) Используйте innodb_file_per_table,Снимки LVM будут вам нравиться, потому что они будут работать с небольшими файлами. Вы также можете постоянно сокращать ibdata1 .
- ВАРИАНТ 02) Использовать репликацию MySQL и делать снимки LVM на подчиненном устройстве
С MySQLВедомый репликации вы можете
STOP SLAVE;
(если у вас есть --skip-slave-start в my.cnf) service mysql stop
- выполнитьLVM snpshot
service mysql start
START SLAVE;
(если у вас есть --skip-slave-start в my.cnf)
Таким образом, эти LVMПроблемы со снимками никогда не увидят свет на Production Master.
Попробуйте и получайте удовольствие от этого !!!