Мой сервер MySQL содержит две большие базы данных по 100+ ГБ. Один был создан с innodb_file_per_table
а один не был. Тот, которого не было, был сброшен, готов к перезагрузке. Однако файл ibdata1 по-прежнему огромен, и у меня недостаточно свободного места. Обычный совет в этой ситуации - создать дамп и удалить каждую базу данных, остановить MySQL, затем удалить ibdata1 и журналы транзакций, а затем перезагрузить базы данных.
Мой конкретный вопрос: могу ли я оставить базы данных, созданные с помощью innodb_file_per_table
в одиночестве? Или они будут уничтожены, когда я удалю ibdata1, даже если все их файлы разделены?
Я не могу позволить себе отключить эту базу данных для сброса и перезагрузки. И поскольку это уже правильно сделано с отдельными файлами для каждой таблицы, это было бы довольно бесполезно.
Мой конкретный вопрос: могу ли я оставить базы данных, созданные с помощью
innodb_file_per_table
в одиночестве? Или они будут уничтожены, когда я удалю ibdata1, даже если все их файлы разделены?
Монолитный ibdata1
содержит некоторые общесистемные данные. Возможно, вы столкнетесь с потерей данных, пытаясь удалить их вручную, не избавившись сначала от всех существующих баз данных.
(Есть способы выйти из такой ситуации, но зачем ставить себя в такое положение? Следуйте инструкциям, которые вы получили, и сбросьте ВСЕ ваши базы данных, перестройте установку MySQL и перезагрузите их. Это сейф выбор.)
Я не могу позволить себе отключить эту базу данных для сброса и перезагрузки.
Вам придется это себе позволить. Это всего лишь одно отключение - запланируйте это и сделайте это.
Наш постоянный эксперт по MySQL подтверждает, что это единственный (безопасный) способ уменьшить ibdata1
и я полагаюсь на его опыт в этих вопросах.
(Я бы также посоветовал прочитать другие его сообщения, связанные с этим ответом, прежде чем планировать окно отключения. Вы также можете очистить столько потенциальных проблем, сколько сможете, так как вам придется использовать окно отключения ... )
Если вы используете MySQL 5.6, вы можете воспользоваться новой функцией, которая называется переносные табличные пространства.
Если вы не используете 5.6, вы можете использовать инструмент innobackupex из Percona Xtrabackup.. Это требует использования XtraDB (модифицированный движок InnoDB от Percona, часть Percona Server). Импорт и экспорт отдельных таблиц
Если вы не используете 5.6 и не можете запустить Percona Server
если база данных должна быть запущена, поскольку выбор имеет решающее значение, и у вас есть быстрое хранилище (например, объем iops на ec2), один из способов минимизировать время простоя - остановить mysql, rsync поверх каталога данных на быстрый том, а затем вернуть вверх мастер в режиме только для чтения.
тогда у вас будет время для дампа / импорта и так далее, пока ваши старые главные серверы работают, выбирая qrys. после того, как дамп / импорт будут выполнены и второе поле готово к записи, просто перейдите к нему в коде уровня вашего приложения.
если вашему мастеру постоянно нужна запись, вы не можете использовать это. если у вас есть выделенные ведомые устройства, вы можете заблокировать ведущее устройство, исправить ведомое устройство и повысить его до ведущего.