LinuxForum.Fans
Тема

Перенести базу mysql

Автор: u__________17 18 сообщений 7230 просмотров
#176598

Need help

Нужно перенести базы mysql на другой диск. Системы Scientific Linux 6.0
Полазил по сети, посмотрел.
-Нашёл /etc/my.cnf, убедился, что больше никаких my.cnf в системе не видно. Далее сделал, как описано.
- остановил mysqld
- вписал в my.cnf новую папку datadir = /home/server02/disk2/mysql, так же поменял и mysql.sock
- перенёс в эту папку данные, дал на неё права apach'у (потом эксперементировал и с модом 777, результат не менялся)
- запускаю mysqld – не запускается.

Полез искать возможную причину и нашёл в mysqld следующий кусок:

Показать
# extract value of a MySQL option from config files
# Usage: get_mysql_option SECTION VARNAME DEFAULT
# result is returned in $result
# We use my_print_defaults which prints all options from multiple files,
# with the more specific ones later; hence take the last match.
get_mysql_option(){
result=`/usr/bin/my_print_defaults "$1" | sed -n "s/^--$2=//p" | tail -n 1`
if [ -z "$result" ]; then
# not found, use default
result="$3"
fi
}

get_mysql_option mysqld datadir "/var/lib/mysql"
datadir="$result"
get_mysql_option mysqld socket "$datadir/mysql.sock"
socketfile="$result"

в баше — полный ноль, но я правильно понимаю, что скрипт вытаскивает дефолтные параметры , сравнивает их с тем, что записано в системных переменных из my.cnf, и если что-то там у него не сходится, то берёт значение из дефлотного?
И главный вопрос, как правильно перенести базу, что я делаю неправильно, и что нужно сделать?

#176601

Что-то вы в дебри совсем полезли. Какой баш?

Давайте конкретизируем задачу =). Вам просто нужно изменить рабочую папку для mysql? Или что-то другое нужно сделать? =).

#176606

Для начала посмотрите сюда http://www.ubuntu-howto.info/howto/how-to-move-mysql-databases-to-another-location-partition-or-hard-drive
Так и делали? Еще посмотрите комментарии внизу про apparmor и т.д.

Потом разберитесь с правами доступа в новой локации, через все ли директории юзеру mysql (или из под какого у вас там юзера mysql работает) можно проходить и т.д. (Смотреть у всех папок в пути)

запускаю mysqld – не запускается.
Ошибки из лога "в студию!"
#176813

Вам просто нужно изменить рабочую папку для mysql? Или что-то другое нужно сделать?

Нужно просто переснести все базы в другую папку. Она физически находится на другом райде.

Для начала посмотрите сюда http://www.ubuntu-howto.info/howto/how- … hard-drive
Так и делали? Еще посмотрите комментарии внизу про apparmor и т.д.

Почти всё так и делал, за исключением apparmor'а, так как банально не нашёл его в scientific. В Ubunte (специально проверил) есть, а тут нету. Может он как-то по другому называется?

Лог:

Показать
110714 21:05:12 mysqld_safe mysqld from pid file /var/run/mysqld/mysqld.pid ended
110714 21:06:12 mysqld_safe Starting mysqld daemon with databases from /home/server02/disk2/mysql
/usr/libexec/mysqld: Table 'plugin' is read only
110714 21:06:12 [ERROR] Can't open the mysql.plugin table. Please run mysql_upgrade to create it.
110714 21:06:12 InnoDB: Started; log sequence number 0 44233
110714 21:06:12 [ERROR] Fatal error: Can't open and lock privilege tables: Table 'host' is read only
110714 21:06:12 mysqld_safe mysqld from pid file /var/run/mysqld/mysqld.pid ended

plugin table становится доступна только на чтение именно после переноса, хотя в конечной директории все права соблюдены.

Потом разберитесь с правами доступа в новой локации, через все ли директории юзеру mysql (или из под какого у вас там юзера mysql работает) можно проходить и т.д. (Смотреть у всех папок в пути)

Можно здесь немного поподробнее. На данный момент для mysql является собственником конечно директории, весь путь до неё ему доступен на чтение. Это неправильно?

#176824

Ну во всяком случае про рид онли он у Вас точно ругается в логах. Посмотрите как выставлены пермиссии на старую локацию и сделайте так же. Смотрите логи в первую очередь. именно там написано почему демон не может стартовать. Особенно обращайте внимание на сообщения типа ERROR.
P.S.
Сорри за то что коряво написал. Пишу из поезда с коммуникатора.

#177732

