首页 > 解决方案 > 如何更改 MySQL 8.0 数据文件夹。我可以使用 OneDrive 文件夹吗?

问题描述

我正在尝试为一个只有我和另外 2 个朋友使用的非常小的程序创建一个数据库,所以数据库会很小。

我想做的是与这两个朋友共享这个数据库,所以我想将数据存储在 OneDrive 共享文件夹中。

目前,我使用 txt 文件作为“数据库”。它放置在共享的 OneDrive 文件夹中,所以当我的朋友执行程序时,它可以从那里读取数据并使其成为实时“在线”。

问题是我在我的

C:\Program Files\MySQL\MySQL Server 8.0\ 

目录,所以我无法更改数据文件夹。

我遇到的另一个问题是我在该目录中也没有 Data 文件夹,而是在这个目录中找到了它:

C:\Program Files\MySQL\MySQL Workbench 8.0 CE

有可能做我想做的事吗?我应该如何进行?

你认为我应该使用 MySQL 5.x 版本吗?

谢谢

标签: mysqlmysql-8.0

解决方案


如果您想与其他几个用户共享数据库,则将 datadir 放入 OneDrive 是行不通的。

MySQL 将数据存储在 datadir 下的文件中,这是真的。它们存储在名为表空间的文件中,具有.ibd扩展名。

但是当您执行 INSERT/UPDATE/DELETE 操作时,数据会临时存储在内存和事务日志中(ib_logfile*.MySQL 必须在这些之间进行微妙的协调,以持久的方式保存数据,同时确保良好的性能。它运行良好,但前提是 MySQL 服务器是写入文件的唯一进程。

OneDrive 根本不与 MySQL 协调。它将定期检查自上次同步以来已更改的文件。OneDrive 检查文件的间隔大约是每 10 分钟一次,这是不可配置的。

OneDrive 可能会在您完成一些 INSERT/UPDATE/DELETE 操作后选择同步文件,并且数据在 RAM 中被修改,但尚未在磁盘上的表空间文件中更新。

一旦提交了更改,它也必须安全地存储在事务日志中,即使它没有在表空间中更新。但是如果您的朋友收到处于这种状态的文件(事务日志包含表空间中不存在的更改),他们可以从您的 RAM 中重建他们没有得到的数据。这称为InnoDB 崩溃恢复。如果 MySQL 服务器启动并发现事务日志包含不在表空间中的更改,它会自动执行。它假设您突然重新启动并丢失了 RAM 中的内容。

如果你的朋友试图让他们的 MySQL 服务器持续运行,读取一个同时由他们的 OneDrive 更新的数据目录,它基本上会覆盖他们的文件,MySQL 会变得混乱。它只检查它是否应该在 MySQL 服务器启动时进行崩溃恢复。因此,如果在 MySQL 服务器已经运行时文件以意想不到的方式更改,它只会得出结论,您的硬盘驱动器已损坏。它可能会报告一个致命错误并关闭 MySQL。

此外,如果您的朋友尝试对数据库进行自己的更改,他们的更改将与来自 OneDrive 的更新发生冲突。然后,他们覆盖文件的尝试最终会通过 OneDrive 以相反的方向同步,最终也会损坏您的数据库。每当 OneDrive 选择进行文件同步时,这将在 10 分钟间隔内毫无警告地发生。

所以恐怕 OneDrive 不是共享数据库的解决方案。

有可能起作用的替代方案包括:

  • 在大家共享的网站上托管 MySQL 服务器的单个实例,并为每个人提供一个可以使用数据库的客户端。一个流行的免费客户端是phpMyAdmin。这样一来,只有一个 MySQL 服务器实例,一个数据目录,即使你们每个人都是读取和写入数据的并发客户端。这是最简单的解决方案,最有可能奏效。

  • 定期使用mysqldump从您的 MySQL 服务器实例中导出数据,并将导出文件放在 OneDrive 上,或通过电子邮件或任何其他方式将其发送给您的朋友。然后他们必须手动将该数据导入他们的 MySQL 服务器。这将覆盖他们对数据库所做的任何更改,但不会显示为损坏。如果他们想将更改发回给您,他们可以执行类似的操作:导出他们的数据库,将转储文件放在 OneDrive 上,然后您将获取他们的转储文件并将其导入您的 MySQL 服务器实例,覆盖您所做的任何更改自您上次将导出发送给您的朋友以来在本地完成。

  • 使用 MySQL 插件进行多服务器同步复制,例如InnoDB Group ReplicationPercona XtraDB Cluster。但是如果你是 MySQL 的新手,这可能对你来说太复杂了。


推荐阅读