Существующие данные MySQL с Vagrant/VirtualBox

Предыстория: раньше я разрабатывал с использованием MAMP, и за месяцы/годы я накопил большую базу данных mysql (несколько гигабайт), которую я использую для разработки своих различных проектов. Наконец-то я смог настроить виртуальную машину с помощью Vagrant, и у меня все настроено и работает хорошо, кроме моей базы данных. Я запускаю гостевой ящик CentOS 6.5 на хосте OSX.

Моя проблема: мне нужно, чтобы моя база данных была полностью постоянной, чтобы я мог перемещаться/уничтожать столько ящиков, сколько мне нужно, но mysql сохраняется.

Мое решение №1. Сначала я смонтировал синхронизированную папку с помощью vboxsf. Это работает довольно хорошо и кажется моим лучшим вариантом на данный момент, но производительность довольно плохая. Страницы с интенсивным запросом на моих сайтах разработки загружаются 1-3 секунды, тогда как обычно они загружаются меньше секунды.

Мое решение №2. Затем я попытался смонтировать синхронизированную папку с помощью nfs, потому что производительность должна быть намного выше. Проблема здесь в том, что mysql жалуется b/c, учитывая природу nfs, он не может указать каталог данных для пользователя mysql:mysql. Я получаю следующие ошибки при попытке запустить службу mysqld:

chown: changing ownership of '/www/mysql': Operation not permitted

chmod: changing permissions of '/www/mysql': Permission denied

Итак, мой вопрос: есть ли лучшие способы выполнить то, что мне нужно? Я чувствую, что NFS будет лучшим решением, но я не знаю, как автоматически обойти все проблемы владения/разрешения с помощью Vagrant. Любая помощь будет оценена по достоинству.


person Jeff    schedule 01.04.2014    source источник
comment
Это для ubuntu, но принцип тот же, есть mysql на хост-машине, подключайтесь к нему с виртуальной машины. stackoverflow.com/questions/17324611 /   -  person dave    schedule 02.04.2014


Ответы (3)


Прежде всего, позвольте мне начать с того, что это не лучшая практика. Вы можете сами знать, что это может привести к проблемам, если, например. ваш компьютер гаснет или вы хотите передать один проект другому человеку для разработки. Конечно, особенно для одного человека, есть вещи поважнее, чем импортеры тестовых данных и прочее :) Итак, давайте искать решения.

Разрешения NFS

Чтобы правильно получить разрешения NFS, ваши пользователи должны иметь одинаковые UID и GUID на хосте и в гостях. Это довольно сложно настроить, и вы не должны менять его из гостя. Возможно, вы можете изменить его на хосте, чтобы сделать его доступным для записи в mysql и сделать UID и GUID одинаковыми. Конечно, в тот момент, когда хост изменится, это больше не будет работать.

общая папка rsync

Rsync может быть не самым быстрым с точки зрения синхронизации, но если вы создаете общую папку rsync, в которую записывает только MySQL и которая синхронизируется с какой-либо папкой на вашем хосте, это может быть решением. «Настоящие» проекты могут по-прежнему жить внутри общего ресурса virtualbox или nfs, и вам не нужно беспокоиться о правильных разрешениях.

Могут быть и другие решения:

Создайте стратегию резервного копирования/восстановления

Один из способов — сделать резервную копию MySQL внутри вашего бродячего ящика в разных точках, например. ежедневно. Вы также можете запускать резервное копирование, когда ящик выключен, таким образом создавая резервную копию прямо перед тем, как уничтожить ящик. Поместив эту резервную копию в общую папку, у вас будут актуальные данные на случай, если вы уничтожите ящик. Производительность должна быть довольно хорошей, поскольку данные, которые использует MySQL, не будут находиться в общей папке.

Запустите MySQL на хосте или другом бродячем компьютере

Конечно, можно подключиться из вашего бродячего ящика к вашему хосту или другому бродячему ящику, на котором работает MySQL. Ваш хост или этот ящик могут быть долговечными и служить центральным «сервером MySQL» для всех ваших проектов.

Запустить ведомое устройство MySQL на той же машине, которая записывает данные в общую папку

Я считаю, что с MySQL возможна комбинация ведущий/ведомый. Запуск как на одной машине с мастером (который вы используете в своих проектах), живущим внутри вашей виртуальной машины и ничего не записывающим в общую папку, так и с подчиненным, который пишет в вашу общую папку и является зеркалом вашего мастера. Это будет означать, что у вас высокая производительность и задержка в несколько секунд между записью чего-либо и записью в вашу общую папку. Конечно, поддерживать эту настройку в рабочем состоянии и следить за тем, чтобы она работала все время, может быть непросто.

person Sgoettschkes    schedule 02.04.2014
comment
Спасибо за подробный ответ. Я знаю, что то, что я прошу, не идеально, но, учитывая характер проекта, я подумал, что это будет наиболее удобно. Думаю, нет. Я, вероятно, закончу тем, что создам сценарий экспорта/импорта для тестовых данных, который мы сможем повторно загружать каждый раз, когда ящик предоставляется в первый раз. Разрешения NFS: к сожалению, я попробовал это, и mysql все еще жалуется при попытке запустить, потому что он не может chmod 0755 "$datadir" в сценарии инициализации. Я думаю, что некоторые из ваших решений могут сработать, если я решу пойти по этому пути. Спасибо еще раз. - person Jeff; 02.04.2014

У меня была такая же проблема или требование для моего локального разработчика на Mac. И я нашел решение для коробки Vagrant только для MySQL с внешними данными, связанными как folder_sync. Но я думаю, что он будет работать и на Win. Вот конфигурация коробки Vagrant: https://github.com/ronnyhartenstein/vagrant-mysql-shared-folder

И если вы понимаете немецкий, вот моя статья в блоге с некоторой справочной информацией и тестами (и, конечно, с ошибками): http://blog.rh-flow.de/2014/11/11/es-hat-sich-ausgemampft-vagrant-ist/

person garfyld    schedule 10.11.2014
comment
Считаете ли вы, что ваш ответ лучше предыдущего принятого ответа? - person Hamad; 10.11.2014
comment
Нет, я понимаю аргументы в принятом ответе. Я просто даю решение для первоначального вопроса. Если у кого-то нет со-разработчиков для его проектов (для меня есть только несколько интернет-магазинов и тестовых проектов), то нет необходимости иметь перестраиваемую базу данных MySQL. Так что для соразработчика это вообще не очень хорошее решение :) - person garfyld; 11.11.2014

Вы можете использовать bindfs для изменения пользователя/группы общего ресурса. На самом деле я использую плагин под названием vagrant-bindfs, который позволяет вам перемонтировать общий ресурс с разными владельцами. Это работает, но я не пробовал это с MySQL, чтобы увидеть, как это работает.

Соответствующие строки в моем Vagrantfile:

unless Vagrant.has_plugin?("vagrant-bindfs")
  raise 'vagrant-bindfs is not installed! Please install with vagrant plugin install vagrant-bindfs'
end

config.vm.synced_folder "../", "/temp-nfs-mounts/sites-unbinded", type: :nfs
config.bindfs.bind_folder "/temp-nfs-mounts/sites-unbinded", "/sites", :force_user  => "vagrant", :force_group => "vagrant", :create_as_user => true
person Matías Halles    schedule 12.08.2015