Как я могу восстановить свои MySQL базы данных из Homestead Vagrant VirtualBox? - PullRequest
5 голосов
/ 18 февраля 2020

Я управлял Homestead v8.2.0 и laravel/homestead (virtualbox, 7.1.0) и Vagrant 2.2.4. Мне нужно было обновить, потому что мне нужна поддержка PHP 7.4.

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

(я был очень осторожен , а не , чтобы использовать destroy, потому что я не хотел потерять любую из моих MySQL баз данных.)

Когда я бежал vagrant global-status, я увидел:

id       name          provider   state   directory
------------------------------------------------------------------------------
5620b14  vboxHomestead virtualbox running C:/code/Homestead

Поэтому я использовал git, чтобы оформить v10.2.0 из Хомстеда.

И я побежал vagrant box update. Я не был удивлен, что этот подход не работал, учитывая Laravel документы.

Итак, я решил: вместо обновление моего текущего окна, я просто создаю новый коробка рядом с ней (все еще не разрушая старую коробку).

Поэтому я скопировал C:/code/Homestead в новый каталог C:/code/HomesteadB.

Я обновился до Vagrant 2.2.7. Я запустил vagrant box add laravel/homestead и увидел новый laravel/homestead (virtualbox, 9.2.0) (обратите внимание, номер версии выше). Я побежал vagrant up, и я продолжал наслаждаться моей новой коробкой, работающей PHP 7.4. Казалось, все идет по плану.

Позже, когда я почувствовал вдохновение go вернуться к моей старой коробке и восстановить все старые данные там, я заметил, что базы данных MySQL отсутствуют!

Но это не имеет никакого смысла, потому что я никогда не удалял их. И я никогда не разрушал коробку (я все еще могу запустить vagrant up в старом C:/code/Homestead и затем vagrant ssh). И я не думаю, что vagrant box update также удалил бы MySQL баз данных.

Где они находятся и как их восстановить?

ОБНОВЛЕНИЕ в ответ на { ссылка }

myuser@ABCDESK MINGW64 /c/code/Homestead ((v10.2.0))
$ vagrant box list
laravel/homestead (virtualbox, 5.2.0)
laravel/homestead (virtualbox, 6.0.0)
laravel/homestead (virtualbox, 7.1.0)
laravel/homestead (virtualbox, 9.2.0)
redash/dev        (virtualbox, 0.1.0)

$ VBoxManage list vms
"Redash" {29166fde-e0bf-4f31-8efc-58a66afd78e5}
"redash_default_1502117350190_63240" {0b5935af-288a-4e4d-aa8a-ee04f42e3235}
"macOS 10.12 High Sierra" {37b09cb2-10cd-4e1a-8e2c-aefdb1a348c6}
"macOS Sierra" {f010233b-d058-4a6e-9493-5c4d68e99ef1}
"macOS High Sierra 10.13" {741f0d4d-7f16-4f42-993b-4d301ef68125}
"default" {f3e8f33d-0ca3-452d-9ae6-d93e5e412fbb}
"vboxHomestead" {0706d0b0-d31b-4137-9e97-f86b827f1530}
"vboxHomestead2020-01-31" {1ef6f202-9d81-4d41-a4b9-adaab7b12014}

$ ls -lah /c/code/Homestead/.vagrant/machines/
total 0
drwxr-xr-x 1 myuser 197121 0 Aug 27  2017 ./
drwxr-xr-x 1 myuser 197121 0 Apr  8  2019 ../
drwxr-xr-x 1 myuser 197121 0 Apr  4  2017 homestead-7/
drwxr-xr-x 1 myuser 197121 0 Aug 27  2017 vboxHomestead/

$ ls -lah /c/code/HomesteadB/.vagrant/machines/
total 0
drwxr-xr-x 1 myuser 197121 0 Jan 31 09:36 ./
drwxr-xr-x 1 myuser 197121 0 Jan 31 09:25 ../
drwxr-xr-x 1 myuser 197121 0 Jan 31 09:25 homestead-7/
drwxr-xr-x 1 myuser 197121 0 Jan 31 09:25 vboxHomestead/
drwxr-xr-x 1 myuser 197121 0 Jan 31 09:36 vboxHomestead2020-01-31/

