我的意思是复制单个 MyISAM 表文件是:(
关闭 mysqld 并将 .frm、.myd 和 .myi 文件从一个数据库文件夹复制到另一个)
问题:
(a)我可以使用这种方式从一个数据库文件夹备份 MySQL 数据库文件夹服务器到另一个具有不同 MySQL 版本的服务器?
(b) 这个备份文件可以移动到不同的操作系统吗?(例如:debian 到 centos)
只有服务器版本之间的文件级复制 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”的相同机制,甚至禁用了外部锁定,而无需担心损坏。
-- 乔根森 --
a)只要您确保关闭 mysql,在相同版本的服务器之间移动 myisam 文件就可以正常工作(但是对于其他引擎而言并非如此)。一般来说,您甚至可以在不同的次要版本之间切换(尽管不能保证)。
b) Debian 到 CentOS 应该可以正常工作。一般来说,跨操作系统的唯一潜在问题是不同的文件夹结构(对于大多数 Linux 发行版来说不是问题)或具有不同字节序的操作系统(这几天也是一个非常罕见的问题)。
也许。我会详细说明。
是,如果它们是相同的次要版本并且具有相同的 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 不知道的问题。
当您拥有相同版本的 MySql Server 时,您可以移动文件并使用 mysql 工具进行检查。我认为操作系统没有任何问题。但是 mysql 服务器的版本应该相同。
如果版本不同,最好的办法是只使用 mysqldump 表,然后使用 mysql 导入它们。