Можно ли использовать одну и ту же базу данных MySQL в Windows (XAMPP) и Linux (LAMP)?

У меня есть режим двойной загрузки с Windows 7 и Ubuntu 10.

В Windows 7 у меня установлен XAMPP, в Linux установлен LAMP.
Можно ли принудительно установить серверы БД MySQL в разные операционные системы< /strong> (даже если они будут одинаковых версий, они разные) использовать одни и те же физические файлы?

Таким образом, в режиме двойной загрузки, независимо от того, что я запускаю другую операционную систему, я смогу использовать те же физические данные. Иногда я хотел бы сменить ОС, но было бы здорово иметь возможность использовать одни и те же базы данных.


person Jan    schedule 09.01.2011    source источник
comment
Интересный вопрос. Теоретически это должно работать — базовый формат файла должен быть идентичным. Хотя мне как-то не совсем нравится эта идея. Интересно посмотреть что получится   -  person Pekka    schedule 09.01.2011
comment
без каких-либо программ, которые могут тормозить мою работу - google talk, ICQ например --- почему бы просто не запустить? ;-)   -  person zerkms    schedule 09.01.2011
comment
Привет. Вы нашли ответ? Это работает? Мне нужно то же самое. Если вы нашли ответ - пожалуйста, примите его (если он есть среди уже данных ответов) или опубликуйте свой собственный.   -  person Ivan    schedule 14.10.2011
comment
нашел это: irisoftonline.com/ попробую сам. включает символические ссылки... так что кажется логичным.   -  person helgatheviking    schedule 29.02.2012
comment
См. мое обширное аналогичное решение здесь: unix.stackexchange.com/questions/170751/ в Unix и Linux StackExchange.   -  person Elliptical view    schedule 19.09.2016
comment
@Ivan: Извини, но тогда я не мог это решить, но с тех пор я еще не пробовал, но обязательно сделаю, как только будет время снова настроить режим двойной загрузки (может быть, на ВМ). Вы смогли заставить его работать?   -  person Sk8erPeter    schedule 21.04.2020
comment
@Ellipticalview: Спасибо! Ваш ответ кажется очень многообещающим, я обязательно это проверю!   -  person Sk8erPeter    schedule 21.04.2020


Ответы (5)


в вашем файле my.ini (в Windows он находится где-то вроде C:\Program Files\MySQL\MySQL Server 5.1. Это основной файл конфигурации для MySQL) у вас должна быть эта строка:

datadir="C:/ProgramData/MySQL/MySQL Server 5.1/Data/" например

измените его как в Windows, так и в Linux Ubuntu, чтобы он указывал на одну физическую папку (на раздел с файловой системой, которую Windows может распознать). Это сработает. Форматы файлов идентичны.

Загружаетесь ли вы с Ubuntu или Windows 7, это не имеет значения, 2 разные сборки MySQL будут искать данные в одном и том же месте. Как только данные изменены в среде Windows, вы загружаетесь из Ubuntu, и данные уже изменены.

person AlexanderMP    schedule 09.01.2011
comment
Если вам случится использовать таблицы InnoDB в своей БД, будет еще веселее. В моем случае мне нужно удалять файлы ib_logfile0 и ib_logfile1 из каталога данных MySQL каждый раз перед запуском сервера MySQL. Лог-файлы воссоздаются при запуске сервера. Вы можете автоматизировать его с помощью скриптов. Будьте осторожны при попытке сделать это - сделайте резервные копии всех измененных/удаленных файлов! - person Martin Pecka; 14.06.2013
comment
Я не знаю, связано ли это с InnoDB или с чем-то еще, но я был вынужден притвориться, что пользователь mysql владеет файлами базы данных. Это можно просто сделать в fstab: bindfs#/media/Windows/PHP/mysql-data /media/mysql fuse owner=mysql,group=mysql,perms=755 0 0 - person Martin Pecka; 14.06.2013

