首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >即使我将MySQL文件移动到任意位置,.ibd仍然如何工作?

问即使我将MySQL文件移动到任意位置,.ibd仍然如何工作?
EN

Database Administration用户
提问于 2016-09-12 17:02:49
回答 2查看 166关注 0票数 0

我有一张桌子Person。该表的数据存储在/usr/local/mysql/data/my_database/person.ibd中。

现在,我做一个insert。然后用vim检查person.ibd的内容。我刚才输入的数据确实在那里。

然后,将person.ibd移动到我的主目录。我再次创建了一个insert,并使用vim检查了person.ibd的内容。新数据被插入到文件中,尽管该文件现在位于我的主目录中,而不是在/usr/local/mysql/data/my_database/person.ibd。

我重复此操作,将person.ibd移动到其他各种地方,例如/etc/。新的数据总是被插入。

那么,怎么回事?这是怎么发生的?在将插入写入文件系统中的文件之前,MySQL是否搜索整个文件系统?

Furthermore:

我用vim打开person.ibd,编辑记录的varchar类型字段并保存文件。然后我运行一个select,但是MySQL看到了旧的数据。我退出MySQL并再次输入,但是MySQL仍然看到旧的数据,即使这些数据不再存在于person.ibd中,并且被我使用vim编辑到person.ibd文件中的新内容所取代。

再说一遍,怎么回事?

EN

回答 2

Database Administration用户

回答已采纳

发布于 2016-09-13 18:48:30

不要编辑.ibd文件!事情很可能会出错:

  • 文件的布局很复杂,您可能会使MySQL无法读取它。
  • 数据可能被缓存在RAM中,因此您的更改不会立即被识别,并且/或当MySQL决定重写您修改的16 to块时,它们将被覆盖。
  • 可能会出现块分裂,进一步使您的编辑变得一团糟。

至于“移动”文件,让我给您一个关于*nix文件系统的基本教训。一个文件(简单地说)有两样东西:一块数据放在磁盘上,一个目录条目指向该数据块。当一个“文件”被“打开”时( MySQL很久以前就这样做了),它会抓取指向数据块的指针,但不会再次查看目录条目。您执行了mv操作,它只删除一个目录项并创建一个新条目。这个新条目指向磁盘上相同的数据块。

所以,直到,MySQL关闭了这个文件,它仍然拥有这个文件,不管它的路径是什么(S)。

请注意,这解释了“硬”链接是如何工作的。对同一个文件的第二个引用(硬链接)只是指向同一块数据的一个不同的目录条目。

请研究*nix文件系统的结构。你不完整的知识正迅速地将你推向灾难!

顺便说一句,如果你把.ibd放在它的新位置。MySQL在重启之后就找不到它了。你会“失去”那张桌子,并且有一个可能令人困惑的修理情况。

票数 2
EN

Database Administration用户

发布于 2016-09-12 17:39:03

你关闭了MySQL并重新启动了吗?对于shure来说,当你尝试重新启动它时,它将无法工作!答案是您正在使用内存缓冲区,直到数据库需要写入磁盘时才会出现错误,这取决于缓冲区大小,错误的增加将需要一些时间,但错误是可以保证的。

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

https://dba.stackexchange.com/questions/149450

复制
相关文章

相似问题

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