在 Windows 和 Linux 之间共享 MySQL 数据?

在 Windows 和 Linux 之间共享 MySQL 数据?

我正在尝试在 Windows 和 Linux 发行版 (Mint) 之间共享我的 MySQL 数据库文件。我有一个双启动加上一个单独的数据分区(NTFS)。

我尝试挂载分区,并将所有权设置为“mysql:mysql”,并将 a 设置umask为 000 ( chmod 777),但 MySQL 总是说:

Fatal error: Can't open and lock privileges tables: Table 'host' is read only

尝试过但它仍然行不通。有任何想法吗?我真的不希望我的计算机上有两份数据库副本。

答案1

有许多网络帖子建议可以做到这一点,但我找不到任何帖子告诉我如何让它真正发挥作用。 因此,经过几周的努力,这是一个最终对我有用的解决方案。:-)


平台: 双启动,Windows 10 / Debian 8.5,每个系统都有 MySQL 5.6。

提示:从 Oracle 升级到 MySQL 5.6,而不是从 Debian Backport,因为它已损坏并且无法正确安装。

警告!

  • 当您执行mount以下操作时,它将更改共享分区上所有文件的所有权。起初这让我很担心,但到目前为止还没有证明是一个问题。

  • 在开始之前备份所有内容。

  • 两个独立备份比一个更好,相信我,我已经见过一两次午夜之光了,我不想再看到这样的事了。

  • 其他人指出,因为 Windows 不区分大小写,而 Linux 区分大小写,所以您应该将名称全部小写,我猜这意味着您的数据库名称至少是最小的,因为它们在存储在 mysql/ 中时会转换为文件名数据文件夹。

背景:我正在将我的 MS Access 数据从 Windows 移动到 Linux。第一步是将我的数据移出 MS Access。我在 Windows 上安装了 MySQL 5.6,并使用 MDBTools 将表从 Access 复制到 MySQL 中以复制结构,并使用 ODBC 进行访问以移动数据。这并不完全简单,需要一些名称和其他调整,例如我的字段名为“ok?”必须重命名为“ok”,我必须调整索引,并注意主键。然后,为了可以继续访问这些表,就像它们仍在 Access 中一样,我通过 ODBC 将这些表链接回 Access。现在这些表已准备好移动到 Linux 也可以访问它们的地方。

从必要的 Windows 更改开始:

1)设置一个适当大小的 ntfs 共享分区(我的称为 E:,大约 55GB)。

(提示:第一次就让它足够大。在某些时候我不得不让我的数据库更大,这真的很痛苦。除了 mysql 数据库之外,我现在还在这里保存我共享的 Thunderbird/Icedove 和 Firefox 配置文件,以及其他当我从 Windows 过渡到 Linux 时共享文件,例如音乐、电子表格和文档。)

2)移动你的mysql数据库文件夹从C:到E:
--from: C:/ProgramData/MySQL/MySQL Server 5.6/data/
--to: E:/mysql5.6/

3)更新您的(Windows)my.ini 文件指向新的 mysql 服务器文件夹:
--编辑此文件:C:/ProgramData/MySQL/MySQL Server 5.6/my.ini
--更改此参数:datadir="E:/mysql5.6" 6/数据\"

(我不知道尾部反斜杠的用途,但请保留它。)

4)测试在Windows中:
通过以下方式加载MySQL服务器:(
开始菜单)| MySQL |系统托盘监视器|启动实例(从系统托盘)
[如果服务器实例正常启动,图标上的红灯应变为绿色]

接下来对 Linux 进行一些更改:

1)更新my.ini 指向新的 mysql 服务器文件夹
--编辑此文件:/etc/mysql/my.ini
--更改此参数:datadir="/home/howard/Shared/mysql5.6/"

2)添加将线路挂载到 fstab:

LABEL="Shared"  /home/username/Shared/  ntfs  rw,nosuid,nodev,relatime,user_id=username,group_id=groupname,permissions,allow_other,noatime 0 2