Хотя это и не идеально, это должно быть хорошо, если:

  1. Вы используете идентичные версии MySQL в обеих операционных системах.

  2. Вы закрываете mysqld перед копированием файлов данных. (Если вы собираетесь копировать файлы данных между разделами, а не хранить их в общем разделе FAT32).

По сути, пока MySQL работает на архитектуре с таким же «порядком байтов», форматы файлов должны быть переносимыми.

В качестве предложения вы можете просто закрыть ICQ и т. д. и использовать свободную память для запуска Ubuntu в виртуальном VirtualBox. машина поверх Windows 7, поэтому вы можете легко получить доступ к своей среде разработки без перезагрузки и т. д.

На самом деле это довольно хорошая настройка, поскольку это означает, что вы можете использовать среду разработки Windows, если хотите, и просто размещать данные веб-сайта на монтировании Samba на виртуальной машине Ubuntu.

person John Parker    schedule 09.01.2011
comment
Я поддерживаю это и ответ Александра МП. Тем не менее, необходимость переключать ОС только для того, чтобы сфокусироваться, звучит так, будто вам нужна более фундаментальная помощь. :) - person Noufal Ibrahim; 09.01.2011

Пока данные доступны для совместного использования/восстановления/записи в обеих ОС, а формат обоих файлов идентичен в обеих ОС, это должно быть выполнимо.

Первая проблема, которую я могу себе представить, это нечувствительность к регистру в Windows.
поэтому преобразуйте базу данных/таблицу в camel_case (или camelcase), если вы всегда используете CamelCase.

Дополнительная информация для прочтения — http://dev.mysql.com/doc/refman/5.0/en/limits-windows.html

person ajreal    schedule 09.01.2011
comment
+1 Хороший вопрос о чувствительности к регистру имени таблицы. (Я всегда был сторонником имен только в нижнем регистре.) - person John Parker; 09.01.2011

Конечно, можете.
Но я не думаю, что это возможно для вашей системы с двойной загрузкой.

Предположим, ваш сервер MySQL установлен на машине с Win7. Вы можете прекрасно получить к нему доступ из среды Win7 и даже из среды Linux (если вы не запретите доступ в настройках вашего сервера MySQL). Система, в которой установлен ваш MySQL, должна быть запущена! Тогда вы сможете получить к ней доступ из нескольких систем, если это разрешено ;-)

person Andreyco    schedule 09.01.2011
comment
как бы вы запустили две системы на одной машине?!!!?!? - person ; 14.04.2011
comment
Первоначальная цель заключалась в том, чтобы заставить серверы БД, установленные в разных операционных системах (даже если они были бы одинаковых версий, они разные), использовать одни и те же физические файлы. Таким образом, в режиме двойной загрузки, независимо от того, что я запускаю другую операционную систему, я смогу использовать те же физические данные. (Конечно, одновременно может работать только одна ОС.) - person Sk8erPeter; 21.04.2020

Я долго гуглил и обнаружил, что запуск ядра Linux — это решаемый и осуществимый способ.

Бродяга

Это инструмент для создания сред виртуальных машин и управления ими в рамках единого рабочего процесса. Основная причина, по которой я утверждаю, что вы используете vagrant, заключается в том, что он не слишком тяжелый и не потребляет много ресурсов вашего компьютера. Я полагаю, что вы ознакомились с документацией Vagrant, которая позволит вам запустить машину на базе Linux на ваша физическая машина.

Предположим, что хост-машине назначен IP-адрес 192.168.1.2, а виртуальной машине — IP-адрес 192.168.1.10, и убедимся, что хост-машина и гостевая машина могут видеть друг друга. Внимательно прочтите раздел "Сеть", чтобы настроить конфигурацию сети.

Проверка соединения между хостом и гостевой машиной

Установите сервер MySQL

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

Откройте терминал в машине, настроенной на предыдущем шаге. Выполните следующую команду:

sudo apt-get install mysql-server-5.6

