Czy mogę udostępniać pliki bazy danych MySql w systemie Windows podczas podwójnego rozruchu?

12

Chciałbym używać zarówno Ubuntu, jak i Windows (podwójnego rozruchu) moich plików bazy danych MySql znajdujących się na partycji NTFS. Czy to zadziała? Jakieś gotcha?

maaartinus
źródło
4
DLA REJESTRU WSPÓLNOTY: Użytkownik pyta o zgodność formatów danych MySQL między Ubuntu Linux a Microsoft Windows. Użytkownik zastanawia się, czy dane przechowywane w formacie Ubuntu Linux dla MySQL są zgodne ze sposobem, w jaki wersja MySQL w systemie Windows przechowuje dane, aby można było edytować i przywracać dane bazy danych zarówno w systemie Windows, jak i MySQL.
Thomas Ward
Odp .: Właśnie podałem obszerną odpowiedź na to pytanie tutaj , w StackExchange dla systemów Unix i Linux .
Eliptyczny widok

Odpowiedzi:

9

Tak, działa, ale z pewnymi dziwactwami. MySQL używa tych samych formatów plików na różnych platformach, więc wystarczy udostępnić katalog danych. Jednym z problemów jest to, że katalog danych musi mieć mysql jako właściciela i grupę w Ubuntu. W systemie Windows nie jest rozróżniana wielkość liter, a w systemie Linux rozróżniana jest wielkość liter, więc zachowaj jednolitość wszystkich nazw: całą nazwę małymi lub dużymi literami, ale nie mieszaj ich.

Od początku do końca; jeśli masz już skonfigurowane ustawienia, może to wymagać drobnych poprawek w celu dopasowania do konfiguracji:

  • Zainstaluj i skonfiguruj MySQL w obu systemach.
  • Zatrzymaj serwer mysql, jeśli jest uruchomiony.
  • Utwórz nową partycję NTFS. Zaznacz nazwę urządzenia (nazwijmy to sdXNna razie).
  • Przenieś katalog danych mysql z Ubuntu na nową partycję.

    mkdir /{mountpoint}/mysql_data
    sudo mv /var/lib/mysql /{mountpoint/mysql_data
    

    za pomocą mvzapisuje uprawnienia.

  • Utwórz nowy katalog mysql

    sudo mkdir /var/lib/mysql
    
  • Zamontuj partycję NTFS na /var/lib/mysql. Zmień nazwę urządzenia na otrzymaną po utworzeniu partycji NTFS.

    sudo mount /dev/{sdXN} /var/lib/mysql -t ntfs-3g -o uid=mysql,gid=mysql,umask=0077
    
  • Aby automatycznie zamontować podczas rozruchu, znajdź identyfikator UUID partycji oraz ustawienia regionalne i edytuj /etc/fstab.

    ls -l /dev/disk/by-uuid
    locale -a
    sudo gedit /etc/fstab   
    UUID={number_found_with_the_ls-l} /var/lib/mysql ntfs-3g uid=mysql,gid=mysql,umask=0077,locale={your_locale}.utf8  0  0
    
  • Zmień ścieżkę „datadir” na, /etc/mysql/my.cnfaby wskazywała/var/lib/mysql/mysql_data

  • Uruchom serwer mysql i przetestuj go.

  • Zmodyfikuj plik konfiguracyjny systemu Windows ( my.ini) i ustaw „datadir” na X:/mysql_data(zamień X:na miejsce, w którym montujesz go pod Windows).

Opracowano z tematu 1442148 na UF.org .

Mam działającą wersję Ubuntu; więc częściowo niesprawdzone, ponieważ nie mam systemu Windows

Rinzwind
źródło
Bardzo ładna odpowiedź! Tylko dwa komentarze: Istnieje już wiele różnych nazw liter i używanie lower_case_table_names=1go działa dobrze. Bez opcji montowania natknąłem się na ten błąd (który w rzeczywistości jest błędem IMHO).
maaartinus
„sudo mv / var / lib / mysql / dev / {sdXN} / mysql_data” powoduje błąd. Zobacz unix.stackexchange.com/questions/310433/…
Eliptyczny widok
1

Jeśli dodałeś partycję linux do środowiska, które wcześniej było tylko w systemie Windows, możesz użyć bazy danych z kilkoma drobnymi poprawkami. Długa wersja tutaj , krótka wersja:

Musisz mount --bind '/media/windows/ProgramData/MySQL/MySQL Server 5.5/data' /var/lib/mysqluruchomić przy starcie (zakładając, że zamontujesz dysk systemu Windows /media/windowsza pomocą fstab).

Aby obejść sprawdzanie rozmiaru dziennika innodb, musisz przenieść dzienniki innodb dla partycji Ubuntu. W my.cnfdodaj, innodb_log_group_home_dir = /var/log/mysqlaby dzienniki były wyświetlane obok dziennika błędów mysql.

Josiah
źródło