$ ls -lah /c/code/Homestead/.vagrant/machines/vboxHomestead/virtualbox/
total 19K
drwxr-xr-x 1 myuser 197121    0 Apr  8  2019 ./
drwxr-xr-x 1 myuser 197121    0 Aug 27  2017 ../
-rw-r--r-- 1 myuser 197121   40 Apr  8  2019 action_provision
-rw-r--r-- 1 myuser 197121   10 Feb 18 12:20 action_set_name
-rw-r--r-- 1 myuser 197121  138 Feb 18 11:44 box_meta
-rw-r--r-- 1 myuser 197121    1 Apr  8  2019 creator_uid
-rw-r--r-- 1 myuser 197121   36 Apr  8  2019 id
-rw-r--r-- 1 myuser 197121   32 Apr  8  2019 index_uuid
-rw-r--r-- 1 myuser 197121 1.7K Apr  8  2019 private_key
-rw-r--r-- 1 myuser 197121  653 Feb 18 12:22 synced_folders
-rw-r--r-- 1 myuser 197121   17 Apr  8  2019 vagrant_cwd

$ ls -lah /c/code/HomesteadB/.vagrant/machines/vboxHomestead/virtualbox/
total 19K
drwxr-xr-x 1 myuser 197121    0 Jan 31 09:25 ./
drwxr-xr-x 1 myuser 197121    0 Jan 31 09:25 ../
-rw-r--r-- 1 myuser 197121   40 Jan 31 09:25 action_provision
-rw-r--r-- 1 myuser 197121   10 Jan 31 09:26 action_set_name
-rw-r--r-- 1 myuser 197121  138 Jan 31 09:25 box_meta
-rw-r--r-- 1 myuser 197121    1 Jan 31 09:25 creator_uid
-rw-r--r-- 1 myuser 197121   36 Jan 31 09:25 id
-rw-r--r-- 1 myuser 197121   32 Jan 31 09:25 index_uuid
-rw-r--r-- 1 myuser 197121 1.7K Jan 31 09:25 private_key
-rw-r--r-- 1 myuser 197121  653 Jan 31 09:25 synced_folders
-rw-r--r-- 1 myuser 197121   18 Jan 31 09:25 vagrant_cwd

$ ls -lah /c/code/HomesteadB/.vagrant/machines/vboxHomestead2020-01-31/virtualbox/
total 19K
drwxr-xr-x 1 myuser 197121    0 Jan 31 09:37 ./
drwxr-xr-x 1 myuser 197121    0 Jan 31 09:36 ../
-rw-r--r-- 1 myuser 197121   40 Jan 31 09:37 action_provision
-rw-r--r-- 1 myuser 197121   10 Feb 24 18:45 action_set_name
-rw-r--r-- 1 myuser 197121  138 Feb  4 11:56 box_meta
-rw-r--r-- 1 myuser 197121    1 Jan 31 09:36 creator_uid
-rw-r--r-- 1 myuser 197121   36 Jan 31 09:36 id
-rw-r--r-- 1 myuser 197121   32 Jan 31 09:36 index_uuid
-rw-r--r-- 1 myuser 197121 1.7K Jan 31 09:37 private_key
-rw-r--r-- 1 myuser 197121  654 Feb 24 18:46 synced_folders
-rw-r--r-- 1 myuser 197121   18 Jan 31 09:36 vagrant_cwd

$ cat /c/code/HomesteadB/.vagrant/machines/vboxHomestead2020-01-31/virtualbox/id
1ef6f202-9d81-4d41-a4b9-adaab7b12014

$ cat /c/code/HomesteadB/.vagrant/machines/vboxHomestead/virtualbox/id
0706d0b0-d31b-4137-9e97-f86b827f1530

$ cat /c/code/Homestead/.vagrant/machines/vboxHomestead/virtualbox/id
0706d0b0-d31b-4137-9e97-f86b827f1530

Ответы [ 2 ]

