将MySQL数据库复制到另一台计算机

将MySQL数据库复制到另一台计算机,mysql,innodb,Mysql,Innodb,我正在尝试在另一台服务器上复制MySQL数据库。我停止服务器,对mysql目录加上焦油,将其复制到另一台服务器,然后卸载它。我将所有权限设置为与工作服务器相匹配,并复制了my.cnf文件,因此除了服务器特定的更改外,所有内容都是相同的 但是,当我尝试启动服务器时,会出现以下InnoDB错误: InnoDB: Operating system error number 13 in a file operation. This error means mysql does not have the

我正在尝试在另一台服务器上复制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。我可以访问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外部锁定--socket=/var/lib/mysql/mysql.sock

  • 如果所有这些都失败了,您可能可以尝试
    strace mysqld…
    查看它到底失败了什么。错误将在底部的某个地方

  • 更新2:的确很有趣。。。我看不出你的操作系统是什么。我通常不使用
    /sbin/service
    ,这对我来说有点神秘;在Mac电脑上,不推荐使用
    /System/Library/LaunchDaemons/mysqld.plist
    中带有配置文件的
    launchctl
    ,而在大多数Linux设备上,都使用
    /etc/init.d/mysqld
    。所以你可以在那里插入strace

    或者(未经测试,但manpage建议有可能),您可以尝试对服务调用进行扫描:

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

    这应该会生成文件
    straces.pid
    ,其中一个应该是mysqld的,希望您能在那里找到错误。

    这并不是对您问题的直接回答,但我建议您根据备份/恢复需要尝试这些程序之一

    Percona Xtrabackup: Mydumper:

    这两个工具都是很好的工具,都是免费和开源的,可以帮助您完全避免这个问题。
    希望这会有所帮助。

    为什么不从mysql控制台复制并导出所有内容,然后重新导入?您是否使用chown-R user.user文件夹递归更改文件的所有权?老实说,这更适合于True on ServerFault。但是,导出/导入需要大量的时间、空间和带宽。我不知道OP有什么样的数据,但是相信我,有一个非常大的数据库,这可不是件轻松的事。我的同事今天真的导入了数据,它将数据压缩到12克。有趣。带宽在任何方面都是个问题。。。您仍然需要将数据从一端传输到另一端,您可以在您所在的同一台机器上导出数据,只需通过导出的数据gzip发送,而gzip即使不是更小,也是相同的。关于带宽,您可能是对的。不过,我坚持准时。吐出和咀嚼SQL要比二进制拷贝慢得多,所以我完全理解OP希望这样做……我已经成功地完成了导出/导入过程。这需要很长时间。数据目录大约为160GB。我在找一个更快的方法。对你来说这是个好理由!如果目录所有权发生了变化,而内部也没有改变,那么它将失败。然后我有一些建议,可能会,也可能不会。作为mysql用户直接启动mysqld是可行的。失败的是使用/sbin/service启动它,mysqld StartHanks会尝试一下/etc/init.d/mysqld产生与/sbin/service相同的行为。它是CentOS,但我在Mac上开发,love launchctl.:)无论如何,如果你有
    init.d
    脚本,那么你可以编辑它并让它运行
    strace-ff-o straces mysqld…
    而不是普通的
    mysqld…
    。显然,如果您没有
    strace
    ,请先安装:)