2010-07-12 18 views
1

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

Однако, когда я пытаюсь запуска сервера, я получаю следующее сообщение об ошибке: 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 с помощью главы.

РЕШЕНИЕ:

Проблема SELinux была включена, и предотвращение новых файлов от несанкционированного доступа.

+1

Почему не копирование из консоли mysql, экспортирующего все это и последующее повторное импортирование? вы сделали chown -R user.user папку, чтобы рекурсивно изменить владельца файла? Чтобы быть честным, это более подходит для http://www.serverfault.com – Prix

+1

True on ServerFault. Тем не менее, экспорт/импорт занимает * lots * времени и * lots * пробела * и * * lots * полосы пропускания. Я не знаю, какие данные у OP есть, но поверьте мне, с базой данных любого значительного размера, это не пикник. Мой коллега фактически импортировал данные сегодня, а это _gzips_ (!) - 12G. Весело. – Amadan

+0

будет проблемой в любом случае ... вам все равно нужно будет передавать данные с одной стороны на другую, вы можете экспортировать ее на том же компьютере, что и вы, и просто пересылать экспортированные данные gzip, а это будет то же самое если не меньше. – Prix

ответ

3

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

UPDATE: еще два предложения:

  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-external-locking --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.

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

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

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

+0

хороший аргумент cookie для вас! если права собственности на каталоги изменены, если вы не выполняете внутренний вызов, и он не сработает. – Prix

+1

хороший момент, но я не забыл эту часть. –

+0

Тогда у меня есть еще несколько предложений, которые могли бы или не могли выделиться. – Amadan

0

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

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

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

Смежные вопросы