Копирование базы данных MySQL на другую машину - PullRequest
1 голос
/ 12 июля 2010

Я пытаюсь сделать копию базы данных MySQL на другом сервере. Я останавливаю сервер, копирую каталог mysql, копирую его на другой сервер и распаковываю. Я установил все разрешения, соответствующие рабочему серверу, и скопировал файл my.cnf, чтобы все было так же, за исключением изменений, специфичных для сервера.

Однако, когда я пытаюсь запустить сервер, я получаю следующую ошибку InnoDB:

InnoDB: Operating system error number 13 in a file operation.
This error means mysql does not have the access rights to
the directory.
File name /var/lib/mysql/ibdata1
File operation call: 'open'.

Владельцем / группой для всех файлов является mysql. Я даже пытался изменить разрешения на + RW. Я могу su для пользователя mysql и получить доступ к файлу ibdata1 с помощью head.

РЕШЕНИЕ:

Проблема заключалась в том, что selinux был включен и препятствовал доступу к новым файлам.

Ответы [ 2 ]

3 голосов
/ 12 июля 2010

Глупый вопрос, но люди забывают: вы сказали, что проверили, что все файлы имеют одинаковые разрешения;Тем не менее, даже если в сообщении об этом сказано, возможно, вы забыли проверить права доступа к каталогу ?

ОБНОВЛЕНИЕ : еще два предложения:

  1. Вы можете попробовать вставить флаги --console и --log-warnings для большого количества отладочных выводов, что-то вроде этого (на моем Mac):

    / usr / libexec /mysqld --console --log-warnings --basedir = / usr --datadir = / var / lib / mysql --user = mysql --pid-file = / var / run / mysqld / mysqld.pid --skip-внешняя блокировка --socket = / var / lib / mysql / mysql.sock

  2. Если все остальное не помогло, вы, вероятно, можете попробовать strace mysqld ..., чтобы увидеть, в чем именно это дело.Ошибка будет где-то внизу.

UPDATE2 : Интересно, действительно ... Я не вижу, какая у вас ОС.Я обычно не использую /sbin/service, это немного загадочно для меня;на Mac он устарел в пользу launchctl с файлом конфигурации в /System/Library/LaunchDaemons/mysqld.plist, а в большинстве Linux-систем у вас есть /etc/init.d/mysqld.Таким образом, вы можете вставить туда strace.

Или (не проверено, но man-страница предполагает, что это возможно), вы можете попробовать разместить служебный вызов:

strace -ff -o straces /sbin/service start mysqld

Это должно привести к файлам straces.pidэто должно быть mysqld, и, надеюсь, вы найдете там свою ошибку.

0 голосов
/ 08 декабря 2011

Это не прямой ответ на ваш вопрос, но я бы порекомендовал попробовать одну из этих программ для ваших нужд резервного копирования / восстановления.

Percona Xtrabackup: https://launchpad.net/percona-xtrabackup Mydumper: http://www.mydumper.org/

Оба эти инструмента великолепны, бесплатны и открыты, и помогут вам полностью избежать этой проблемы.Надеюсь, это поможет.

...