能否在Windows(XAMPP)和Linux(LAMP)上使用同一个MySQL数据库?

12

我有一个拥有Windows 7和Ubuntu 10的双重引导模式。

Windows 7上,我安装了XAMPP,在Linux上,我安装了LAMP。
是否可能强制安装在不同操作系统上的MySQL DB服务器(即使它们是相同版本,也是不同的)使用相同的物理文件?

因此,在双重引导模式下,独立于我运行的其他操作系统的事实,我将能够使用相同的物理数据。有时,我想切换操作系统,但如果能够使用相同的数据库就太好了。


1
有趣的问题。从理论上讲,这 应该 可以工作 - 底层文件格式应该是相同的。但我对这个想法并不完全舒服。很想看看会发生什么。 - Pekka
为什么不直接不运行它呢?这样就不会有任何会拖慢我的工作的程序——例如 Google Talk、ICQ。 - zerkms
你好。你找到答案了吗?它有效吗?我也需要同样的答案。如果你已经找到了答案,请接受(如果它已经在已给出的答案中)或者发布你自己的答案。 - Ivan
发现这个链接:http://www.irisoftonline.com/dual-booting-linux-and-windows-while-sharing-xampp-web-applications-code-and-database 打算自己尝试一下。涉及符号链接...所以看起来很合理。 - helgatheviking
1
请在Unix & Linux StackExchange中查看我的类似解决方案:http://unix.stackexchange.com/questions/170751/sharing-mysql-data-between-windows-and-linux/310712#310712 - Elliptical view
显示剩余2条评论
5个回答

5
在你的my.ini文件中(在Windows中,它位于类似C:\Program Files\MySQL\MySQL Server 5.1的某个地方。这是MySQL的主要配置文件),你应该有这一行: datadir="C:/ProgramData/MySQL/MySQL Server 5.1/Data/" 例如
将其在Windows和Linux Ubuntu中更改为指向一个单一的物理文件夹(在Windows可以识别的文件系统分区上)。它会起作用。文件格式是相同的。
无论你从Ubuntu还是Windows 7启动,都没有关系,2个不同版本的MySQL将在同一个位置寻找数据。一旦在Windows环境中修改了数据,你从Ubuntu启动,数据就会被修改。

如果您在数据库中使用InnoDB表,那么更有趣的事情就发生了。在我的情况下,我需要在每次启动MySQL服务器之前从MySQL数据目录中删除ib_logfile0和ib_logfile1文件。日志文件会在服务器启动时重新创建。您可以使用脚本自动化此过程。尝试时要小心 - 备份所有更改/删除的文件! - Martin Pecka
我不知道是因为InnoDB还是其他原因,但我被迫假装“mysql”用户拥有数据库文件。这可以在fstab中简单完成:bindfs#/media/Windows/PHP/mysql-data /media/mysql fuse owner=mysql,group=mysql,perms=755 0 0 - Martin Pecka

4
虽然不是最理想的,但只要满足以下条件,这应该是可以的:
  1. 在两个操作系统上使用相同版本的MySQL。
  2. 在拷贝数据文件之前关闭mysqld。(如果您将拷贝数据文件而不是将它们保留在共享的fat32分区中)。
实质上,只要MySQL在相同“字节顺序”的体系结构上运行,文件格式就应该是可转移的。
作为建议,您可以关闭ICQ等程序,并使用空闲内存在Windows 7之上运行VirtualBox虚拟机来运行Ubuntu——从而确保您可以轻松访问开发环境而无需重新启动等操作。
这实际上是一个非常好的设置,因为它意味着您可以在需要时使用Windows开发环境,并在Ubuntu虚拟机上托管网站数据的Samba挂载。

我赞同这个观点和AlexanderMP的回答。然而,为了集中注意力而不得不切换操作系统似乎说明你需要更基本的帮助。 :) - Noufal Ibrahim

1
只要数据在两个操作系统上都可以共享/读写,并且两个操作系统上的文件格式相同,那么就应该是可行的。
我能想象到的第一个问题是Windows中的大小写不敏感。因此,如果您始终使用CamelCase,请将数据库/表转换为camel_case(或camelcase)。
更多信息请阅读- http://dev.mysql.com/doc/refman/5.0/en/limits-windows.html

关于表名大小写敏感性的问题,你提出了一个好观点。(我一直都是坚持使用小写名称的支持者。) - John Parker

-1
当然可以。
但我不认为,你的双启动系统可以实现这一点。

