将 mysql innodb 数据分区从一台计算机移动到另一台计算机

将 mysql innodb 数据分区从一台计算机移动到另一台计算机

/etc/mysql/conf.d/myserver:

[mysqld]
innodb_file_per_table
datadir          = /elastidb/lib/mysql
#log-bin          = /elastiblockdb/log/mysql/mysql-bin.log

general_log      = true
log = /elastiblockdb/log/mysql/mysql_general.log

log-error        = /elastiblockdb/log/mysql/mysql_error.log
max_binlog_size  = 1000M
log-slow-queries = /elastiblockdb/log/mysql/mysql-slow.log
long_query_time  = 10
innodb_buffer_pool_size = 4500M
innodb_additional_mem_pool_size = 200M
innodb_log_file_size = 64M
innodb_log_buffer_size = 8M
innodb_flush_log_at_trx_commit = 2

我在亚马逊服务器上有两台相同的 ubuntu 机器。其中两台机器具有相同的 /etc/mysql 配置文件。问题是,当我在一台服务器上卸载 /elastidb(mysql 数据)并在另一台服务器上重新安装它时,当我尝试在另一台服务器上启动 mysql 时出现以下错误:

/usr/sbin/mysqld: Can't find file: './mysql/plugin.frm' (errno: 13)
091104 13:53:13 [ERROR] Can't open the mysql.plugin table. Please run mysql_upgrade to create it.
091104 13:53:14  InnoDB: Operating system error number 13 in a file operation.
InnoDB: The error means mysqld does not have the access rights to
InnoDB: the directory.
InnoDB: File name ./ibdata1
InnoDB: File operation call: 'open'.
InnoDB: Cannot continue operation.
091104 13:53:14 mysqld_safe mysqld from pid file /var/run/mysqld/mysqld.pid ended

当我从配置文件中删除指令 datadir 时,mysql 服务器启动了,但并没有从我想要的位置加载适当的数据库数据。

我希望能够快速将 mysql 数据存储从一台机器移动到另一台机器。可能是什么问题?

两台机器都运行的是 ubuntu 9.04 jaunty 64 位。

答案1

  1. 这个错误是否mysql/plugin.frm在两台机器上都发生?我猜是的。

    datadir 是否来自 5.1 之前的安装?运行mysql_upgrade以摆脱它。

  2. 即使使用innodb_file_per_tableMySQL仍然会创建单个共享表空间。

    您提供的配置中缺少innodb_data_home_dirinnodb_data_file_path变量,这应该意味着在您的下创建了一个 10M 自动扩展表空间datadir。但如果第二台机器抱怨它丢失,那么它表明它可能不在您的下datadir

    ibdata1我建议在第一台(工作)机器上寻找此文件( )。如果它存在于之外datadir,则关闭 MySQL,移动它并配置这些变量。

答案2

我遇到了类似的问题(相同的错误消息,但在 Ubuntu 服务器 10.04 上,我将 mysql datadir 更改为指向 /opt/mysql)。

问题在于 apparmor 阻止了 /usr/sbin/mysqld 读取 /opt/mysql 的尝试。我发现了以下几行:

type=1503 audit(1291916635.209:18):  operation="open" pid=1201 parent=1 profile="/usr/sbin/mysqld" requested_mask="r::" denied_mask="r::" fsuid=105 ouid=105 name="/opt/mysql/mysql/plugin.frm"
mysql main process (928) terminated with status 1

在我的 /var/log/syslog 中。

我编辑了 /etc/apparmor.d/usr.sbin.mysqld,将“/var/lib/mysql”的所有实例替换为“/opt/mysql”。

此后mysql正常启动。

答案3

就我而言,问题出在 apparmor 上。由于我的机器仅用于测试,因此我选择了最简单的方法来解决它:

apt-get remove apparmor

答案4

mysql/plugin.frm 是一个存储在数据文件夹中的文件,如果你用它来链接 mysql,则链接 c:\programdata\mysql\mysql server 5.1\data\dir,如果找不到文件,则重新安装 mysql,它是 Visual Basic 文件

相关内容