尖端:

  • 我们需要“权限”选项来允许 mysql 文件稍后由 Linux 用户“mysql”拥有。

  • 这最初将所有文件的所有权更改为“root”!

  • 此处不得包含 uid、gid、umode、dmode 和 fmode 选项,因为它们将禁用“权限”选项,该选项允许您单独更改文件的所有权和权限。如果您的安装报告“default_permissions”,则说明您遇到了问题,并且在更正之前无法继续。 (user_id、group_id 和其他挂载选项似乎没有这个问题,并且可以与“permissions”选项一起使用。)

  • 您的挂载类型是 ntfs 还是 ntfs-3g 似乎并不重要。

  • “权限”优先级的副作用是分区上的所有文件都将被重新拥有(即使在 Windows 中)!

3)你的共享分区

mount -a (或重新启动)

4)更改所有文件的所有权到您的主用户名

chown -R <your Linux username>: /home/user/Shared/*

5)更改 mysql 文件的所有权到“mysql”

chown -R mysql: /home/user/Shared/mysql5.6

重要的:Linux mysql 需要其文件由名为“mysql”的用户拥有,否则服务器将会卡住。在Windows中似乎没有任何这样的担忧。

在Linux下测试:

sudo mysql -u root --password="<your password>"
mysql> show databases;
mysql> quit

返回 Windows 并修复 Linux 刚刚出现的问题:

此时我的 mysql 服务器无法启动。经过一番调查后,我发现可以解决这个问题:

首先,当我使用“权限”选项将共享分区挂载为 ntfs,然后更改文件所有权时,它会将所有文件和文件夹的 Windows 所有权更改为“帐户未知”,因为 Windows 不知道 Linux 用户名。

另外我认为(但不确定),如果存在安全文件和目录“继承”,它就会被关闭。如果我在共享分区上复制一棵树,它会在安全权限中创建继承。但是当我调查Linux挂载后的情况时,似乎没有安全权限继承。相反,有绝对的安全参数。

灰显的复选框表示从父级继承的值,“特殊权限”复选框除外,如果存在自定义设置的特殊权限,该复选框将灰显。

特殊权限似乎只是普通权限的替代视图,而不是普通权限的补充。 (如果您不熟悉 Windows 权限工具,请在开始之前先在测试文件中使用它们。)

有关这方面的 MS 文档都搞砸了,列标题错误这里,我已报告,以便他们可以修复它们。

现在,所有文件和权限所有权都是两个“帐户未知”SID 之一,如下所示:(S-1-5-21-...)

这使得更改文件的安全性变得更加困难,因为现在没有 Windows 所有者是所有者。因此,第一步是收回我们想要更改其安全参数的任何文件的所有权。

为了让 mysql 再次工作(在 Linux mysql 服务器触及它之后),我们需要为一个文件添加一点安全权限。我测试了将其添加到四个用户中的每一个,但将完全控制权授予管理员、系统和 S-1-xxx 用户不允许 mysql 启动。但是当我给Everyone更多的权限时,mysql就开始工作了。 (我怀疑 mysql 中存在一个小错误,因为对我来说奇怪的是,每个人的权限都会产生影响。)

1)选择文件:E:/mysql5.6/dataauto.cnf

2)取得所有权。右键单击属性,然后单击安全 |先进|所有者:... 更改|输入|按检查|然后确定

现在您是 E:/mysql5.6/dataauto.cnf 的所有者

3)E:/mysql5.6/dataauto.cnf 的以下权限:

再次使用:属性|安全|高级
选择“所有人”,然后单击编辑|显示高级权限
确保选中以下各项:

  • 列出文件夹/执行文件,
  • 读取扩展属性,以及
  • 读取权限

然后单击“确定”|并申请 |好吧|好的

最后做一个完整的测试

以下测试序列将确保当 linux mysql 服务器启动时,它不会扰乱 windows mysql 服务器的启动能力:

1) 在 Windows 中启动 windows mysql 服务器,然后
2) 重新启动到 linux 并启动 linux mysql 服务器,然后
3) 重新启动到 Windows 并再次启动 mysql 服务器。


请在这里报告任何问题,以便我可以更新。

相关内容