Ubuntu 下挂载的 Windows 分区中的 MySQL 数据文件夹不被 MySQL 接受

Ubuntu 下挂载的 Windows 分区中的 MySQL 数据文件夹不被 MySQL 接受

我正在尝试在 Ubuntu 10.10 下安装我的 Windows ntfs 分区,其中包含 MySQL 数据文件夹(来自 Windows)在 /media/mysql/data 中。在我的 Windows 中,我安装了 Sokkit(PHP+Apache+MySQL)。在我的 Ubuntu 中,我安装了 Xampp,并且在 my.cnf 中,我已将数据目录指向 /media/mysql/data。现在,当我尝试启动 Xampp 服务时,MySQL 无法启动。

你能告诉我可能的原因是什么吗?

我正在使用以下挂载命令。

挂载-t ntfs-o默认值,no_root_squash /dev/sda1 /media/

除了安装分区之外,还有其他方法可以访问我的 Windows 分区吗?

答案1

一般来说,这不是一个好主意。数据库软件需要严格控制它们使用的文件(原因很明显)。如果你将数据库文件放在 Linux 上的 NTFS 上,那你就自找麻烦了。

Linux 上对 NTFS 的写入支持(据我所知)仍处于试验阶段。我不知道此组合下文件锁定的表现如何。

我的建议是使用mysqldump或类似的东西从 Windows 导出数据库,然后使用该转储在 Linux 端重建数据库 - 使用本机文件系统上的数据(ext、xfs、reiserfs ......无论您认为最好的是什么)。

答案2

几天来我一直在努力解决相同(或类似?)的问题,对我来说,我找到了一个解决方案:

  1. 问题:

    无论出于什么原因,mysql 都需要其数据库由用户“mysql”拥有(/etc/mysql/my.cnf 提供了一个“用户”选项,但将其更改为已安装的 ntfs 分区的所有者并没有改变任何东西)

  2. 解决方案:

    a) 直接:以用户“mysql”身份挂载 ntfs 分区 - 我的 /etc/fstab 如下所示:

    /dev/sda5  /mnt/ntfsmount/  ntfs  rw,user,auto,umask=0002,uid=121,gid=113
    

    其中 uid=121 是“mysql”的用户 id,gid=113 是“mysql”的组 id(根据需要采用!)

    这对我来说并不令人满意,因为分区保存的数据比一些 mysql 数据库要多得多

    b) 建议:使用任意权限和选项挂载 ntfs 分区并将 mysql 数据“绑定”到单独的挂载点(参见上面的示例 - uid 和 gid 选项除外):

    接下来你需要安装“bindfs”

    sudo apt-get install bindfs
    

    现在,你的 ntfs-partion 已经挂载,bindfs 也已经安装完毕,你需要添加类似

    bindfs#/mnt/ntfsmount/mysql /mnt/mysql fuse owner=mysql,group=mysql,perms=755 0 0
    

    到您的 /etc/fstab。这将默认将具有适当所有权和权限的 mysql 数据库挂载到指定目录。现在您的 /etc/mysql/my.cnf 需要指向“/mnt/mysql/data”,并且您的 mysql 数据库应该在下次重新启动后可访问(或挂载 /mnt/mysql 并重新启动 mysql 服务)

  3. 注释:

    我已经在 Kubuntu 11.04 上尝试过这个问题,但我认为这是一个更普遍的问题,应该适用于各种版本的类 Debian 系统。

    在找到此解决方案之前,我在网上搜索了一下,找到了停用/卸载“apparmor”的建议。我不确定这是否与解决方案相关b)如上所述,但我提前这样做了。因此,如果b)没有按预期工作,您可能需要卸载 apparmor。

    sudo apt-get remove apparmor
    

--

我希望这对你们中的一些人有帮助!

问候,路德维希

相关内容