首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将系统版本(时态) MariaDB数据库从Windows迁移到Linux

将系统版本(时态) MariaDB数据库从Windows迁移到Linux
EN

Stack Overflow用户
提问于 2019-11-01 21:09:39
回答 1查看 184关注 0票数 0

将整个data目录从MariaDB的Win安装转移到Linux之后,MariaDB无法看到分区的时态表(或系统版本)。

所有的“传统”表都没问题,MariaDB可以在Linux上访问它们。但对于已分区的时态表,存在问题:在Windows分区上,数据文件的命名方式如下:<table name>#p#p_cur.ibd (用于当前数据分区),但在Linux MariaDB上,希望该文件被命名为<table name>#P#p_cur.ibd,因此MariaDB不能使用这样的分区,它给出了消息:

引擎中不存在

重命名.ibd文件没有帮助,在这种情况下,MariaDB找不到文件。

有人能帮忙吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-11-03 09:15:07

我认为这应该会影响任何分区表。你能确认一下吗?

在Windows上,由于某种原因,InnoDB将#P转换为小写。如果设置lower_case_table_names=2,该表可能可以在其他平台上访问。我认为这种情况不应首先存在。

要将分区重命名为InnoDB上的正确名称,可以执行以下操作:

  1. CREATE TABLE t(a INT)ENGINE=InnoDB;并将t.frm文件复制到tablename#p#p_cur.frm
  2. RENAME TABLE ``#mysql50#tablename#p#p_cur`` TO ``#mysql50#tablename#P#p_cur``; (注意:只有单个回退而不是双回)。我在StackOverflow.)
  3. Remove的格式设置上遇到了问题--每个partition.
  4. Finally,DROP TABLE t;

的文件tablename#P#p_cur.frm.

  • Repeat

特殊的#mysql50前缀应该将表名的其余部分传递给存储引擎,同时绕过MySQL 5.1中引入的文件名安全编码。这应该允许直接访问分区。通常,#被编码为序列@0023,但是分区引擎使用原始#P#后缀。

在MySQL 4.1和5.0中,表名直接用UTF-8编码.在MySQL 4.0中(这是我开始研究InnoDB内部程序时的稳定版本系列),它们可以直接用latin1编码,或者表名中的非ASCII字符在某些文件系统或操作系统上不起作用。

注意:我认为.frm文件存储存储引擎的信息。如果您只是复制已分区表的tablename.frm文件,则可能只调用ha_partition::rename_table(),而不是ha_innobase::rename_table()。我们确实希望由InnoDB执行重命名操作,以便在自己的数据字典( SYS_TABLES表,通过INFORMATION_SCHEMA.INNODB_SYS_TABLES可读)中重命名表名。

注意:我没有测试这个。请报告这是否有效。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58665931

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档