it-swarm.com.de

Wie ändert man das MySQL-Datenverzeichnis?

Kann ich mein Standard-MySQL-Datenverzeichnis in einen anderen Pfad ändern? Kann ich vom alten Standort aus auf die Datenbanken zugreifen?

136
MySQL DBA
  1. Stoppen Sie MySQL mit dem folgenden Befehl:

    Sudo /etc/init.d/mysql stop
    
  2. Kopieren Sie das vorhandene Datenverzeichnis (standardmäßig in /var/lib/mysql) mit dem folgenden Befehl:

    Sudo cp -R -p /var/lib/mysql /newpath
    
  3. bearbeiten Sie die MySQL-Konfigurationsdatei mit dem folgenden Befehl:

    Sudo gedit /etc/mysql/my.cnf   # or perhaps /etc/mysql/mysql.conf.d/mysqld.cnf
    
  4. Suchen Sie nach dem Eintrag für datadir und ändern Sie den Pfad (der /var/lib/mysql sein sollte) in das neue Datenverzeichnis.

  5. Geben Sie im Terminal den Befehl ein:

    Sudo gedit /etc/apparmor.d/usr.sbin.mysqld
    
  6. Suchen Sie nach Zeilen, die mit /var/lib/mysql beginnen. Ändern Sie /var/lib/mysql in den Zeilen mit dem neuen Pfad.

  7. Speichern und schließen Sie die Datei.

  8. Starten Sie die AppArmor-Profile mit dem Befehl neu:

    Sudo /etc/init.d/apparmor reload
    
  9. Starten Sie MySQL mit dem Befehl neu:

    Sudo /etc/init.d/mysql restart
    
  10. Melden Sie sich jetzt bei MySQL an, und Sie können auf dieselben Datenbanken zugreifen, die Sie zuvor verwendet haben.

244
user1341296

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
13
H6.

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 .

12
RageZ

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
7
sMyles

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

5
Murlo

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.

5
wfbarksdale

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

4
naddame

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.

3
Rob

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:

  • Stoppen Sie mysql durch "Sudo-Dienst mysql stop"
  • Ändern Sie die Variable "datadir" in den neuen Pfad in "/etc/mysql/mariadb.conf.d/50-server.cnf".
  • Erstellen Sie eine Sicherungskopie von/var/lib/mysql: "cp -R -p/var/lib/mysql/path_to_my_backup"
  • lösche dieses Verzeichnis: "Sudo rm -R/var/lib/mysql"
  • Verschieben Sie die Daten in das neue Verzeichnis: "cp -R -p/path_to_my_backup/path_new_dir
  • Zugriff ändern über "Sudo chown -R mysql: mysql/path_new_dir"
  • Ändern Sie die Variable "ProtectHome" um "false" für "/etc/systemd/system/mysqld.service".
  • Systemd neu laden durch "Sudo systemctl daemon-reload"
  • Starten Sie mysql mit "service mysql restart" neu.

Eines Tages, um die Lösung für mich in der Mariadb-Dokumentation zu finden. Hoffe das hilft einigen Jungs!

2
jojo150393

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 

  • Sie müssen die vorhandene Datei nicht ändern (einfacher für Automatisierungsskripts).
  • Keine Probleme mit der MySQL-Version (und den Configs!).
2
Pavel

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 !! 

1
Prem KTiw

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...

  1. Stoppen Sie Mysql. Befolgen Sie die Anweisungen oben.
  2. Kopieren Sie die Datenbankverzeichnisse - es gibt für jede Datenbank Ihrer alten Installation ein Verzeichnis - an den neuen DATADIR-Speicherort. Lassen Sie jedoch die Verzeichnisse "mysql" und "performance_schema" aus.
  3. Korrigieren Sie die Berechtigungen für die kopierten Datenbankverzeichnisse. Eigentümer sollte mysql: mysql sein, Verzeichnisse sollten 700 sein und Dateien sollten 660 sein.
  4. Starten Sie Mysql neu. Abhängig von Ihrer Installation sollten ältere DB-Dateien aktualisiert werden.
1
K Markey

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/

1
Richard

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
1
TomS

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.

0

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

0
santosh tiwary

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.

0
user3346151

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

  1. stoppen Sie MySQL
  2. Ändern Sie die MySQL-Daten in ein neues Verzeichnis
  3. Ändern Sie die Konfigurationsdatei 
  4. laden Sie die Konfigurationsdatei neu
  5. starten Sie MySQL neu 

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

0
42wolf