我是Vagrant的新手并且有几个问题。
有时当我重新启动计算机或破坏我的流浪汉时,整个Mysql数据库都会被清除掉。 我试图在stackoverflow上找到一些关于此的答案,但到目前为止没有任何运气。
所以我的问题是:
1)数据存储在哪里?
2)为什么我有时会丢失数据?
3)如果是这样,如何在重启destroy后保留数据?
答案 0 :(得分:8)
在我看来,您的问题的答案取决于您如何设置项目。在我的设置上工作的项目是以下(简化):
在vagrant init
上,每个开发人员都会获得一个ubuntu服务器环境的副本。所有应用程序代码(网站)都从本地文件系统安装到虚拟机中。我们将此应用程序保留在git存储库中。然后我们在vagrant机器中保留一些脚本,用于从生产(或演示服务器)同步数据库 - 基本上它下载数据库转储文件并将其放入虚拟机。
在这种情况下,如果执行vagrant destroy
然后vagrant init
,则需要运行数据库同步脚本以获取数据库。我们的开发人员(大多数)不会更改数据库的内容,因此我们不需要保留本地更改。
我希望这会有所帮助。
答案 1 :(得分:2)
最佳答案非常好,我只是想补充你的第三个问题。
要保留更改,您应该将数据库保留在主机上,并让vagrant连接到它以使用它。这样您就不会丢失 vagrant destroy 上的数据库。
您可能已经在使用NFS将文件夹与代码同步,因此这只是朝着类似方向迈出的一步。
答案 2 :(得分:0)
我最近使用的问题3的另一个解决方案是安装vagrant-triggers插件:
vagrant plugin install vagrant-triggers
然后向Vagrantfile
添加一些代码,以便在halt
和destroy
上运行脚本:
config.trigger.before :halt do
info "Backing up databases"
run_remote "bash /vagrant/backup_databases.sh"
end
config.trigger.before :destroy do
info "Backing up databases"
run_remote "bash /vagrant/backup_databases.sh"
end
然后创建backup_databases.sh
脚本:
#!/usr/bin/env bash
BACKUP_DIR="/vagrant/database_backups"
mysqldump -u root databasename > "$BACKUP_DIR/$(date +%Y-%m-%d_%H:%M).databasename.sql"
mysqldump -u root databasename2 > "$BACKUP_DIR/$(date +%Y-%m-%d_%H:%M).databasename2.sql"
# remove all but the 10 most recent backups
cd $BACKUP_DIR
ls -t | sed -e '1,10d' | xargs -r -d '\n' rm
我的database_backups
文件夹未进行版本化,如果我的流浪盒被销毁,则不会消失。这个设置允许我在我的本地环境中拥有最近的备份,我可以随时恢复。
但是,在使用大型数据库时,这不太有用。在那些情况下,我更喜欢Nick Zinger的答案,即将数据库保存在主机上并从流浪者中连接到它。
答案 3 :(得分:0)
Homestead 已经添加了数据库备份功能,如果您有 Vagrant 2.1.0 或更高版本,那么您只需将其添加到 Homestead.yaml
backup: true
配置完成后,Homestead 会在执行 vagrant destroy 命令时将您的数据库导出到 mysql_backup 和 postgres_backup 目录。 Readmore