Примечания. Это зависит от версии установленного дистрибутива Linux, приведенная выше команда может быть изменена в соответствии с вашими потребностями. Для установки я использовал ядро ​​Ubuntu 14.04, см. ссылку.

Во время установки ваш сервер попросит вас выбрать и подтвердить пароль для пользователя MySQL root. Это административная учетная запись в MySQL с повышенными привилегиями.

Проверка установки В терминале гостевой машины (т. е. виртуальной машины) выполните следующую команду:

mysql -u root -p

запросит пароль MySQL, а затем предоставит тот, который вы установили во время установки MySQL Server. Ниже приведен снимок экрана, если вы передаете правильную информацию на сервер MySQL.

введите здесь описание изображения

Включите удаленный доступ к серверу MySQL

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

GRANT ALL PRIVILEGES ON *.* TO 'root'@'192.168.1.2' IDENTIFIED BY PASSWORD '*4ACFE3202A5FF5CF467898FC58AAB1D615029441' WITH GRANT OPTION; GRANT PROXY ON ''@'' TO 'root'@'192.168.1.2' WITH GRANT OPTION; FLUSH PRIVILEGES;

где 192.168.1.2 является IP-адресом хост-компьютера, а хешированная строка password получается из таблицы user в базе данных mysql.

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

Проверка удаленного доступа

С терминала на хост-компьютере запустите следующую команду:

mysql -h192.168.1.2 -uroot -p

который просит вас ввести пароль. Если учетные данные root верны, вы увидите снимок экрана, подобный приведенному выше. Следует обратить внимание на одну вещь: добавить -h192.168.1.2 после команды mysql, потому что мы не на машине, где установлен сервер MySQL.

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

person Tung    schedule 16.01.2013
comment
Вы действительно думаете, что это ОТВЕТ на вопрос?! - person Sk8erPeter; 27.08.2013
comment
@Sk8erPeter: Это мое предложение, потому что мы можем запустить виртуальную коробку, играющую роль веб-сервера. Я думаю, что это решение может работать хорошо. И я пробовал это. - person Tung; 14.10.2013
comment
Во-первых, вы ничего не ответили. Вы только что написали, что погуглили и обнаружили, что это выполнимо. Поздравляем! :D Но как это поможет КОМУ? Вы не вдавались в подробности, КАК это сделать, а Stack Overflow — это форум для ПОМОЩИ друг другу, а не просто ожидания голосов за какую-то ерунду, которая не содержит ничего важного и ничего полезного. Я предлагаю вам удалить свой ответ, чтобы не получить за него больше отрицательных голосов (что, к сожалению, вы заслуживаете, извините) ИЛИ отредактировать его, чтобы поделиться чем-то полезным (но в этом случае вам лучше удалить этот и написать новый ответ). - person Sk8erPeter; 14.10.2013
comment
@ Sk8erPeter, даже когда ты прав, я не думаю, что грубость необходима. - person Jaime Hablutzel; 20.04.2020
comment
Спустя пару лет я обновил свой ответ, основываясь на своем опыте и на том, что я получил. Спасибо @JaimeHablutzel за доброе слово. Никто не считает мое обновленное решение достойным голосования. - person Tung; 20.04.2020
comment
@JaimeHablutzel: Думаю, ты прав. :) Это было много лет назад. :) Хотя я до сих пор не понимаю, почему Тунг не удаляет свой ответ, который вообще не решает исходную проблему. Я бы определенно проголосовал за его пост, если бы в нем было что-то полезное, связанное с исходным вопросом. - person Sk8erPeter; 21.04.2020
comment
@ Sk8erPeter: Не могли бы вы прочитать мой обновленный ответ выше? Можете ли вы найти какой-либо полезный момент? Я показал, как настроить среду, в которой мы можем совместно использовать сервер базы данных, например. vagrant, а не запускать виртуальную машину. Это выполнимо. Особенно он может заменить контейнер в эпоху докеризации. - person Tung; 21.04.2020