代码之家  ›  专栏  ›  技术社区  ›  Brent Baisley

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

  •  1
  • Brent Baisley  · 技术社区  · 15 年前

    我正在另一台服务器上复制一个MySQL数据库。我停止服务器,对mysql目录进行tar操作,将其复制到另一个服务器,然后将其解压。我设置了与工作服务器匹配的所有权限,并复制了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并阻止访问新文件。

    2 回复  |  直到 15 年前
        1
  •  3
  •   Amadan    15 年前

    一个愚蠢的问题,但是人们忘记了:您说您检查了所有文件是否具有相同的权限;尽管消息中都这么说,但您可能忘记检查包含 目录 ?

    更新 :还有两个建议:

    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 ... 看看它到底失败了什么。错误将在底部某处。

    更新2 :真有趣。。。我看不出你的操作系统是什么。我通常不使用 /sbin/service ,这对我来说有点神秘;在Mac上,它被弃用了,取而代之的是 launchctl 配置文件位于 /System/Library/LaunchDaemons/mysqld.plist ,并且在大多数Linux机器上 /etc/init.d/mysqld . 所以你可以在那里插入strace。

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

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

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

        2
  •  0
  •   pcrews    13 年前

    这并不能直接回答您的问题,但我建议您根据备份/还原需要尝试其中一个程序。

    Percona Xtrabackup公司: https://launchpad.net/percona-xtrabackup 我的翻车机: http://www.mydumper.org/

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

    推荐文章