Jef*_*eff 6 mysql virtualbox nfs vagrant
背景:我曾经使用MAMP进行开发,并且在几个月/几年内我积累了一个大型的mysql数据库(几个演出),我用它来开发我的不同项目.我终于开始使用Vagrant设置一个虚拟机了,除了我的数据库之外,我已经完成了所有设置和工作.我在OSX主机上运行CentOS 6.5来宾框.
我的问题:我需要我的数据库是完全持久的,所以我可以根据我的需要流浪/销毁尽可能多的盒子,但是mysql仍然存在.
我的解决方案#1:我最初使用vboxsf安装了一个同步文件夹.这很好用,到目前为止似乎是我最好的选择,但性能非常糟糕.我的开发站点上的查询密集型页面需要1-3秒才能加载,而它们通常需要一秒钟才能加载.
我的解决方案#2:然后我尝试使用nfs挂载同步文件夹,因为性能应该更好.这里的问题是mysql抱怨b/c,鉴于nfs的性质,它无法将数据目录chown到mysql:mysql用户.尝试启动mysqld服务时出现以下错误:
chown: changing ownership of '/www/mysql': Operation not permitted
chmod: changing permissions of '/www/mysql': Permission denied
Sooo,我的问题是:有没有更好的方法来完成我需要的东西?我觉得NFS是最好的解决方案,但我不知道如何使用Vagrant自动解决整个所有权/权限问题.任何帮助,将不胜感激.
首先,我首先要说这不是最佳实践。您自己可能知道,如果您的 PC 一片空白或者您想将一个项目交给另一个人进行开发,这可能会导致问题。当然,特别是作为一个人的努力,有比测试数据导入器和其他东西更重要的事情:)所以让我们寻找解决方案。
NFS 权限
要正确获得 NFS 权限,您的用户需要在主机和来宾上具有相同的 UID 和 GUID。设置起来非常棘手,您不应该从访客那里更改它。也许你可以在主机上更改它,使其可写入mysql,并使UID和GUID相同。当然,一旦主人改变了,这就不再起作用了。
rsync共享文件夹
Rsync 就同步而言可能不是最快的,但如果您在 rsync 共享文件夹上创建只有 MySQL 正在写入并且同步回主机上的某个文件夹,这可能是一个解决方案。“真正的”项目仍然可以存在于 virtualbox 共享或 nfs 中,并且您不需要为正确的权限而烦恼。
可能还有其他一些解决方案:
创建备份/恢复策略
一种方法是在不同的时间点(例如每天)备份 vagrant box 内的 MySQL。您还可以在盒子关闭时运行备份,从而在销毁盒子之前创建备份。将此备份放在共享文件夹中,万一您损坏了盒子,您将拥有最新数据。性能应该相当不错,因为 MySQL 使用的数据不会位于共享文件夹上。
在主机或其他流浪机器上运行 MySQL
当然可以从你的 vagrant box 内部连接到你的主机或另一个运行 MySQL 的 vagrant box。您的主机或此机器可能会长期存在,并且可以充当您所有项目的中央“MySQL 服务器”。
在写入共享文件夹的同一台机器上运行 MySQL 从属服务器
我相信 MySQL 主/从组合是可能的。在一台机器上运行这两个机器,主服务器(您在项目中使用)位于虚拟机内,并且不向共享文件夹写入任何内容,而从服务器则写入您的共享文件夹,并且是主服务器的镜像。这意味着您具有高性能,并且在写入内容和将其写入共享文件夹之间有几秒钟的延迟。当然,保持此设置运行并确保其始终有效可能很棘手。