3

我的意思是复制单个 MyISAM 表文件是:(
关闭 mysqld 并将 .frm、.myd 和 .myi 文件从一个数据库文件夹复制到另一个)


问题:
(a)我可以使用这种方式从一个数据库文件夹备份 MySQL 数据库文件夹服务器到另一个具有不同 MySQL 版本的服务器?

(b) 这个备份文件可以移动到不同的操作系统吗?(例如:debian 到 centos)

4

5 回答 5

7

只有服务器版本之间的文件级复制 MyISAM 表具有相同的:
- CPU 'endian' ( SPARC != x86 )
- MySQL 版本无需转换即可升级(由于索引结构,5.0.48 复制到 5.0.52 不好更改,但 5.0.52 复制到 5.1.45 有效)。

当心竞争条件...您可能正在使用 FTP 或其他工具访问文件,而数据库正在读取表。.MYI 中更新了表“计数器”,即使是最温和的表读取。

我发现以下内容将确保 MyISAM 表对任何文件级操作的完整性:

LOCK TABLE x WRITE;
FLUSH TABLE x; -- closes all file handles into table by mysql.
   < perform file-level manipulations >
FLUSH TABLE x; -- A 'stat' of the table occurs and info-schema is updated appropriately.
UNLOCK TABLES;

如果您不锁定写入您的表,mysql 可能会在您进行文件级复制/操作时访问它(读取或写入)。

这也是用于允许对 HOT 数据库上的表使用“myisampack”、“myisamchk”的相同机制,甚至禁用了外部锁定,而无需担心损坏。

-- 乔根森 --

于 2010-04-06T22:06:36.777 回答
2

a)只要您确保关闭 mysql,在相同版本的服务器之间移动 myisam 文件就可以正常工作(但是对于其他引擎而言并非如此)。一般来说,您甚至可以在不同的次要版本之间切换(尽管不能保证)。

b) Debian 到 CentOS 应该可以正常工作。一般来说,跨操作系统的唯一潜在问题是不同的文件夹结构(对于大多数 Linux 发行版来说不是问题)或具有不同字节序的操作系统(这几天也是一个非常罕见的问题)。

于 2009-12-25T19:54:17.207 回答
1

也许。我会详细说明。

是,如果它们是相同的次要版本并且具有相同的 my.cnf 版本。

是,如果您从 5.0 或更高版本升级到另一个 5.0 或更高版本,并且具有相同的 my.cnf

如果您使用全文索引并且其任何参数设置不同,包括停用词,则否(提示:不要使用全文索引)。


但在一般情况下,不,我会说你只能去另一台机器,如果它运行与原始机器完全相同的 mysql 二进制文件。如果您打算做其他事情,请对其进行广泛测试。格式的更改可能很微妙并且似乎有效(例如:排序规则的细微之处导致索引范围扫描出现 i18n 问题)。

my.cnf 的内容确实会影响行为,并且可能会使现有表无效,尤其是全文索引。

我什至在迁移到新版本时都遇到了困难,因为尽管它声称并且似乎可以工作,但从长远来看,旧的 MyISAM 版本会导致不可预测的行为和崩溃(我们在这里谈论的是大数据集上持续的模拟负载几天)。这意味着对于 4.1 - 5,我必须使用 REPAIR TABLE 迁移整个数据集。

如果 myisam 格式的任何差异会导致不兼容,则 REPAIR TABLE 总是会修复它们(前提是 mysql 可以完全读取表 - 例如,不是 5.0 到 4.1!)

在计划升级时始终进行浸泡/压力测试,它可能会暴露 MySQL 不知道的问题。

于 2009-12-26T21:14:18.670 回答
0

当您拥有相同版本的 MySql Server 时,您可以移动文件并使用 mysql 工具进行检查。我认为操作系统没有任何问题。但是 mysql 服务器的版本应该相同。

于 2009-12-25T09:17:40.910 回答
0

如果版本不同,最好的办法是只使用 mysqldump 表,然后使用 mysql 导入它们。

于 2009-12-25T19:59:03.127 回答