Czy można zmienić domyślny katalog danych MySQL na inną ścieżkę? Czy będę mógł uzyskać dostęp do baz danych ze starej lokalizacji?
Czy można zmienić domyślny katalog danych MySQL na inną ścieżkę? Czy będę mógł uzyskać dostęp do baz danych ze starej lokalizacji?
Odpowiedzi:
Zatrzymaj MySQL za pomocą następującego polecenia:
sudo /etc/init.d/mysql stop
Skopiuj istniejący katalog danych (domyślnie zlokalizowany w /var/lib/mysql
) za pomocą następującego polecenia:
sudo cp -R -p /var/lib/mysql /newpath
edytuj plik konfiguracyjny MySQL za pomocą następującego polecenia:
sudo gedit /etc/mysql/my.cnf # or perhaps /etc/mysql/mysql.conf.d/mysqld.cnf
Poszukaj wpisu datadir
i zmień ścieżkę (która powinna być /var/lib/mysql
) do nowego katalogu danych.
W terminalu wprowadź polecenie:
sudo gedit /etc/apparmor.d/usr.sbin.mysqld
Poszukaj linii zaczynających się od /var/lib/mysql
. Zmień /var/lib/mysql
linie z nową ścieżką.
Zapisz i zamknij plik.
Zrestartuj profile AppArmor za pomocą polecenia:
sudo /etc/init.d/apparmor reload
Zrestartuj MySQL za pomocą polecenia:
sudo /etc/init.d/mysql restart
Teraz zaloguj się do MySQL i uzyskaj dostęp do tych samych baz danych, które miałeś wcześniej.
alias /var/lib/mysql/ -> /newpath/,
Szybko i łatwo:
# Create new directory for MySQL data
mkdir /new/dir/for/mysql
# Set ownership of new directory to match existing one
chown --reference=/var/lib/mysql /new/dir/for/mysql
# Set permissions on new directory to match existing one
chmod --reference=/var/lib/mysql /new/dir/for/mysql
# Stop MySQL before copying over files
service mysql stop
# Copy all files in default directory, to new one, retaining perms (-p)
cp -rp /var/lib/mysql/* /new/dir/for/mysql/
Edytuj /etc/my.cnf
plik i [mysqld]
dodaj ten wiersz:
datadir=/new/dir/for/mysql/
Jeśli używasz CageFS (z lub bez CloudLinux) i chcesz zmienić katalog MySQL, MUSISZ dodać nowy katalog do tego pliku:
/etc/cagefs/cagefs.mp
A następnie uruchom to polecenie:
cagefsctl --remount-all
musiałbyś skopiować aktualne dane do nowego katalogu i zmienić my.cnf
swój MySQL.
[mysqld]
datadir=/your/new/dir/
tmpdir=/your/new/temp/
Musisz skopiować bazę danych, gdy serwer nie działa .
ln -s
statycznego symbolicznego rysia, czy to nie zadziała?
my.cnf
Najpierw należy zatrzymać serwer mysql. na przykład
# /etc/init.d/mysql stop
Następnie należy skopiować stary katalog danych (np. / Var / lib / mysql) wł. uprawnienia do nowego katalogu za pośrednictwem
# cp -R -p /var/lib/mysql /new/data/dir
teraz możesz zmienić /etc/mysql/my.cnf
dane na nowe i zrestartować serwer
# /etc/init.d/mysql restart
Jeśli tak jak ja jesteś na Debianie i chcesz przenieść katalog mysql do swojego domu lub ścieżkę na / home / ..., rozwiązaniem jest:
Pewnego dnia znajdę rozwiązanie dla mnie w dokumentacji mariadbu. Mam nadzieję, że to pomoże niektórym facetom!
Chciałem zachować bazę danych na moim komputerze, ale także mieć dane na moim zewnętrznym dysku twardym i przełączać się między nimi.
Jeśli korzystasz z komputera Mac i zainstalowałeś MySQL za pomocą Homebrew, powinno to zadziałać. W przeciwnym razie wystarczy zastąpić odpowiednie lokalizacje MySQL datadir
na swoim komputerze.
#cd to my data dir location
cd /usr/local/var/
#copy contents of local data directory to the new location
cp -r mysql/ /Volumes/myhd/mydatadir/
#temporarily move the old datadir
mv mysql mysql.local
#symlink to the new location
ln -s /Volumes/myhd/mydatadir mysql
Następnie, gdy chcesz wrócić, po prostu wykonaj:
mv mysql mysql.remote
mv mysql.local mysql
i ponownie używasz lokalnej bazy danych. Mam nadzieję, że to pomoże.
Pierwszy przystanek mysqld
mysql_install_db --user=mysql \
--basedir=/opt/mysql/mysql \
--datadir=/opt/mysql/mysql/data
Następnie zmień datadir w swoim /etc/mysql/my.cnf
Start mysqld
Uwagi:
# 1: prawdopodobnie musisz dostosować ustawienia SELinuksa (wypróbuj z wyłączonym SELinuksem w przypadku problemów), problem może też stanowić Apparmor (Ubuntu).
# 2: zobacz Poradnik instalacji bazy danych MySQL
Najpierw zatrzymaj mysql
sudo service mysql stop
skopiuj dane mysql do nowej lokalizacji.
sudo cp -rp /var/lib/mysql /yourdirectory/
jeśli używasz apparmor, edytuj następujący plik i wykonaj następujące czynności
sudo vim /etc/apparmor.d/usr.sbin.mysqld
Zastąp gdzie / var / lib / przez / yourdirectory /, a następnie dodaj następującą, jeśli nie istnieje w pliku
/yourdirectory/mysql/ r,
/yourdirectory/mysql/** rwk,
Zapisz plik za pomocą polecenia
:wq
Edytuj plik my.cnf
sudo vim /etc/mysql/my.cnf
Zastąp gdzie / var / lib / przez / yourdirectory /, a następnie zapisz za pomocą polecenia
:wq
wreszcie uruchom mysql
sudo service mysql start
@zobacz więcej o raid0, optymalizacji ici
To rozwiązanie działa w systemie Windows 7 przy użyciu Workbencha. Aby to zrobić, będziesz potrzebować uprawnień administratora. Tworzy połączenie (jak skrót) do miejsca, w którym naprawdę chcesz przechowywać swoje dane
Otwórz Workbench i wybierz INSTANCJA - Uruchomienie / Wyłączenie Zatrzymaj serwer
Zainstaluj Junction Master z https://bitsum.com/junctionmaster.php
Przejdź do C: \ ProgramData \ MySQL \ MySQL Server 5.6
Kliknij prawym przyciskiem myszy Dane i wybierz "PRZENIEŚ, a następnie LINK folder do ..." Zaakceptuj ostrzeżenie Wskaż miejsce docelowe na "Twój nowy katalog danych tutaj bez cudzysłowów" Kliknij PRZENIEŚ I POŁĄCZ
Teraz przejdź do „Twój nowy katalog danych tutaj bez cudzysłowów”
Kliknij prawym przyciskiem myszy Dane Przejdź do zakładki zabezpieczeń Kliknij Edytuj Kliknij Dodaj Typ USŁUGA SIECIOWA następnie Sprawdź nazwy Kliknij OK Kliknij pole wyboru Zezwalaj na pełną kontrolę, a następnie OK
Wróć do Workbencha i uruchom serwer
Ta metoda zadziałała dla mnie przy użyciu MySQL Workbench 6.2 w systemie Windows 7 Enterprise.
Wszystko, co powiedział @ user1341296, plus ...
Lepiej nie zmieniać /etc/mysql/my.cnf
Zamiast tego chcesz utworzyć nowy plik /etc/mysql/conf.d/ext.cnf
(dowolna nazwa, ale rozszerzenie powinno być cnf
)
I umieść w nim swoją zmianę:
[mysqld]
datadir=/vagrant/mq/mysql
W ten sposób
Jeśli jesteś użytkownikiem systemu Windows i wylądowałeś tutaj, aby dowiedzieć się, że wszystkie odpowiedzi są dla użytkowników systemu Linux, nie rozczaruj się! Nie pozwolę ci tracić czasu tak jak ja.
Trochę bzdur przed rozwiązaniem:
MySQL używa katalogu Data do przechowywania danych z różnych tworzonych przez Ciebie baz danych. Cóż, w końcu musi przechowywać je w postaci plików z dodatkiem żonglerki w aplikacji i formacie pliku, aby zapewnić, że obietnice bazy danych, których nauczyłeś się w klasach baz danych, są nienaruszone.
Teraz chcesz się upewnić, że jest wystarczająco dużo miejsca do przechowywania dużych baz danych, które możesz utworzyć w przyszłości, więc pomyślałeś: Hej! Chcę umieścić go na innym dysku, który ma więcej miejsca.
Więc wykonaj następujące czynności.
Krok - 1 : Zatrzymywanie usługi MySQL.
Window Key + R - will open Run
servies.msc - will open services manager
Locate MySQL80 (80 is for version 8.0, look for the one you've).
Stop it. (Right click, Stop)
Krok - 2 : Znalezienie bieżącego katalogu danych
Goto C:\ProgramData\MySQL\MySQL Server 8.0
Domyślnie powinien być tutaj nazwany folder Data
, to jest ten, który jest używany przez MySQL w ustawieniach domyślnych (pod warunkiem, że nie znaleźli innej lepszej lokalizacji), ale sprawdźmy to.
Odnaleźć my.ini
plik, powinien tam być.
Otwórz go w edytorze (może Notepad ++).
Wykonaj CTRL + F, aby dowiedzieć się datadir
w pliku.
Cokolwiek jest tutaj wymienione, to rzeczywista lokalizacja aktualnie używana przez MySQL dla katalogu danych. To właśnie chcesz zmienić.
Krok - 3 : Zastąpienie go nowym katalogiem danych.
Powiedzmy, że chcesz, aby Twój nowy katalog danych był W: __ MySQL_Data. Zmieńmy
datadir
wartość w my.ini
pliku na tę wartość. Zachowaj komentarz poprzedniej wartości, abyś nie musiał jej pamiętać.
# Path to the database root
# datadir=C:/ProgramData/MySQL/MySQL Server 8.0/Data
datadir=W:/__MySQL_Data
Teraz użyj xcopy
skopiować domyślne datadir
do W:\
. Uruchom wiersz poleceń (Window + R, cmd, Enter)
>> xcopy "\C:\ProgramData\MySQL\MySQL Server 8.0" "W:\" /E /H /K /O /X
I zmień nazwę skopiowanego folderu na nową datadir
wartość, którą zmieniłeś. Tutaj:W:/__MySQL_Data
Dlaczego po prostu nie skopiować? Cóż, ponieważ to nie jest FAJNE !, pomaga to nie stracić uprawnień do skopiowanego folderu, więc po ponownym uruchomieniu MySQL80
nie wystąpi głupi błąd: „Usługa MySQL80 na komputerze lokalnym została uruchomiona, a następnie zatrzymana. Niektóre usługi zatrzymują się automatycznie, jeśli nie są używane przez inne usługi lub programy. ” - Dzięki uprzejmości: Microsoft
Krok - 4 : Ponowne uruchomienie usługi
Well, go back to the Services Manager to Start again,
"MySQL80" that you stopped, to restart it again.
Krok - 5 : Gotowe! A teraz wracaj do pracy !!
Często muszę to robić podczas uaktualniania maszyn, przechodzenia z pudełka do pudełka. Oprócz przenoszenia / var / lib / mysql do lepszej lokalizacji, często muszę przywrócić stare tabele DB ze starej instalacji MySQL. Aby to zrobić ...
Musieliśmy przenieść MySQL do /home
katalogu, ponieważ został zmapowany z innego dysku fizycznego. Aby ułatwić życie na żywo, zamiast zmieniać katalog w my.cnf, zamapowaliśmy nowy katalog /home/mysql
w miejsce pierwotnego katalogu /var/lib/mysql
. Działa dla nas jak urok (testowane na CentOS 7.1).
Utwórz nowy katalog i ustaw odpowiednie uprawnienia.
mkdir -p /home/mysql
chmod 755 /home/mysql
chown mysql:mysql /home/mysql
Zatrzymaj MySQL, jeśli jest uruchomiony.
systemctl stop mysql
Przenieś katalog danych.
mv -f /var/lib/mysql/* /home/mysql
Utwórz stały montaż i wykonaj go.
echo "/home/mysql /var/lib/mysql none bind 0 0" >> /etc/fstab
mount -a
Zrestartuj serwer.
systemctl start mysql
Jeśli chcesz to zrobić programowo (bez ręcznego wprowadzania tekstu za pomocą gedit), oto wersja dla pliku Dockerfile na podstawie odpowiedzi użytkownika1341296 powyżej:
FROM spittet/ruby-mysql
MAINTAINER you@gmail.com
RUN cp -R -p /var/lib/mysql /dev/shm && \
rm -rf /var/lib/mysql && \
sed -i -e 's,/var/lib/mysql,/dev/shm/mysql,g' /etc/mysql/my.cnf && \
/etc/init.d/mysql restart
Dostępne w centrum Docker tutaj: https://hub.docker.com/r/richardjecooke/ruby-mysql-in-memory/
Po pierwsze, powinieneś wiedzieć, gdzie jest twój plik konfiguracyjny? gdzie jest twój plik konfiguracyjny?
JEŚLI zainstalowałeś z apt-get lub yum install。
config może pojawić się w
/etc/mysql/my.cnf
plik danych może pojawić się w
/ var / lib / mysql
i co powinieneś zrobić, to
a następnie wykonane prace.
Ale jeśli nie zainstalowałeś go za pomocą apt lub yum, direcotry może tego nie lubić i możesz znaleźć pliki mysql za pomocą
whereis mysql
W SuSE 13.1 działa to dobrze, aby przenieść katalog danych mysql w inne miejsce, np. Do / home / example_user /, i nadać mu bardziej pouczającą nazwę:
W / var / lib /:
# mv -T mysql /home/example_user/mysql_datadir
# ln -s /home/example_user/mysql_datadir ./mysql
Zrestartowałem mysql:
# systemctl restart mysql.service
ale podejrzewam, że nawet to nie było konieczne.
W jednym ze środowisk zmieniłem katalog danych mysql na nową lokalizację, ale podczas restartu serwera mysql trwało to trochę. Sprawdziłem więc port i stwierdziłem, że inny proces nasłuchuje na porcie mysql. Więc zabiłem proces i zrestartowałem serwer mysql i działało dobrze.
Wykonałem poniższe kroki, aby zmienić katalog danych, który działał doskonale. zmień katalog danych mysql w systemie Linux
Powyższe kroki są fundamentalne i podstawowe. Śledziłem je i nadal otrzymywałem błąd „mysql nie uruchomił się”.
Aby nowy folder przechował dane mysql, musisz upewnić się, że folder ma uprawnienia i własność mysql: mysql.
Poza tym musi sprawdzić uprawnienia i własność katalogu nadrzędnego mysql, jeśli ma, powiedzmy, / data / mysql /. Tutaj / data / katalog powinien być root: root. Naprawiłem błąd „Nie udało się uruchomić mysql” po zmianie właściciela katalogu nadrzędnego / mysql. System operacyjny w mojej maszynie wirtualnej to RHEL 7.6.
Możliwe jest również dowiązanie symboliczne do datadir. Przynajmniej w macOS, środowisku deweloperskim.
(homebrew) np
# make sure you're not overwriting anything important, backup existing data
mv /usr/local/var/mysql [your preferred data directory]
ln -s [your preferred data directory] /usr/local/var/mysql
Uruchom ponownie mysql.
Jeśli używasz SE linux, ustaw go na tryb zezwalający, edytując / etc / selinux / config i zmieniając SELINUX = egzekwowanie na SELINUX = permissive
datadir