2010-07-12 121 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用户并使用head访问ibdata1文件。

SOLUTION:

的问题SELinux的启用和防止新的文件被访问。

+1

为什么不从mysql控制台复制导出它并稍后重新导入?你是否已经做了一个chown -R user.user文件夹来递归地更改文件的所有权?说实话,这更适合于ServerFault上的http://www.serverfault.com – Prix 2010-07-12 15:57:04

+1

True。但是,导出/导入需要很多时间和很多空间以及很多带宽。我不知道OP有什么样的数据,但相信我,有任何大小的数据库,这不是野餐。我的同事实际上是在今天导入数据,并且它是_gzips_(!)到12G。乐趣。 – Amadan 2010-07-12 15:59:02

+0

带宽将以任何方式成为问题......您仍然需要将数据从一侧传输到另一侧,您可以将其导出到您所在的同一台机器上,而只需通过导出的数据gzip将其导出即可如果不是更小。 – Prix 2010-07-12 16:00:57

回答

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。

或(未经测试,但manpage建议有可能),你可以尝试stracing服务电话:

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

这应该产生的文件straces.pid,其中之一应该mysqld的公司,并希望你会发现你的错误那里。

+0

适合你的好参数cookie!如果目录所有权改变了,那么内部链接就会失败。 – Prix 2010-07-12 15:59:18

+1

好点,但我没有忘记那部分。 – 2010-07-12 16:24:10

+0

然后我有更多的建议,可能会或可能不会平息。 – Amadan 2010-07-12 17:45:19

相关问题