Уважаемые коллеги, большая просьба помочь. Задача: перенести файлы БД mysql 4.3 с одного раздела в другой, т.к. база растет, а текущий раздел ФС оказался недостаточно большим.Просьба подсказать, правильная ли стратегия.
1. Останов базы
2. Правка конфига, изменение пути на новый.
3. перенос файлов
4. запуск базы.Вероятно, этот способ - не правильный, просьба подсказать, как выполнить перенос наиболее корректным способом.
>[оверквотинг удален]
>
>Просьба подсказать, правильная ли стратегия.
>
>1. Останов базы
>2. Правка конфига, изменение пути на новый.
>3. перенос файлов
>4. запуск базы.
>
>Вероятно, этот способ - не правильный, просьба подсказать, как выполнить перенос наиболее
>корректным способом.А если попробовать сделать дамп базы и потом поменяв настройки сервера из дампа базу восстановить ?
>[оверквотинг удален]
>>1. Останов базы
>>2. Правка конфига, изменение пути на новый.
>>3. перенос файлов
>>4. запуск базы.
>>
>>Вероятно, этот способ - не правильный, просьба подсказать, как выполнить перенос наиболее
>>корректным способом.
>
>А если попробовать сделать дамп базы и потом поменяв настройки сервера из
>дампа базу восстановить ?Т.е. это наиболее грациозное решение, через дамп? Может есть какой-либо гайд?
Кстати, как правильно выполнить дамп, чтобы во время его снятия - не помещалось ничего в базы сервера, т.е. не происходило записи в различные базы?
>[оверквотинг удален]
>>>корректным способом.
>>
>>А если попробовать сделать дамп базы и потом поменяв настройки сервера из
>>дампа базу восстановить ?
>
>Т.е. это наиболее грациозное решение, через дамп? Может есть какой-либо гайд?
>
>Кстати, как правильно выполнить дамп, чтобы во время его снятия - не
>помещалось ничего в базы сервера, т.е. не происходило записи в различные
>базы?Если база в MyIsam - должен сработать простой перенос, если innodb - нужно делать дамп..
--
mysqldump --no-autocommit --default-character-set=cp1251 -q -e $DBNAME > $BACKUPPATHТаким образом я делаю бекап 11гиговой базы, не останавливая её: mysqldump лочит таблицы на время своей работы.
p.s. Правда, это всё относится к mysql 5.x - но не думаю, что в данной ситуации это играет роль...
.
>[оверквотинг удален]
>нужно делать дамп..
>
>--
>mysqldump --no-autocommit --default-character-set=cp1251 -q -e $DBNAME > $BACKUPPATH
>
>Таким образом я делаю бекап 11гиговой базы, не останавливая её: mysqldump лочит
>таблицы на время своей работы.
>
>p.s. Правда, это всё относится к mysql 5.x - но не думаю,
>что в данной ситуации это играет роль...Большое спасибо! Буду сейчас пробовать...
1. Останавливаем базу
2. Переносим файлы на новой место
3. Делаем символическую ссылку, что бы путь к фалам остался тем же
4. Запускаем базу и радуемсяP.S. Извините, но через дамп делать перенос в пределах одной машины/версии как-то немного глупо что ли, если разве время некуда девать, IMHO.
>1. Останавливаем базу
>2. Переносим файлы на новой место
>3. Делаем символическую ссылку, что бы путь к фалам остался тем же
>
>4. Запускаем базу и радуемся
>
>P.S. Извините, но через дамп делать перенос в пределах одной машины/версии как-то
>немного глупо что ли, если разве время некуда девать, IMHO.Ну тогда, все-таки подскажите, как делать правильно - по хрестоматии, так сказать...
>[оверквотинг удален]
>>2. Переносим файлы на новой место
>>3. Делаем символическую ссылку, что бы путь к фалам остался тем же
>>
>>4. Запускаем базу и радуемся
>>
>>P.S. Извините, но через дамп делать перенос в пределах одной машины/версии как-то
>>немного глупо что ли, если разве время некуда девать, IMHO.
>
>Ну тогда, все-таки подскажите, как делать правильно - по хрестоматии, так сказать...
>Не множьте сущностей...
Делайте как написали в первом посте.
>[оверквотинг удален]
>
>Просьба подсказать, правильная ли стратегия.
>
>1. Останов базы
>2. Правка конфига, изменение пути на новый.
>3. перенос файлов
>4. запуск базы.
>
>Вероятно, этот способ - не правильный, просьба подсказать, как выполнить перенос наиболее
>корректным способом.когда у вас база ещё увеличиться - будете повторять это шаманство?
IMHO Volume Managers (типа lvm/gvinum и т.п.) - единственный правильный способ. туда можно допихивать диски и увеличивать разделы (resize2fs, growfs) до безобразият.е. план такой
создать группу томов
застопить базу
добавить раздел с базой
добавить другой диск/раздел
расширить партицию на кот сидит база (может расширить слайс/раздел)
запустить базу.впоследствии прийдётся только стопить базу допихивать диски расширять партицию и снова запускать базу.
вроде всё
а чтобы дампить инодбшную базу по быстрому используйте
--opt --single-transaction --flush-logs
>[оверквотинг удален]
>расширить партицию на кот сидит база (может расширить слайс/раздел)
>запустить базу.
>
>впоследствии прийдётся только стопить базу допихивать диски расширять партицию и снова запускать
>базу.
>
>вроде всё
>
>а чтобы дампить инодбшную базу по быстрому используйте
>--opt --single-transaction --flush-logsСпасибо большое за развернутый ответ! Единственно, он вызывает у меня массу других вопросов. Если не сложно, подскажите хотя бы на следующий:
1. Есть ли возможность перейти на LVM, при этом нет свободного места, т.е. нет ли какого хитрого способа?
>[оверквотинг удален]
>>вроде всё
>>
>>а чтобы дампить инодбшную базу по быстрому используйте
>>--opt --single-transaction --flush-logs
>
>Спасибо большое за развернутый ответ! Единственно, он вызывает у меня массу
>других вопросов. Если не сложно, подскажите хотя бы на следующий:
>
>1. Есть ли возможность перейти на LVM, при этом нет свободного места,
>т.е. нет ли какого хитрого способа?свободное место всё таки нужно, так как партиции прийдётся переразмечать перед добавлением. правда нужно его ровно столько сколько база занимает (примерно).
почитайте lvm howto там всё это есть в подробностяхгрубый пример - сперва берём пустую, скажем /dev/hdb1
база например на /dev/hda3
fdisk'ом ставим тип партиции 8e
создаём physical volume - pvcreate /dev/hdb1
создаём volume group - vgcreate vg00 /dev/hdb1
создаём logical volume - lvcreate --name lv00 --size 1G vg00
затем создать ext3/reiserfs на /dev/vg00/lv00
>затем её замонтировать и скопировать содержимое раздела с базой<fdisk'ом ставим тип партиции 8e на ту где раньше была база
добавляем vgextend vg00 /dev/hda3
потом экстендим logical volume - lvextend --size +1G /dev/vg00/lv00
а потом ресайзим /dev/vg00/lv00 -resize2fs/resize_reiserfs
всёуф
вроде фсё
может где то ошибся но в общем примерно так
Вы не указали основной момент - насколько критичен по времени простой сервера, а также размер и тип баз. Если время простоя равное времени копирования сырых файлов вас устраивает, то делаем следующим образом
1. запрос flush tables with read lock
2. копирование всех файлов относящихся к базам(в общем случае все в /var/lib/mysql)
3. запрос unlock tables
4. запуск второго экземпляра сервера с соответствующими опциями и проверка работоспособности
5. если все в порядке правим конфиг с рестартом основного сервера.Не надо использовать mysqldump. Это очень медленно и при неверном использовании может привести к искажению информации, также требует уйму дополнительного места.