Ist es möglich, mein Standard-MySQL-Datenverzeichnis in einen anderen Pfad zu ändern? Kann ich vom alten Speicherort aus auf die Datenbanken zugreifen?
Ist es möglich, mein Standard-MySQL-Datenverzeichnis in einen anderen Pfad zu ändern? Kann ich vom alten Speicherort aus auf die Datenbanken zugreifen?
Antworten:
Stoppen Sie MySQL mit dem folgenden Befehl:
sudo /etc/init.d/mysql stop
Kopieren Sie das vorhandene Datenverzeichnis (Standard in /var/lib/mysql
) mit dem folgenden Befehl:
sudo cp -R -p /var/lib/mysql /newpath
Bearbeiten Sie die MySQL-Konfigurationsdatei mit dem folgenden Befehl:
sudo gedit /etc/mysql/my.cnf # or perhaps /etc/mysql/mysql.conf.d/mysqld.cnf
Suchen Sie nach dem Eintrag für datadir
und ändern Sie den Pfad (der sein sollte /var/lib/mysql
) zum neuen Datenverzeichnis.
Geben Sie im Terminal den folgenden Befehl ein:
sudo gedit /etc/apparmor.d/usr.sbin.mysqld
Suchen Sie nach Zeilen, die mit beginnen /var/lib/mysql
. Ändern Sie /var/lib/mysql
die Zeilen mit dem neuen Pfad.
Speichern und schließen Sie die Datei.
Starten Sie die AppArmor-Profile mit dem folgenden Befehl neu:
sudo /etc/init.d/apparmor reload
Starten Sie MySQL mit dem folgenden Befehl neu:
sudo /etc/init.d/mysql restart
Melden Sie sich jetzt bei MySQL an und Sie können auf dieselben Datenbanken zugreifen, die Sie zuvor hatten.
alias /var/lib/mysql/ -> /newpath/,
Schnell und einfach zu erledigen:
# 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/
Bearbeiten Sie die /etc/my.cnf
Datei und [mysqld]
fügen Sie unter diese Zeile hinzu:
datadir=/new/dir/for/mysql/
Wenn Sie CageFS (mit oder ohne CloudLinux) verwenden und das MySQL-Verzeichnis ändern möchten, MÜSSEN Sie das neue Verzeichnis zu dieser Datei hinzufügen:
/etc/cagefs/cagefs.mp
Führen Sie dann diesen Befehl aus:
cagefsctl --remount-all
Sie müssten die aktuellen Daten in das neue Verzeichnis kopieren und my.cnf
Ihr MySQL ändern .
[mysqld]
datadir=/your/new/dir/
tmpdir=/your/new/temp/
Sie müssen die Datenbank kopieren, wenn der Server nicht ausgeführt wird .
ln -s
statischen symbolischen Luchs verwenden, schafft das das nicht?
my.cnf
Zuerst sollten Sie den MySQL-Server stoppen. z.B
# /etc/init.d/mysql stop
Danach sollten Sie das alte Datenverzeichnis (zB / var / lib / mysql) inkl. Berechtigungen für Ihr neues Verzeichnis über
# cp -R -p /var/lib/mysql /new/data/dir
Jetzt können Sie /etc/mysql/my.cnf
die Daten neu ändern und den Server neu starten
# /etc/init.d/mysql restart
Wenn Sie wie ich auf Debian sind und das MySQL-Verzeichnis zu Ihnen nach Hause oder zu einem Pfad auf / home / ... verschieben möchten, lautet die Lösung:
Eines Tages, um die Lösung für mich in der Mariadb-Dokumentation zu finden. Hoffe das hilft einigen Jungs!
Ich wollte eine Datenbank auf meinem Computer behalten, aber auch Daten auf meiner externen Festplatte haben und zwischen der Verwendung der beiden wechseln.
Wenn Sie auf einem Mac arbeiten und MySQL mit Homebrew installiert haben, sollte dies für Sie funktionieren. Andernfalls müssen Sie nur die entsprechenden Speicherorte für MySQL datadir
auf Ihrem Computer ersetzen .
#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
Wenn Sie dann zurückschalten möchten, tun Sie einfach Folgendes:
mv mysql mysql.remote
mv mysql.local mysql
und Sie verwenden wieder Ihre lokale Datenbank. Hoffentlich hilft das.
Stoppen Sie zuerst mysqld
mysql_install_db --user=mysql \
--basedir=/opt/mysql/mysql \
--datadir=/opt/mysql/mysql/data
Ändern Sie dann das Datadir in Ihrem /etc/mysql/my.cnf
Start mysqld
Hinweise:
# 1: Wahrscheinlich müssen Sie Ihre SELinux-Einstellungen anpassen (bei Problemen mit deaktiviertem SELinux ausprobieren). Möglicherweise ist auch Apparmor (Ubuntu) ein Problem.
# 2: Siehe MySQL Install DB-Referenz
Stoppen Sie zuerst Ihr MySQL
sudo service mysql stop
Kopieren Sie MySQL-Daten an den neuen Speicherort.
sudo cp -rp /var/lib/mysql /yourdirectory/
Wenn Sie Apparmor verwenden, bearbeiten Sie die folgende Datei und gehen Sie wie folgt vor
sudo vim /etc/apparmor.d/usr.sbin.mysqld
Ersetzen Sie wo / var / lib / durch / yourdirectory / und fügen Sie das Folgende hinzu, falls der Datei keine vorhanden ist
/yourdirectory/mysql/ r,
/yourdirectory/mysql/** rwk,
Speichern Sie die Datei mit dem Befehl
:wq
Bearbeiten Sie die Datei my.cnf
sudo vim /etc/mysql/my.cnf
Ersetzen Sie wo / var / lib / durch / yourdirectory / und speichern Sie dann mit dem Befehl
:wq
Starten Sie endlich MySQL
sudo service mysql start
@sehe mehr über raid0, Optimierung ici
Diese Lösung funktioniert in Windows 7 mit Workbench. Dazu benötigen Sie Administratorrechte. Es wird eine Verbindung (wie eine Verknüpfung) zu dem Ort erstellt, an dem Sie Ihre Daten wirklich speichern möchten
Öffnen Sie die Workbench und wählen Sie INSTANZ - Starten / Herunterfahren. Stoppen Sie den Server
Installieren Sie Junction Master von https://bitsum.com/junctionmaster.php
Navigieren Sie zu C: \ ProgramData \ MySQL \ MySQL Server 5.6
Klicken Sie mit der rechten Maustaste auf Daten und wählen Sie "Verschieben und dann Ordner verknüpfen nach ...". Akzeptieren Sie das Warnpunktziel auf "Ihr neues Datenverzeichnis hier ohne Anführungszeichen". Klicken Sie auf Verschieben und verknüpfen
Gehen Sie nun zu "Ihr neues Datenverzeichnis hier ohne Anführungszeichen".
Klicken Sie mit der rechten Maustaste auf Daten. Wechseln Sie zur Registerkarte Sicherheit. Klicken Sie auf Bearbeiten. Klicken Sie auf Typ hinzufügen. NETZWERKSERVICE und dann auf Namen. Klicken Sie auf OK. Klicken Sie auf OK. Aktivieren Sie das Kontrollkästchen Vollzugriff zulassen und dann auf OK
Gehen Sie zurück zur Workbench und starten Sie den Server
Diese Methode funktionierte bei mir mit MySQL Workbench 6.2 unter Windows 7 Enterprise.
Alles wie @ user1341296 sagte, plus ...
Sie sollten sich besser nicht ändern. /etc/mysql/my.cnf
Stattdessen möchten Sie eine neue Datei erstellen /etc/mysql/conf.d/ext.cnf
(ein beliebiger Name, aber die Erweiterung sollte sein cnf
).
Und setzen Sie Ihr Wechselgeld ein:
[mysqld]
datadir=/vagrant/mq/mysql
Auf diese Weise
Ich muss dies oft tun, wenn ich Maschinen aktualisiere und von Box zu Box gehe. Zusätzlich zum Verschieben von / var / lib / mysql an einen besseren Speicherort muss ich häufig alte DB-Tabellen aus einer alten MySQL-Installation wiederherstellen. Um dies zu tun...
Wir mussten MySQL in ein /home
Verzeichnis verschieben, da es von einer anderen physischen CD zugeordnet wurde. Um das Leben zu vereinfachen, haben wir das neue Verzeichnis /home/mysql
anstelle des ursprünglichen Verzeichnisses zugeordnet , anstatt das Verzeichnis in my.cnf zu ändern/var/lib/mysql
. Es funktioniert für uns wie ein Zauber (getestet unter CentOS 7.1).
Erstellen Sie das neue Verzeichnis und legen Sie die richtigen Berechtigungen fest.
mkdir -p /home/mysql
chmod 755 /home/mysql
chown mysql:mysql /home/mysql
Stoppen Sie MySQL, wenn Sie ausgeführt werden.
systemctl stop mysql
Verschieben Sie das Datenverzeichnis.
mv -f /var/lib/mysql/* /home/mysql
Erstellen Sie ein permanentes Mount und führen Sie es aus.
echo "/home/mysql /var/lib/mysql none bind 0 0" >> /etc/fstab
mount -a
Starten Sie den Server neu.
systemctl start mysql
Wenn Sie dies programmgesteuert tun möchten (keine manuelle Texteingabe mit gedit), finden Sie hier eine Version für eine Docker-Datei, die auf der obigen Antwort von user1341296 basiert:
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
Verfügbar im Docker Hub hier: https://hub.docker.com/r/richardjecooke/ruby-mysql-in-memory/
Wenn Sie ein Windows-Benutzer sind und hier gelandet sind, um herauszufinden, dass alle Antworten für Linux-Benutzer sind, werden Sie nicht enttäuscht! Ich werde dich nicht so Zeit verschwenden lassen wie ich.
Ein bisschen Bullshit Talk vor der Lösung:
MySQL verwendet ein Datenverzeichnis, um die Daten verschiedener von Ihnen erstellter Datenbanken zu speichern. Nun, am Ende müssen sie in Form von Dateien mit zusätzlichem Jongleur in der Anwendung und im Dateiformat gespeichert werden, um sicherzustellen, dass die Datenbankversprechen, die Sie in Datenbankklassen gelernt haben, intakt sind.
Jetzt möchten Sie sicherstellen, dass genügend Speicherplatz für große Datenbanken vorhanden ist, die Sie möglicherweise in Zukunft erstellen, und Sie dachten: Hey! Ich möchte es in ein anderes Laufwerk stecken, das mehr Platz hat.
Also machst du folgendes.
Schritt 1 : Beenden des MySQL-Dienstes.
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)
Schritt - 2 : Ermitteln des aktuellen Datenverzeichnisses
Goto C:\ProgramData\MySQL\MySQL Server 8.0
Standardmäßig sollte hier ein Ordner mit dem Namen vorhanden sein Data
. Dieser Ordner wird von MySQL in der Standardeinstellung verwendet (vorausgesetzt, sie haben keinen anderen besseren Speicherort gefunden). Schauen wir uns das jedoch an.
my.ini
Datei suchen , sollte genau dort sein.
Öffnen Sie es in einem Editor (Notepad ++ vielleicht).
Führen Sie STRG + F aus, um dies datadir
in der Datei herauszufinden .
Was hier erwähnt wird, ist der tatsächliche Speicherort, der derzeit von MySQL für das Datenverzeichnis verwendet wird. Das möchten Sie ändern.
Schritt - 3 : Ersetzen Sie es durch ein neues Datenverzeichnis.
Angenommen, Ihr neues Datenverzeichnis soll W: __ MySQL_Data sein. Lassen Sie uns den datadir
Wert in der my.ini
Datei in diesen Wert ändern
. Behalten Sie den vorherigen Wert bei, damit Sie sich nicht daran erinnern müssen.
# Path to the database root
# datadir=C:/ProgramData/MySQL/MySQL Server 8.0/Data
datadir=W:/__MySQL_Data
Verwenden Sie nun, xcopy
um die Standardeinstellung datadir
nach zu kopieren W:\
. Eingabeaufforderung starten (Fenster + R, cmd, Eingabetaste)
>> xcopy "\C:\ProgramData\MySQL\MySQL Server 8.0" "W:\" /E /H /K /O /X
Benennen Sie den kopierten Ordner in den neuen datadir
Wert um, den Sie geändert haben. Hier:W:/__MySQL_Data
Warum nicht einfach kopieren? Nun, weil das nicht COOL! Ist, können Sie die Berechtigungen für den kopierten Ordner nicht verlieren, sodass beim Neustart MySQL80
kein dummer Fehler auftritt: "Der MySQL80-Dienst auf dem lokalen Computer wurde gestartet und dann gestoppt. Einige Dienste werden automatisch gestoppt, wenn Sie werden nicht von anderen Diensten oder Programmen verwendet. " - Mit freundlicher Genehmigung von Microsoft
Schritt - 4 : Starten Sie den Dienst neu
Well, go back to the Services Manager to Start again,
"MySQL80" that you stopped, to restart it again.
Schritt - 5 : Fertig! Jetzt mach dich wieder an die Arbeit !!
Zunächst sollten Sie wissen, wo sich Ihre Konfigurationsdatei befindet. Wo ist deine Konfigurationsdatei?
WENN Sie mit apt-get oder yum install installiert haben。
Konfigurationsdatei kann in erscheinen
/etc/mysql/my.cnf
Datendatei kann in erscheinen
/ var / lib / mysql
und was Sie tun sollten, ist
und dann erledigt.
Aber wenn Sie es nicht mit apt oder yum installiert haben, mag die Direcotry dies möglicherweise nicht und Sie können die MySQL-Dateien mit finden
wo ist mysql
Unter SuSE 13.1 funktioniert dies einwandfrei, um das MySQL-Datenverzeichnis an eine andere Stelle zu verschieben, z. B. nach / home / example_user /, und um ihm einen informativeren Namen zu geben:
In / var / lib /:
# mv -T mysql /home/example_user/mysql_datadir
# ln -s /home/example_user/mysql_datadir ./mysql
Ich habe mysql neu gestartet:
# systemctl restart mysql.service
aber vermute, dass auch das nicht nötig war.
Für eine der Umgebungen habe ich das MySQL-Datenverzeichnis in einen neuen Speicherort geändert, aber beim Neustart des MySQL-Servers hat es einige Zeit gedauert. Also überprüfte ich den Port und stellte fest, dass ein anderer Prozess den MySQL-Port abhörte. Also habe ich den Prozess abgebrochen und den MySQL-Server neu gestartet und es hat gut funktioniert.
Ich habe die folgenden Schritte zum Ändern des Datenverzeichnisses ausgeführt, was hervorragend funktioniert hat. Ändern Sie das MySQL-Datenverzeichnis unter Linux
Die oben genannten Schritte sind grundlegend und grundlegend. Ich folgte ihnen und bekam immer noch die Fehlermeldung "MySQL konnte nicht gestartet werden".
Damit der neue Ordner MySQL-Daten speichern kann, müssen Sie sicherstellen, dass der Ordner über Berechtigungen und Eigentümer verfügt. Mysql: mysql.
Außerdem muss es die Berechtigungen und den Besitz des übergeordneten Verzeichnisses von mysql überprüfen, wenn beispielsweise / data / mysql / vorhanden ist. Hier sollte / data / directory root sein: root. Ich habe den Fehler "mysql konnte nicht gestartet werden" behoben, nachdem ich den Besitz des übergeordneten Verzeichnisses von / mysql geändert habe. Das Betriebssystem in meiner VM ist RHEL 7.6.
Es ist auch möglich, den Datenverzeichnis zu verknüpfen. Zumindest in MacOS, Dev-Umgebung.
(Homebrew) zB
# 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
Starten Sie MySQL neu.
Wenn Sie SE Linux verwenden, setzen Sie es in den zulässigen Modus, indem Sie / etc / selinux / config bearbeiten und SELINUX = erzwingen in SELINUX = zulässig ändern
datadir
Eigenschaft verhindert