背景:我曾经使用MAMP进行开发,并且在几个月/几年内我积累了一个大型的mysql数据库(几个演出),我用它来开发我的不同项目.我终于开始使用Vagrant设置一个虚拟机了,除了我的数据库之外,我已经完成了所有设置和工作.我在OSX主机上运行CentOS 6.5来宾框.
我的问题:我需要我的数据库是完全持久的,所以我可以根据我的需要流浪/销毁尽可能多的盒子,但是MysqL仍然存在.
我的解决方案#1:我最初使用vBoxsf安装了一个同步文件夹.这很好用,到目前为止似乎是我最好的选择,但性能非常糟糕.我的开发站点上的查询密集型页面需要1-3秒才能加载,而它们通常需要一秒钟才能加载.
我的解决方案#2:然后我尝试使用nfs挂载同步文件夹,因为性能应该更好.这里的问题是MysqL抱怨b / c,鉴于nfs的性质,它无法将数据目录chown到MysqL:MysqL用户.尝试启动MysqLd服务时出现以下错误:
chown:更改’/ www / MysqL’的所有权:不允许操作
chmod:更改’/ www / MysqL’的权限:权限被拒绝
Sooo,我的问题是:有没有更好的方法来完成我需要的东西?我觉得NFS是最好的解决方案,但我不知道如何使用Vagrant自动解决整个所有权/权限问题.任何帮助,将不胜感激.
NFS权限
要获得正确的NFS权限,您的用户需要在主机和来宾上具有相同的UID和GUID.设置非常棘手,您不应该从客户端更改它.也许您可以在主机上更改它以使其可写入MysqL并使UID和GUID相同.当然,主机改变它的那一刻将不再起作用.
rsync共享文件夹
Rsync在同步方面可能不是最快的,但如果你在rsync共享文件夹上创建只有MySQL正在编写并且同步回主机上的某个文件夹,这可能是一个解决方案. “真实”项目仍然可以存在于虚拟机共享或nfs中,您无需担心正确的权限.
可能还有其他一些解决方案:
创建备份/还原策略
一种方法是在不同的点,在你的流浪者盒子里备份MysqL,例如:每天.您也可以在关闭该框时运行备份,从而在销毁该框之前创建备份.将此备份放在共享文件夹中,即使您销毁了一个盒子,也可以获得最新数据.性能应该非常好,因为MysqL使用的数据不会在共享文件夹上.
在主机或其他流浪盒上运行MysqL
当然可以从你的流浪盒中连接到你的主机或另一个运行MysqL的流浪盒.您的主机或此框可能是长期存在的,可以作为所有项目的中央“MysqL服务器”.
我相信使用MysqL可以实现主/从组合.在一台计算机上运行,主机(您在项目中使用)生活在您的虚拟机内,而不是将任何内容写入共享文件夹和从属设备,该设备写入您的共享文件夹并且是主设备的镜像.这意味着您在写入内容并将其写入共享文件夹之间具有高性能和几秒钟的延迟.当然,保持此设置运行并确保它始终有效可能会非常棘手.