mysql - 将MySQL数据库复制到另一台机器

标签 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 access rights to
the directory.
File name /var/lib/mysql/ibdata1
File operation call: 'open'.

所有文件的所有者/组都是 mysql。我什至尝试将权限更改为 a+rw。我可以 su 到 mysql 用户并使用 head 访问 ibdata1 文件。

解决方案:

问题是 selinux 已启用并阻止访问新文件。

最佳答案

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

更新:另外两个建议:

  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。

或者(未经测试,但联机帮助页表明这是可能的)您可以尝试跟踪服务调用:

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

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

关于mysql - 将MySQL数据库复制到另一台机器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3229917/

相关文章:

mysql - 索引表以加速排序的最佳方法

php - 在不循环 300 个查询的情况下从表中获取值的更好方法

mysql - 经常无法连接到数据库

删除 ibdata1 后 MySQL 表消失了

c# - 有什么方法可以使 EntityFramework 的 SaveChanges() 方法跳过一个条目(如果它已经存在)?

php - 如何在 html 上发出 iframe 请求?

mysql - 每次备份后 Sql 数据库都会损坏

mysql - InnoDB隐藏自增和双主

php - 页面加载时不可见 "No result found"

mysql - 是否可以优化查询以便不需要运行分析?