假设你的MySQL服务器安装在Win7机器上。你可以完美地从Win7环境访问它,甚至从Linux环境访问它(如果你没有在MySQL服务器设置中拒绝访问)。 安装MySQL的系统必须运行!然后,如果允许,你可以从多个系统访问它;-)

1
你怎么在一台机器上同时运行两个系统?!!! - user529649
最初的目的是为了能够强制安装在不同操作系统上(即使它们是相同版本,但仍然不同)的DB服务器使用相同的物理文件。因此,在双启动模式下,无论我运行另一个操作系统,我都可以使用相同的物理数据。(当然,同一时间只能运行一个操作系统。) - Sk8erPeter

-3

我搜索了很多次,发现运行Linux内核是一种可行的解决方案。

Vagrant

这是一个用于在单个工作流中构建和管理虚拟机环境的工具。我认为你使用vagrant的主要原因是它不会太重,并且不会占用太多计算机资源。我相信你可以通过Vagrant文档启动基于Linux的虚拟机器。

假设主机分配的IP地址为192.168.1.2,虚拟机的IP地址为192.168.1.10,请确保主机和客户机可以相互访问。请仔细阅读网络配置部分以自定义网络配置。

验证主机和客户机之间的连接

安装MySQL服务器

MySQL是一个数据库管理系统。基本上,它将组织并提供对数据库的访问,我们的网站可以在其中存储信息。

在已完成上述步骤设置的机器中打开终端。运行以下命令:

sudo apt-get install mysql-server-5.6

注意:根据安装的Linux发行版版本,以上命令可能需要进行调整以适应您的需求。我使用了Ubuntu 14.04的核心进行安装,请参见link

在安装过程中,服务器会要求您选择并确认MySQL root用户的密码。这是MySQL中具有增加特权的管理账户。

验证安装 从客户机(即虚拟机)的终端中运行以下命令:

mysql -u root -p

将会要求输入MySQL密码,然后提供您在MySQL Server安装期间设置的密码。如果您向MySQL服务器提供了正确的信息,则以下是屏幕截图。

enter image description here

使MySQL服务器远程可访问

我们需要一个集中式的数据库服务器,其他计算机可以访问并连接到感兴趣的数据库。再次打开终端并运行以下MySQL命令:

GRANT ALL PRIVILEGES ON *.* TO 'root'@'192.168.1.2' IDENTIFIED BY PASSWORD '*4ACFE3202A5FF5CF467898FC58AAB1D615029441' WITH GRANT OPTION; GRANT PROXY ON ''@'' TO 'root'@'192.168.1.2' WITH GRANT OPTION; FLUSH PRIVILEGES;

其中192.168.1.2是主机的IP地址,password的哈希字符串从mysql数据库的user表中获取。

好的。如果到目前为止没有问题,您可以休息一下并享受您的饮料。

验证远程访问

从主机上的终端启动以下命令:

mysql -h192.168.1.2 -uroot -p

这是在要求您输入密码。如果根凭证正确,您将看到像上面的屏幕截图一样的内容。需要注意的一件事是在mysql命令后加上-h192.168.1.2,因为我们不在安装MySQL服务器的机器上。

总之,我们已经设置了一个用于主机和客户机的MySQL服务器。实际上,如果我有另一台分配了192.168.1.3的机器,也可以连接到数据库服务器并在服务器和客户端之间交换数据。


1
你真的认为这是对问题的回答吗?! - Sk8erPeter
@Sk8erPeter:这是我的建议,因为我们可以运行一个虚拟机作为Web服务器。我认为这个解决方案可以很好地工作。而且我已经尝试过了。 - Tung
首先,你没有回答任何问题。你只是写了你谷歌搜索到了它,并发现它是可行的。恭喜你! :D 但这对任何人有什么帮助吗?你没有详细说明如何做到这一点,而Stack Overflow是一个互相帮助的论坛,不仅仅是等待一些毫无相关性和无用的东西获得赞同。我建议你删除你的答案,以免因此获得更多的负评(很遗憾,你应该知道),或者编辑它以分享一些有用的东西(但在这种情况下,你最好删除这个答案并编写一个新的答案)。 - Sk8erPeter
1
@Sk8erPeter,即使你是对的,我认为没有必要这么粗鲁。 - Jaime Hablutzel
经过几年的时间,我根据自己的经验和所获得的知识已经更新了我的答案。感谢@JaimeHablutzel的支持。然而,没有人觉得我的更新解决方案值得点赞。 - Tung
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接