2 голосов
/ 26 февраля 2020

Я думаю, что вы смешиваете коробку и виртуальную машину - я сделал ответ здесь , чтобы объяснить различия, но в основном после того, как вы создали vagrant VM (Virtual Box resource), он не использует коробку.

Возможно, проблема в том, что вы сделали копию, но не удалили ссылку на виртуальную машину из папки poject, поэтому vagrant продолжал работать на той же виртуальной машине, но с использованием новой ссылки на блок.

Вам нужно проверить, что в вашей копии вашего проекта (C: / code / HomesteadB) .vagrant/machines/<default>/virtualbox/id - это идентификатор виртуальной машины VirtualBox, соответствующий вашему проекту, до обновления со всеми вашими данными.

Откройте Virtualbox и убедитесь, что эта виртуальная машина все еще там - (вы можете проверить в папке VirtualBox всех виртуальных машин). Если ее там нет, ваша виртуальная машина исчезла, и вы не сможете получить свои данные обратно, если у вас нет жесткого диска резервное копирование со ссылкой на виртуальную машину и копию вашего каталога VirtualBox

Я до сих пор не уверен, как это произойдет, потому что vagrant up после vagrant box update должно не перестроил ВМ. Если это так, проблема заключалась в том, что при копировании проекта вы не удаляли ссылку на виртуальную машину из каталога .vagrant, поэтому она все еще взаимодействовала с существующей виртуальной машиной. Если вы удалили ссылку на vagrant id после того, как скопировали свой проект, вы были бы в безопасности, и vagrant не смог бы прикоснуться к существующей виртуальной машине, потому что не было ссылки.

Вы должны открыть VirtualBox и проверить следующие 2 виртуальные машины

  • "vboxHomestead" {0706d0b0-d31b-4137-9e97-f86b827f1530}
  • "vboxHomestead2020-01-31" {1ef6f202-9d81-4d41-a4b9-ada77

откройте их и проверьте, можете ли вы найти ваши MySQL данные в этих ВМ, если не в этих ВМ, то они будут потеряны.

Я немного боюсь ( для вас) что вам нужна виртуальная машина 0706d0b0-d31b-4137-9e97-f86b827f1530, но она была воссоздана из новой папки laravel

1 голос
/ 25 февраля 2020

Ваш единственный шанс - надеяться, что vagrant box update не выполнит бесплатную sh, чистую установку mysql. Я бы попробовал несколько вещей, прежде чем потерять всякую надежду:

1) проверьте своего провайдера vm (VirtualBox ??), посмотрите, сколько там указано vms. Если есть больше, чем вы ожидаете, загрузите лишние из интерфейса VirtualBox и посмотрите, существуют ли ваши данные на нечетной машине, которой, по вашему мнению, не должно быть. Это очень мало шансов работать честно, но это стоит того. Он должен охватывать вас в том случае, если ваша старая коробка все еще существует где-то в ее старом состоянии. Если вы найдете что-нибудь, выполните mysqldump, а затем восстановите в новом окне.

2) vagrant ssh на вашем новом компьютере и cd /var/lib/ найдите папки, связанные с mysql. Это должно охватить вас в случае, если команда vagrant update не полностью очистила ваш mysql каталог данных. Я боюсь, что это может иметь :( но проверьте, есть ли файлы, которые выглядят как имена ваших старых таблиц или имена схем. Если вы найдете что-нибудь, измените каталог mysql data, чтобы он указывал на эту папку, смотрите https://dba.stackexchange.com/questions/14320/how-can-i-move-a-mysql-database-to-another-drive . Выполните mysqldump и восстановите в новом окне

3) используйте VBoxManage list vms, чтобы получить список идентификаторов бродячих ящиков. Если старый все еще там, вы можете указать на него. Проверьте это сообщение: { ссылка }. Если вы получаете доступ к вашим данным, выполните mysqldump ваших данных и восстановите их в новом окне.

Есть некоторые шансы, что это может сработать, но, к сожалению, если вы не можете найти свои данные, они либо исчезли или недоступен, так что вам, возможно, придется принять свою судьбу: (

...