Kann ich mein Standard-MySQL-Datenverzeichnis in einen anderen Pfad ändern? Kann ich vom alten Standort aus auf die Datenbanken zugreifen?
Stoppen Sie MySQL mit dem folgenden Befehl:
Sudo /etc/init.d/mysql stop
Kopieren Sie das vorhandene Datenverzeichnis (standardmäßig 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 /var/lib/mysql
sein sollte) in das neue Datenverzeichnis.
Geben Sie im Terminal den Befehl ein:
Sudo gedit /etc/apparmor.d/usr.sbin.mysqld
Suchen Sie nach Zeilen, die mit /var/lib/mysql
beginnen. Ändern Sie /var/lib/mysql
in den Zeilen mit dem neuen Pfad.
Speichern und schließen Sie die Datei.
Starten Sie die AppArmor-Profile mit dem Befehl neu:
Sudo /etc/init.d/apparmor reload
Starten Sie MySQL mit dem 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 verwendet haben.
Zuerst sollten Sie den MySQL-Server stoppen. z.B.
# /etc/init.d/mysql stop
Danach sollten Sie das alte Datenverzeichnis (z. B./var/lib/mysql) kopieren. Privilegien für Ihr neues Verzeichnis über
# cp -R -p /var/lib/mysql /new/data/dir
jetzt können Sie in /etc/mysql/my.cnf
die Daten neu ändern und den Server neu starten
# /etc/init.d/mysql restart
sie müssten die aktuellen Daten in das neue Verzeichnis kopieren und Ihren 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 .
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 fügen Sie unter [mysqld]
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 dieser Datei hinzufügen:
/etc/cagefs/cagefs.mp
Führen Sie dann diesen Befehl aus:
cagefsctl --remount-all
Stoppen Sie zuerst mysqld
mysql_install_db --user=mysql \
--basedir=/opt/mysql/mysql \
--datadir=/opt/mysql/mysql/data
Dann ändere das Datum in deinem /etc/mysql/my.cnf
Starten Sie mysqld
Anmerkungen:
# 1: Wahrscheinlich müssen Sie Ihre SELinux-Einstellungen anpassen (versuchen Sie es mit SELinux, wenn Sie Probleme haben). Apparmor (Ubuntu) kann ebenfalls ein Problem sein.
# 2: siehe MySQL Install DB Reference
Ich wollte eine Datenbank auf meinem Computer behalten, aber auch Daten auf meiner externen Festplatte haben und zwischen den beiden wechseln.
Wenn Sie sich auf einem Mac befinden 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
Dann bis wann Sie zurückschalten möchten, machen Sie einfach:
mv mysql mysql.remote
mv mysql.local mysql
und Sie verwenden wieder Ihre lokale Datenbank. Hoffentlich hilft das.
Stoppen Sie zuerst Ihr MySQL
Sudo service mysql stop
kopieren Sie die MySQL-Daten an den neuen Ort.
Sudo cp -rp /var/lib/mysql /yourdirectory/
wenn Sie Apparmor verwenden, bearbeiten Sie die folgende Datei und führen Sie die folgenden Schritte aus
Sudo vim /etc/apparmor.d/usr.sbin.mysqld
Ersetzen Sie wo/var/lib/durch/IhrVerzeichnis /, und fügen Sie dann das Folgende hinzu, wenn die Datei nicht 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 erstellt eine Kreuzung (wie eine Verknüpfung) zu der Stelle, an der Sie Ihre Daten wirklich speichern möchten
Öffnen Sie die Workbench und wählen Sie INSTANCE - Startup/Shutdown 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 "MOVE und dann LINK-Ordner nach ..." Akzeptieren Sie die Warnung Richten Sie das Ziel auf "Ihr neues Datenverzeichnis ohne Anführungszeichen" Klicken Sie auf MOVE AND LINK
Gehen Sie jetzt 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 Hinzufügen Geben Sie NETWORK SERVICE ein, und klicken Sie auf Namen überprüfen Klicken Sie auf OK Klicken Sie auf das Kontrollkästchen Allow Full Control und dann auf OK
Gehen Sie zurück zur Workbench und starten Sie den Server
Diese Methode funktionierte für mich mit MySQL Workbench 6.2 unter Windows 7 Enterprise.
Wenn Sie wie ich auf debian sind und das mysql-Verzeichnis zu Ihnen nach Hause oder einen Pfad unter/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!
Alles wie @ user1341296 gesagt, plus ...
Es ist besser, /etc/mysql/my.cnf
.__ nicht zu ändern. Stattdessen möchten Sie eine neue Datei/etc/mysql/conf.d/ext.cnf
erstellen (jeder Name, aber die Erweiterung sollte cnf
sein)
Und füge deine Änderung hinzu:
[mysqld]
datadir=/vagrant/mq/mysql
Auf diese Weise
Falls 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 nicht zulassen, dass Sie so viel Zeit verschwenden wie ich.
Ein bisschen Scheiße vor der Lösung:
MySQL verwendet ein Datenverzeichnis, um die Daten verschiedener Datenbanken, die Sie erstellen, zu speichern. Nun, am Ende muss es in Form von Dateien mit etwas hinzugefügtem Jugglery in der Anwendung und im Dateiformat gespeichert werden, um sicherzustellen, dass die Datenbank-Versprechen, die Sie in den Datenbankklassen gelernt haben, intakt sind.
Jetzt möchten Sie sicherstellen, dass genügend Speicherplatz vorhanden ist, um große Datenbanken zu speichern, die Sie in der Zukunft erstellen könnten. Sie dachten also: Hey! Ich möchte es in ein anderes Laufwerk legen, das mehr Platz hat.
Also machst du folgendes.
Schritt - 1 : Stoppen 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 Data
vorhanden sein. Dies ist der Ordner mit der Bezeichnung wird von MySQL in der Standardeinstellung verwendet (vorausgesetzt, sie haben keinen anderen besseren Ort gefunden), aber lassen Sie uns das herausfinden.
Find my.ini
-Datei, sollte genau dort sein.
Öffnen Sie es in einem Editor (Notepad ++ vielleicht).
Führen Sie STRG + F aus, um datadir
in der Datei herauszufinden.
Was hier erwähnt wird, ist der Der aktuelle Speicherort, den MySQL derzeit für das Datenverzeichnis verwendet. Das möchten Sie ändern.
Schritt - 3 : Ersetzen Sie es durch ein neues Datenverzeichnis.
Angenommen, Sie möchten, dass Ihr neues Datenverzeichnis W: __ MySQL_Data ist. Ändern wir datadir
Wert in my.ini
Datei auf diesen Wert. Behalten Sie den vorherigen Wert im Kommentar, 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
in W:\
zu kopieren. Eingabeaufforderung starten (Window + R, cmd, Enter)
>> 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! Dies hilft Ihnen, die Berechtigungen für den kopierten Ordner nicht zu verlieren, so dass beim Neustart von MySQL80
kein blöder Fehler ausgegeben wird: "Der MySQL80-Dienst auf dem lokalen Computer wurde gestartet und dann gestoppt. Einige Dienste werden automatisch angehalten wenn sie nicht von anderen Diensten oder Programmen genutzt werden. " - Mit freundlicher Genehmigung: Microsoft
Schritt - 4 : Dienst neu starten
Well, go back to the Services Manager to Start again,
"MySQL80" that you stopped, to restart it again.
Schritt - 5 : Fertig! Jetzt wieder an die Arbeit !!
Ich muss dies oft tun, wenn Sie ein Upgrade von Maschinen durchführen und von Box zu Box wechseln. Neben dem 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...
Wenn Sie dies programmgesteuert ausführen 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 [email protected]
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 auf Docker Hub hier: https://hub.docker.com/r/richardjecooke/Ruby-mysql-in-memory/
Wir mussten MySQL in das /home
-Verzeichnis verschieben, da es von einem anderen physischen Datenträger zugeordnet wurde. Um das Leben einfacher zu machen, anstatt das Verzeichnis in my.cnf zu ändern, haben wir das neue Verzeichnis /home/mysql
anstelle des ursprünglichen Verzeichnisses /var/lib/mysql
zugeordnet. Es funktioniert für uns wie ein Zauber (getestet mit 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
Die obigen 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 Berechtigungen und Eigentümer von MySQL hat: MySQL.
Außerdem müssen die Berechtigungen und der Besitz des übergeordneten Verzeichnisses von MySQL überprüft werden, wenn Sie beispielsweise/data/mysql/haben. Hier sollte das Verzeichnis/data/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 meinem VM ist RHEL 7.6.
Für eine der Umgebungen habe ich das mysql-Datenverzeichnis in einen neuen Speicherort geändert, aber während des Neustarts des mysql-Servers dauerte es Zeit. Also überprüfte ich den Port und stellte fest, dass der andere Prozess den Mysql-Port abhörte. Also habe ich den Prozess beendet und den Mysql-Server neu gestartet, und er hat gut funktioniert.
Ich habe die folgenden Schritte befolgt, um das Datenverzeichnis zu ändern, das hervorragend funktioniert hat . das Mysql-Datenverzeichnis in Linux ändern
Unter SuSE 13.1 funktioniert dies gut, um das mysql-Datenverzeichnis an eine andere Stelle zu verschieben, z. an/home/example_user/und geben Sie ihm einen aussagekräftigeren Namen:
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.
Zuerst sollten Sie wissen, wo sich Ihre Konfigurationsdatei befindet. wo ist deine config datei?
WENN Sie mit apt-get oder yum install installiert wurden。
konfigurationsdatei erscheint möglicherweise in
/etc/mysql/my.cnf
datendatei kann in erscheinen
/ var/lib/mysql
und was Sie tun sollten, ist
und dann erledigt.
Wenn Sie es jedoch nicht mit apt oder yum installiert haben, mag das Verzeichnis möglicherweise nicht diese Sein, und Sie können die MySQL-Dateien mit finden
whereis MySQL