我正在尝试在另一台服务器上制作 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。我什至尝试将权限更改为 a+rw。我可以 su 到 mysql 用户并使用 head 访问 ibdata1 文件。
解决方案:
问题是 selinux 已启用并阻止访问新文件。
最佳答案
一个愚蠢的问题,但人们忘记了:你说你检查过所有文件都具有相同的权限;尽管如此,即使它在消息中这么说,您是否可能忘记检查包含目录的权限?
更新:另外两个建议:
您可以尝试插入
--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
如果所有其他方法都失败了,您可以尝试
strace mysqld ...
来查看到底是什么失败了。错误将在底部某处。
UPDATE2:确实很有趣……我看不出你的操作系统是什么。我一般不使用/sbin/service
,这对我来说有点神秘;在 Mac 上,它已被弃用,取而代之的是 launchctl
和 /System/Library/LaunchDaemons/mysqld.plist
中的配置文件,而在大多数 Linux 机器上你有 /etc/init.d/mysqld
.所以你可以在那里插入 strace。
或者(未经测试,但联机帮助页表明这是可能的)您可以尝试跟踪服务调用:
strace -ff -o straces /sbin/service start mysqld
这应该会生成文件 straces.pid
,其中一个应该是 mysqld 的,希望您会在那里找到您的错误。
关于mysql - 将MySQL数据库复制到另一台机器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3229917/