Базу таки удалось перенести. Но вот события сопровождавшие опыты по переносу у меня логического объяснения не имеют.
Итак,
- перенесли базу , подправили в /etc/my.cnf переменную datadir - получили сообщения о том, что файлы mysql открыты только на чттение. Все попытки что-либо исправить в данной конфигурации успеха не имели. Пути проверялись по доступу, прописывались варианты 777, но толку не было.
- в порядке эксперимента была подправлена переменная socket
socket = /home/server02/disk2/mysql/mysql.sock
И, о чудо! mysqld запустился без сообщений об ошибках. Зато теперь попытка запустить mysqladmin вызывала сообщение об ошибке - не был доступен сокет.
- Итерация номер три - вернули переменной socket старое значение - и всё заработало.

Если кто-нибудь объяснит логику событий, буду благодарен.

#177756

Чудо!!!!!
smile

#178034

А если внимательнее прочитать это? :)


get_mysql_option mysqld datadir "/var/lib/mysql"
datadir="$result"
get_mysql_option mysqld socket "$datadir/mysql.sock"
socketfile="$result"
#178038
Denlookh написал:
А если внимательнее прочитать это? :)


get_mysql_option mysqld datadir "/var/lib/mysql"
datadir="$result"
get_mysql_option mysqld socket "$datadir/mysql.sock"
socketfile="$result"

Что это значит что чуда не было. ОБИДНО. :(

#178287
из бывших написал:
Нужно перенести базы mysql на другой диск. Системы Scientific Linux 6.0
Полазил по сети, посмотрел.

бред нашли :(

1) подымаем MySQL сервер на компе №2. (в т.ч. запускаем).
2) на компе №1: mysqldump -A -u root -p >db.sql
3) переносим db.sql на №2
4) на компе №2: cat db.sql | mysql -B -u root -p

всё.

ЗЫЖ

Если кто-нибудь объяснит логику событий, буду благодарен.

нетрадиционным сексом не занимаюсь.

#178531


на компе №1....

на компе №2...

oO

#178551

из бывших, ну это общий случай: перенести базу с компа №1 на комп №2.

никто не мешает вам это делать в одном компьютере. Правда такое редко бывает, например я так переносил, когда у меня сдох HDD с /var, а следовательно с базой. Я заменил диск, и развернул бекап. в бекапе был в т.ч. и db.sql :D

#179174

Док, а при чем тут переподъем мускула на другой машине и размотка базы из дампа?
Тут все просто- перенос бинарных файлов с бинарным логом в другие директории файловой и перезапуск демона с изменением директории работы с базами.
Только вот в конфиге ТС не заметил директивы пути к сокету.

#179183

да мне в общем_то...
Делайте как хотите, мой способ cамый бысрый и надежный.

по вашему я делал. Не нужно.

#179186
Denlookh написал:
Тут все просто

конечно просто! а кодировка где выставляется? в скольких местах? oO
я уж не говорю про всё остальное... не...

#179271
drBatty написал:
[quote=Denlookh]Тут все просто

конечно просто! а кодировка где выставляется? в скольких местах? oO
я уж не говорю про всё остальное... не...[/quote]

Переносятся же бинарные данные, просто тупо cp из одной директории в другую, конфиг, настройки таблиц и баз, данные остаются. Достаточно просто сказать мускулу в какой директории искать базы, а в данном конкретном случае еще и pid-файл. Это в пределах одного сервера.

А если с сервера на сервер, то безусловно- дао дампа тут рулит. И если сервера имеют разные настройки, то тут уже и обеспечен секс с alter collate, set names и тд.

#179383
Denlookh написал:
Переносятся же бинарные данные, просто тупо cp из одной директории в другую, конфиг, настройки таблиц и баз, данные остаются.

вот тут-то и грабли: кто вам сказал, что конфиги идентичные?
прочитайте первый пост - всё и началось с того, что ТС наступил на эти грабли.

Denlookh написал:
А если с сервера на сервер, то безусловно- дао дампа тут рулит.

вообще-то, я полагаю, что mysql/ - это часть сервера. Там не только база вообще-то. Потому в данном случае, ТС куда как быстрее-бы перенёс дамп, без лишних телодвижений. Т.е. после правки my.cnf ему достаточно было-бы сказать mysql_install_db, и залить дамп в новую базу.

#200089

mysqldump -u root -p bases1 > /tmp/bases1.txt
Где bases1 база в MYSQL, bases1.txt произвольное имя здесь
Предупреждение - такая раскрутка своего сайта - это реклама.
Нарушение 3.2.3. см. Правила. SUSE_user.

Войдите или зарегистрируйтесь, чтобы ответить.