我正在尝试为一个非常小的程序创建一个数据库,只有我和另外两个朋友使用,所以数据库会很小。
我想做的是与这两个朋友共享这个数据库,所以我考虑将数据存储在 OneDrive 共享文件夹中。
目前,我正在使用 txt 文件作为“数据库”。它被放置在共享的 OneDrive 文件夹中,因此当我的朋友执行该程序时,它可以从那里读取数据并使其成为实时“在线”。
问题是我在我的目录中找不到 my.ini 文件
C:\Program Files\MySQL\MySQL Server 8.0\
Run Code Online (Sandbox Code Playgroud)
目录,所以我无法更改数据文件夹。
我遇到的另一个问题是,我在该目录中也没有 Data 文件夹,而是在这个目录中找到了它:
C:\Program Files\MySQL\MySQL Workbench 8.0 CE
Run Code Online (Sandbox Code Playgroud)
可以做我想做的事吗?我应该如何进行?
你认为我应该使用 MySQL 5.x 版本吗?
谢谢
如果您想与其他几个用户共享数据库,将 datadir 放在 OneDrive 中是行不通的。
MySQL将数据存储在datadir下的文件中,这是事实。它们存储在名为表空间的文件中,其扩展名为.ibd.
但是当你执行 INSERT/UPDATE/DELETE 操作时,数据会临时存储在内存和事务日志中。MySQLib_logfile*必须在这些之间进行微妙的协调,以持久的方式保存数据,同时确保良好的性能。它运行良好,但前提是 MySQL 服务器是写入文件的唯一进程。
OneDrive 根本不与 MySQL 协调。它将定期检查自上次同步以来已更改的文件。OneDrive 检查文件的时间间隔约为每 10 分钟一次,并且这是不可配置的。
在您完成一些 INSERT/UPDATE/DELETE 操作后,OneDrive 可能会选择同步文件,并且数据在 RAM 中被修改,但尚未在磁盘上的表空间文件中更新。
一旦提交了更改,它也必须安全地存储在事务日志中,即使它没有在表空间中更新。但是,如果您的朋友收到这种状态下的文件(事务日志包含表空间中不存在的更改),他们可以从您的 RAM 中重建他们未获得的数据。这称为InnoDB 崩溃恢复。如果 MySQL Server 启动并发现事务日志包含表空间中没有的更改,则会自动执行此操作。它假设您突然重新启动并丢失了 RAM 中的内容。
如果你的朋友试图让他们的 MySQL 服务器持续运行,读取由他们的 OneDrive 同时更新的数据目录,它基本上会覆盖他们的文件,MySQL 会变得混乱。它仅在 MySQL 服务器启动时检查是否应该执行崩溃恢复。因此,如果当 MySQL 服务器已经运行时文件以意外的方式发生变化,它只会得出结论:您的硬盘驱动器已损坏。它可能会报告致命错误并关闭 MySQL。
此外,如果您的朋友尝试对数据库进行自己的更改,他们的更改将与 OneDrive 的更新发生冲突。然后,他们尝试覆盖文件最终会通过 OneDrive 以相反的方向同步,并最终也会损坏您的数据库。每当 OneDrive 选择进行文件同步时,这种情况就会每隔 10 分钟发生一次,且不会发出任何警告。
所以恐怕 OneDrive 不是共享数据库的解决方案。
在大家共享的网站上托管 MySQL Server 的单个实例,并为每个人提供一个可以使用该数据库的客户端。一个流行的免费客户端是phpMyAdmin。这样一来,即使你们每个人都是并发客户端读取和写入数据,也只有一个 MySQL 服务器实例和一个数据目录。这是最简单的解决方案,最有可能起作用。
定期使用mysqldump从您的 MySQL Server 实例导出数据,并将导出文件放在 OneDrive 上,或通过电子邮件或任何其他方式发送给您的朋友。然后他们必须手动将该数据导入到 MySQL 服务器。这将覆盖他们对数据库所做的任何更改,但不会显示为损坏。如果他们想将更改发送回给您,他们可以执行类似的操作:导出数据库,将转储文件放在 OneDrive 上,然后您将获取他们的转储文件并将其导入到您的 MySQL Server 实例,覆盖您所做的任何更改自您上次将导出发送给您的朋友以来在本地完成的。
使用 MySQL 插件进行多服务器同步复制,例如InnoDB Group Replication或Percona XtraDB Cluster。但如果您是 MySQL 新手,这可能太复杂而无法设置。
| 归档时间: |
|
| 查看次数: |
2420 次 |
| 最近记录: |