Назад | Перейти на главную страницу

Как переместить каталог данных MySQL с минимальным временем простоя?

Допустим, у меня есть раздел sda2 Прикреплено к /var и он почти полон. У меня второй диск sdb чей раздел sdb1 Я хочу установить как /var.

Теперь, когда работающая служба (mysql) использует /var все время есть способ переключиться без остановки службы?

Настройте второй сервер как подчиненный. Вы, вероятно, захотите настроить главный / главный, чтобы любой хост мог выполнять записи. Переместите IP на эту вторую машину. Теперь вы можете выполнять обслуживание на первой машине. Это минимизирует время простоя службы MySQL.

В первую очередь: Сделайте, как сказал свергнутый вагон, и настройте подчиненный сервер.

Но как второстепенный момент: вам не нужно перемещать MySQL (если только это не единственное, что занимает значительное место на /var): Если у вас много мусора в /var/log, /var/spool, /var/wwwи т.д., вы также можете переместить их в отдельные файловые системы.

На самом деле MySQL - это, вероятно, ваша 1000-фунтовая горилла на разделе, но если вам ДЕЙСТВИТЕЛЬНО не хватает места (и просто удаление других вещей не вариант), вы можете переместить его в качестве временной меры, пока вы включаете свой подчиненный сервер. .

Сожалею, что ответ отрицательный, нет. Если вы начнете перемещать файловую систему, пока mysql ее использует, ваша база данных будет полностью закрыта.

Согласившись с ответом JennyD, нет возможности сделать это, не выключив базу данных.

Однако, если сама база данных mysql не так велика, а скорость ввода-вывода системы достаточно высока, вы можете легко сделать это с минимальным временем простоя, просто связав несколько команд вместе и запустив их одновременно, использование будет низким. Я успешно проделал это несколько раз для критически важных баз данных mysql. Возможно, объявите об обслуживании и проведите несколько тестовых прогонов на тестовой системе, чтобы узнать, сколько времени это займет.

Что-то вроде:

/etc/init.d/mysql stop && mv /var/lib/mysql/database /mnt/newdisk/mysql/ && ln -s /mnt/newdisk/mysql/database /var/lib/mysql/database && /etc/init.d/mysql start

Это немного грубо, но эффективно. И практично во многих случаях (вероятно, во всех, кроме наиболее критически важных систем, которые "никогда не могут выйти из строя"). «&&» в команде гарантирует, что если предыдущая команда завершится неудачно, она не будет продолжена.