Come modificare i dati di MySQL directory?

È possibile cambiare il mio di default MySQL directory di dati a un altro percorso? Sarò in grado di accedere al database dal vecchio indirizzo?

InformationsquelleAutor MySQL DBA | 2009-11-25

 

19 Replies
  1. 252
    1. Stop MySQL utilizzando il seguente comando:

      sudo /etc/init.d/mysql stop
    2. Copiare la cartella dati esistente (di default situato in /var/lib/mysql) utilizzando il seguente comando:

      sudo cp -R -p /var/lib/mysql /newpath
    3. modificare il file di configurazione di MySQL con il comando seguente:

      sudo gedit /etc/mysql/my.cnf   # or perhaps /etc/mysql/mysql.conf.d/mysqld.cnf
    4. Cercare la voce per datadir, e modificare il percorso (che dovrebbe essere /var/lib/mysql) per la nuova directory di dati.

    5. Nel terminale, digitare il comando:

      sudo gedit /etc/apparmor.d/usr.sbin.mysqld
    6. Cercare le righe che iniziano con /var/lib/mysql. Cambiare /var/lib/mysql nelle linee con il nuovo percorso.

    7. Salvare e chiudere il file.

    8. Riavviare il AppArmor profili con il comando:

      sudo /etc/init.d/apparmor reload
    9. Riavviare MySQL con il comando:

      sudo /etc/init.d/mysql restart
    10. Ora di accesso a MySQL e si può accedere allo stesso database che si aveva prima.

    • Di cui sopra non è riuscito a risolvere il problema per me su Ubuntu 12.04 (Precise). Ho scoperto che uno deve modificare il file /etc/apparmor.d/parametri/alias per includere una linea “alias /var/lib/mysql/ -> /newpath/,” Con questo posto, non ho bisogno di alcuna modifica in qualsiasi altro AppArmor file. Ha funzionato subito dopo il riavvio AppArmor con “/etc/init.d/apparmor restart” e MySQL con “riavviare mysql”.
    • Questo ha funzionato per me con mak commento (Ubuntu 12)
    • Apparmor non è pertinente su CentOS. C’è SELinux, invece. Leggi come disattivare o gestire qui blogs.oracle.com/jsmyth/entry/selinux_and_mysql
    • sul mak s edition (che è necessario) non dimenticate la virgola alla fine della riga alias /var/lib/mysql/ -> /newpath/,
    • Non posso sottolineare abbastanza quanto sia importante Michel commento di cui sopra è: AGGIUNGERE la VIRGOLA FINALE e salvare alcuni neuroni. Mi dispiace per i tappi.
    • Per chi si muove la loro datadir di ZFS su linux (come ho fatto io), assicurati di aggiungere anche: innodb_use_native_aio=0 in [mysqld] sezione del my.cnf di file, dal momento che ZFS su linux non supporta AIO. dev.mysql.com/doc/refman/5.5/en/…
    • Anche seguendo la procedura descritta sopra, l’utente può ancora non in grado di avviare MySQL se si esegue CentOS o RHEL, a causa di SELinux. Se fate “ls -Z”, potrete vedere il contesto di SELinux sono diversi in /var/lib/mysql e /new/datadir. È necessario modificare il contesto di SELinux, tramite “chcon”. Per i dettagli vedi: wiki.centos.org/HowTos/…
    • Ho usato questo su debian 6. AppArmor parte non era necessario, becauce il pacchetto non è stato installato.
    • non menziona l’utente/gruppo di autorizzazioni per la nuova cartella?
    • abbiamo bisogno di cambiare indirizzo di socket anche ?presa=/var/lib/mysql/mysql.calzino. se non, allora perché no ?
    • non è possibile avviare mysql dopo aver fatto questo: serverfault.com/questions/733957/mysql-0-processes-alive/733958
    • stesso problema serverfault.com/questions/503887/…
    • unica soluzione che ha funzionato serverfault.com/a/733998/279553
    • se si segue la risposta, il nuovo mysql percorso ‘/newpath/mysql’, si prega di guardare fuori quando si modifica il file di configurazione.
    • Ho dovuto aggiungere alcune autorizzazioni per la nuova cartella. Altrimenti mysql non si avvia: MySQL Community Server 5.6.30 non è stato avviato. Si prega di controllare i log per ulteriori dettagli. E nel file di log: [Avviso] impossibile creare il file di test /vagabondo/mysql/is1.inferiore-test
    • Ho seguito questa risposta più tempi e diverse altre risposte, semplicemente non funzionerà senza rimuovere completamente ogni traccia di mysql dal sistema e iniziare da zero con un’unità esterna montata in /var/lib/mysql
    • Ho appena esecuzione di un anno e mezzo fa, non ricordo alcun dettaglio più
    • si prega di notare se la tua versione di MySQL è di 5,7 quindi il percorso è qui cambia è il percorso sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
    • Bloccato su “Avvio di MySQL database server mysqld” [fail] messaggio dopo la modifica del database
    • Bloccato su “Avvio di MySQL database server mysqld” [fail] nella riavviare il server dopo aver cambiato il percorso del database per mia (una cartella a casa propria posizione). Tornando a “/var/lib/mysql/”, fa riavviare di nuovo. Qualche suggerimento?
    • Non funziona per me. Ho ottenere un posto di Lavoro per mysql.il servizio non è riuscito. Vedere ‘systemctl status di mysql.il servizio’ e ‘journalctl -xn’ per i dettagli quando si tenta di riavviare mysqld, e l’errore è che il disco è pieno. Ha 500 GB di spazio libero…
    • Se si utilizza un disco esterno NTFS, quindi le autorizzazioni possono non riuscire a copiare con il file. Potrebbe essere necessario seguire queste istruzioni prima di copiare askubuntu.com/questions/11840/…
    • Ha funzionato per me su Ubuntu 18.04 seguenti @mak commento
    • Ho eseguito queste modifiche esatte e ha funzionato, ma il sito carica molto lenta, è super veloce, prima di fare queste modifiche. Che cosa potrebbe causare questo. E il server è un mostro in termini di hardware, quindi non è che.

  2. 14

    è necessario copiare i dati attuali per la nuova directory e cambiare la vostra my.cnf MySQL.

    [mysqld]
    datadir=/your/new/dir/
    tmpdir=/your/new/temp/

    Devi copiare il database quando il server è non è in esecuzione.

    • Beh, questo è quello che non si può fare. Voglio cambiare la directory, ma voglio creare un nuovo database nella nuova directory. E si Desidera accedere a vecchi directory e nuovo database di directory.
    • DBA: se si utilizzano alcuni ln -s statico simbolico lynx non che fare ?
    • Beh, io sono confuso con l’uso di questo comando. Come ho già spiegato prima, voglio creare un nuovo database nella nuova directory. È possibile con il collegamento simbolico.
    • è possibile creare una nuova directory, utilizzare il link simbolico per rendere il file di apparire in il nuovo dir e cambiare la tua my.cnf
    • sì, ma allora in quel caso mysql è di non leggere i link simbolici. Io ho fatto questo ma non riesco a leggere quei link simbolici come database.
    • DBQ: quindi significa che è praticamente impossibile.
    • Mi dispiace RageZ. MySQL è in grado di leggere i link simbolici e può essere utilizzato come un database. Grazie per il vostro aiuto.
    • giù votato perché non funziona come dettagliato al serverfault.com/a/733998/279553

  3. 14

    Prima si dovrebbe interrompere il server mysql. ad esempio,

    # /etc/init.d/mysql stop

    Dopo di che si dovrebbe copiare la vecchia directory di dati (ad esempio, /var/lib/mysql) incl. privilegi per la tua nuova directory di via

    # cp -R -p /var/lib/mysql /new/data/dir

    ora è possibile modificare in /etc/mysql/my.cnf i dati di nuovo e riavviare il server

    # /etc/init.d/mysql restart
  4. 11

    Veloce e facile da fare:

    # 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/

    Modificare il /etc/my.cnf file, e sotto [mysqld] aggiungere questa riga:

    datadir=/new/dir/for/mysql/

    Se si utilizza CageFS (con o senza CloudLinux) e vuoi cambiare MySQL directory, è NECESSARIO aggiungere la nuova directory per il file:

    /etc/cagefs/cagefs.mp

    E quindi eseguire il comando:

    cagefsctl --remount-all
    • Dolce! Funziona come un fascino!
    • Sono contento di sentire 😛
    • Grande grazie, e aggiungere se si desidera completamente questo script come ho fatto io potete usare questo: sed -i ‘s|datadir=/var/lib/mysql|datadir=/data/var/lib/mysql|g’ /etc/my.cnf
  5. 5

    Ho voluto mantenere un database sulla mia macchina, ma anche i dati sul disco rigido esterno, e di passare tramite le due.

    Se siete su un Mac, e installato MySQL tramite Homebrew, questo dovrebbe funzionare per voi. In caso contrario, sarà solo bisogno di sostituire le sedi opportune per MySQL datadir sulla vostra macchina.

    #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

    Poi quando si vuole passare semplicemente fare:

    mv mysql mysql.remote
    
    mv mysql.local mysql

    e si utilizza il database locale di nuovo. Speranza che aiuta.

    • questo non è esattamente affrontare la questione come detto-tuttavia questo era esattamente quello che stavo cercando-e questo è un modo pulito di gestione di un caso limite/bug che mio.cnf non gestisce gli spazi bene: bugs.mysql.com/bug.php?id=26033. Io link a questa soluzione alternativa che bug report.
    • giù votato perché non funziona come dettagliato al serverfault.com/a/733998/279553
  6. 5

    Prima tappa mysqld

    mysql_install_db --user=mysql \
                     --basedir=/opt/mysql/mysql \
                     --datadir=/opt/mysql/mysql/data

    Quindi modificare datadir nel /etc/mysql/my.cnf

    Mysqld Start

    Note:

    #1: probabilmente devi regolare SELinux impostazioni (provare con SELinux disabilitato, in caso di problemi), Apparmor (Ubuntu) può anche essere problema.

    #2: vedere MySQL Installare il DB di Riferimento

  7. 4

    Primo stop mysql

    sudo service mysql stop

    copia di dati di mysql per la nuova posizione.

    sudo cp -rp /var/lib/mysql /yourdirectory/

    se si utilizza apparmor, modificare il seguente file e fare le seguenti

    sudo vim /etc/apparmor.d/usr.sbin.mysqld

    Sostituire dove /var/lib/da /yourdirectory/aggiungere i seguenti se non esiste il file

        /yourdirectory/mysql/ r,
        /yourdirectory/mysql/** rwk,

    Salvare il file con il comando

    :wq

    Modificare il file my.cnf

    sudo vim /etc/mysql/my.cnf

    Sostituire dove /var/lib/da /yourdirectory/quindi salvare con il comando

    :wq

    infine avviare mysql

    sudo service mysql start

    @vedi di più su raid0, ottimizzazione ici

    • giù votato perché non funziona come dettagliato al serverfault.com/a/733998/279553
    • forse questo non funziona per altri tipi di distribuzione, ma se si sta utilizzando ubuntu, questo funziona bene per me e per il cambio di percorso per ogni nuova installazione di ubuntu server per attivare il raid0.
    • So che le persone sono downvoting questo, ma voglio dire che questo aveva salvato la mia giornata. Grazie!
  8. 4

    Se, come me, sono su debian e si desidera spostare il mysql dir a casa vostra o in un percorso di /home/…, la soluzione è :

    • Stop mysql da “sudo service mysql stop”
    • modificare il “datadir” variabile per il nuovo percorso in “/etc/mysql/mariadb.conf.d/50-server.cnf”
    • Fare un backup di /var/lib/mysql : “cp -R -p /var/lib/mysql /path_to_my_backup”
    • eliminare questo dir : “sudo rm -R /var/lib/mysql”
    • Spostare i dati nel nuovo dir : “cp -R -p /path_to_my_backup /path_new_dir
    • Modifica da “sudo chown -R mysql:mysql /path_new_dir”
    • Modificare la variabile “ProtectHome” da “false” a “/etc/systemd/system/mysqld.servizio”
    • Ricaricare systemd da “sudo systemctl daemon-reload”
    • Riavviare mysql tramite “il servizio mysql restart”

    Un giorno di trovare la soluzione per me la mariadb documentazione.
    Spero che questo aiuto di alcuni ragazzi!

    • Il file /etc/systemd/system/mysqld.di servizio non è qui. Qualsiasi idea di dove devo guardare?
    • Per coloro che utilizzano MariaDB il servizio si trova in /lib/systemd/system/[email protected]
  9. 3

    Questa soluzione funziona in Windows 7 utilizzando il Banco di lavoro. Avrete bisogno dei privilegi di Amministratore per fare questo. Crea una giunzione (come scorciatoia) ovunque si vuole veramente per memorizzare i vostri dati

    Open Workbench e selezionare ISTANZA di Avvio /Arresto
    Arrestare il server

    Installare Svincolo di Maestro di https://bitsum.com/junctionmaster.php

    Navigare C:\ProgramData\MySQL\MySQL Server 5.6

    Destra, fare clic su Dati e selezionare “SPOSTA e quindi collegare cartella …”
    Accettare il messaggio di avviso
    Punto di destinazione “nuova directory senza le virgolette”
    Fare clic su SPOSTA E LINK

    Ora vai a “nuova directory senza le virgolette”

    Fare clic destro su Dati
    Vai alla scheda protezione
    Fare Clic Su Modifica
    Fare Clic Su Aggiungi
    Tipo di SERVIZIO di RETE, quindi Controllare i Nomi
    Fare clic su OK
    Fare clic su Consenti Controllo Completo della casella di controllo e quindi su OK

    Tornare al Banco di lavoro e Avviare il server

    Questo metodo ha funzionato per me l’utilizzo di MySQL Workbench 6.2 su Windows 7 Enterprise.

  10. 2

    Tutto come @user1341296 detto, oltre a…

    Che è meglio non cambiare /etc/mysql/my.cnf
    Invece si desidera creare un nuovo file/etc/mysql/conf.d/ext.cnf (qualsiasi nome, ma con estensione dovrebbe essere cnf)

    E mettete il vostro cambiamento:

    [mysqld]
    datadir=/vagrant/mq/mysql

    In questo modo

    • Non è necessario modificare il file esistente (più facile per gli script di automazione)
    • Nessun problema con la versione di MySQL (ed è configs!) aggiornamento.
  11. 1

    Ho spesso bisogno di fare questo quando si esegue l’aggiornamento di macchine, passando da casella a casella. Oltre a spostare la /var/lib/mysql per una posizione migliore, ho spesso la necessità di ripristinare le vecchie tabelle di DB da una vecchia installazione di MySQL. Per fare questo…

    1. Stop mysql. Seguire le istruzioni di cui sopra, è necessario.
    2. Copiare la directory del database — ci sarà uno per ogni tua vecchia installazione del database — per il nuovo DATADIR posizione. Ma omettere “mysql” e “performance_schema” directory.
    3. Autorizzazioni corrette tra copiato directory del database. La proprietà dovrebbe essere mysql:mysql, cartelle dovrebbe essere 700, e i file devono essere 660.
    4. Riavviare mysql. A seconda della vostra installazione, la vecchia versione del file DB dovrebbe essere aggiornato.
    • mi dispiace per il voto, questa soluzione potrebbe essere corretto, non l’ho provato.
  12. 1

    Abbiamo dovuto spostare MySQL nel /home directory perché è stata mappata da un altro disco fisico. Per far vivere più semplice, invece di cambiare la directory nella mia.cnf, abbiamo mappato la nuova directory /home/mysql in luogo dell’originale directory /var/lib/mysql. Funziona per noi come un fascino (testato su CentOS 7.1).

    Creare la nuova directory e impostare le autorizzazioni corrette.

    mkdir -p /home/mysql
    chmod 755 /home/mysql
    chown mysql:mysql /home/mysql

    Stop MySQL, se in esecuzione.

    systemctl stop mysql

    Spostare i dati dir.

    mv -f /var/lib/mysql/* /home/mysql

    Creare un luogo permanente di montaggio e di eseguirlo.

    echo "/home/mysql /var/lib/mysql none    bind   0 0" >> /etc/fstab
    mount -a

    Riavviare il server.

    systemctl start mysql
  13. 1

    Se vuoi farlo a livello di programmazione (no manuale di immissione del testo con gedit) qui c’è una versione per un Dockerfile base user1341296 la risposta di sopra:

    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

    Disponibili su Mobile hub qui: https://hub.docker.com/r/richardjecooke/ruby-mysql-in-memory/

  14. 1

    Nel caso In cui sei un utente di Windows, e sbarcati qui per scoprire che tutte le risposte sono per gli Utenti Linux, non scoraggiatevi! Non voglio farvi perdere tempo il modo in cui l’ho fatto.

    Un po ‘ di stronzate parlare prima soluzione:

    MySQL utilizza una directory di Dati per memorizzare i dati del database diversi, si crea. Beh, alla fine, ha riporli in forma di file con qualche aggiunta di jugglery nell’applicazione e il formato del file per verificare che il Database promesse che hai imparato nel Database classi sono intatti.

    Ora si desidera assicurarsi che non vi è spazio sufficiente per memorizzare il database di grandi dimensioni che si potrebbe creare in futuro, e così si pensava, Ehi! Voglio metterlo in un’altra auto che ha avuto più spazio.

    Quindi effettuare le seguenti operazioni.

    Passo – 1 : Fermare il servizio 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)

    Passo – 2 : Trovare i Dati attuali directory

     Goto C:\ProgramData\MySQL\MySQL Server 8.0

    Per impostazione predefinita, ci dovrebbe essere una cartella di nome Data, questo è quello che è
    usato da MySQL in impostazione di default (a condizione che essi non hanno trovato un’altra posizione migliore), ma cerchiamo di verificare che fuori.

    Trovare my.ini file, dovrebbe essere proprio lì.

    Aprirlo con un editor di testo (Notepad++ forse).

    Fare un CTRL+F per trovare datadir nel file.

    Tutto ciò che è menzionato qui è la
    percorso effettivo attualmente in uso da parte di MySQL per la directory dei dati. Questo è ciò che si desidera modificare.

    Passo – 3 : la sua Sostituzione con una nuova directory di dati.

    Diciamo che si desidera che il nuovo dati della directory da W:__MySQL_Dati. Proviamo a cambiare
    datadir valore in my.ini file di questo valore. Mantenere il valore precedente, ha commentato in modo che non ricordo.

     # Path to the database root
     # datadir=C:/ProgramData/MySQL/MySQL Server 8.0/Data
       datadir=W:/__MySQL_Data

    Ora uso xcopy di copia predefinito datadir per W:\. Avviare il prompt dei comandi (Finestra + R, cmd Invio)

     >> xcopy "\C:\ProgramData\MySQL\MySQL Server 8.0" "W:\" /E /H /K /O /X

    E rinominare la copia della cartella per il nuovo datadir valore che è stato modificato. Qui: W:/__MySQL_Data

    Perché non semplicemente copiare? Bene, perché non è COOL! questo ti aiuta a non perdere le autorizzazioni sulla cartella copiata, in modo che quando si riavvia MySQL80, non dare un stupido errore: “Il MySQL80 servizio sul Computer Locale avviato e poi interrotto. Alcuni servizi di interrompere automaticamente se non sono in uso da altri programmi o servizi.” – Per Gentile Concessione Di:Microsoft

    Passo – 4 : Riavviare il servizio

     Well, go back to the Services Manager to Start again, 
     "MySQL80" that you stopped, to restart it again.

    Passo – 5 : Fatto! Ora torna a lavorare !!

    • Grazie è stato molto utile, ma attenzione: il mio.ini non è modificabile da utente normale a meno che non si desidera modificare le autorizzazioni. Oh, e dati applicazioni è una cartella nascosta quindi devi cambiare la cartella Explorer impostazioni per vedere.
  15. 0

    Primo luogo , si dovrebbe sapere dove si trova il file di config ? dove è il file di config ?

    SE installato con apt-get o yum install 。

    file di configurazione può essere visualizzato in

    /etc/mysql/my.cnf

    file di dati può essere visualizzato in

    /var/lib/mysql

    e cosa si dovrebbe fare è

    1. stop mysql
    2. modificare i dati mysql di nuovo dirctory
    3. modificare il file di configurazione
    4. ricaricare il file di configurazione
    5. riavviare mysql

    e quindi posti di lavoro fatto.

    Ma se non si è installato con apt o yum,la direcotry non può, come questo
    e si può trovare il file mysql con

    whereis mysql

  16. 0

    Sotto SuSE 13.1, questo funziona bene per spostare i dati mysql directory altrove, ad esempio in /home/example_user/, e per dare un più informativo nome:

    In /var/lib/:

    # mv -T mysql /home/example_user/mysql_datadir
    # ln -s /home/example_user/mysql_datadir ./mysql

    Ho riavviato mysql:

    # systemctl restart mysql.service

    ma il sospetto che anche quello non era necessario.

  17. 0

    Per uno dell’ambiente, ho cambiato di dati di mysql directory in una nuova posizione, ma durante il riavvio del server mysql, che stava prendendo tempo. Così ho controllato la porta e trovato che altro processo è in ascolto sulla porta di mysql. Così ho ucciso il processo e riavviare il server mysql e ha funzionato bene.

    Ho seguito la procedura riportata di seguito per modificare i dati della directory che ha lavorato eccellente.
    modifica di dati di mysql directory in Linux

    • Benvenuti a Stack Overflow! Mentre questo può teoricamente rispondere alla domanda, sarebbe preferibile per includere le parti essenziali di qui la risposta, e fornire il link di riferimento.
  18. 0

    I passaggi di cui sopra sono di fondazione e di base. Io li segue ancora un errore del tipo “mysql failed to start”.

    Per la nuova cartella per l’archiviazione di dati di mysql, è necessario assicurarsi che
    la cartella ha i permessi e le proprietà mysql:mysql.

    Accanto a questo, è necessario controllare i permessi della directory principale di mysql, se con /dati/mysql/. Qui /dati/directory dovrebbe essere root:root. Ho risolto l’errore di “mysql failed to start” dopo il cambio di proprietà di un genitore directory di /mysql.
    Il sistema operativo nel mio VM è RHEL 7.6.

    • Ho cercato di selinux in RHEL7.6 cambiando SELINUX=applicazione a SELINUX=permissive, non ha funzionato per me.
  19. -1

    Se si utilizza SE linux, impostarlo in modalità permissiva modificando il file /etc/selinux/config
    e la modifica
    SELINUX=applicazione a SELINUX=permissive

Lascia un commento