È possibile cambiare la mia directory di dati MySQL predefinita in un altro percorso? Sarò in grado di accedere ai database dalla vecchia posizione?
È possibile cambiare la mia directory di dati MySQL predefinita in un altro percorso? Sarò in grado di accedere ai database dalla vecchia posizione?
Risposte:
Interrompere MySQL utilizzando il seguente comando:
sudo /etc/init.d/mysql stop
Copia la directory dei dati esistente (impostazione predefinita in /var/lib/mysql
) utilizzando il seguente comando:
sudo cp -R -p /var/lib/mysql /newpath
modifica il file di configurazione di MySQL con il seguente comando:
sudo gedit /etc/mysql/my.cnf # or perhaps /etc/mysql/mysql.conf.d/mysqld.cnf
Cerca la voce datadir
e modifica il percorso (che dovrebbe essere /var/lib/mysql
) nella nuova directory di dati.
Nel terminale, immettere il comando:
sudo gedit /etc/apparmor.d/usr.sbin.mysqld
Cerca le righe che iniziano con /var/lib/mysql
. Modifica /var/lib/mysql
delle linee con il nuovo percorso.
Salva e chiudi il file.
Riavvia i profili AppArmor con il comando:
sudo /etc/init.d/apparmor reload
Riavvia MySQL con il comando:
sudo /etc/init.d/mysql restart
Ora accedi a MySQL e puoi accedere agli stessi database che avevi prima.
alias /var/lib/mysql/ -> /newpath/,
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/
Modifica il /etc/my.cnf
file e in [mysqld]
aggiungi questa riga:
datadir=/new/dir/for/mysql/
Se stai usando CageFS (con o senza CloudLinux) e vuoi cambiare la directory di MySQL, DEVI aggiungere la nuova directory a questo file:
/etc/cagefs/cagefs.mp
E quindi eseguire questo comando:
cagefsctl --remount-all
dovresti copiare i dati correnti nella nuova directory e cambiare il my.cnf
tuo MySQL.
[mysqld]
datadir=/your/new/dir/
tmpdir=/your/new/temp/
Devi copiare il database quando il server non è in esecuzione .
ln -s
lince simbolica statica non ce la farai?
my.cnf
Per prima cosa dovresti arrestare il server mysql. per esempio
# /etc/init.d/mysql stop
Successivamente è necessario copiare la vecchia directory dei dati (ad es. / Var / lib / mysql) incl. privilegi per la tua nuova directory tramite
# cp -R -p /var/lib/mysql /new/data/dir
ora è possibile modificare /etc/mysql/my.cnf
i dati nuovi e riavviare il server
# /etc/init.d/mysql restart
Se come me sei su debian e vuoi spostare la directory mysql a casa tua o un percorso su / home / ..., la soluzione è:
Un giorno per trovare la soluzione per me sulla documentazione di mariadb. Spero che questo aiuti alcuni ragazzi!
Volevo mantenere un database sul mio computer, ma avere anche dei dati sul mio disco rigido esterno e passare dall'uso dei due.
Se sei su un Mac e hai installato MySQL usando Homebrew, questo dovrebbe funzionare per te. Altrimenti, dovrai solo sostituire le posizioni appropriate per MySQL datadir
sul tuo computer.
#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
Quindi, quando vuoi tornare indietro, fai semplicemente:
mv mysql mysql.remote
mv mysql.local mysql
e stai usando di nuovo il tuo database locale. Spero che aiuti.
Prima di tutto mysqld
mysql_install_db --user=mysql \
--basedir=/opt/mysql/mysql \
--datadir=/opt/mysql/mysql/data
Quindi modificare il datadir in /etc/mysql/my.cnf
Start mysqld
Note:
# 1: probabilmente devi adattare le tue impostazioni SELinux (prova con SELinux disabilitato in caso di problemi), anche Apparmor (Ubuntu) potrebbe essere un problema.
# 2: vedi riferimento DB installazione MySQL
Per prima cosa ferma il tuo mysql
sudo service mysql stop
copia i dati mysql nella nuova posizione.
sudo cp -rp /var/lib/mysql /yourdirectory/
se usi apparmor, modifica il seguente file e procedi come segue
sudo vim /etc/apparmor.d/usr.sbin.mysqld
Sostituisci dove / var / lib / con / yourdirectory / quindi aggiungi il seguente se non esiste nel file
/yourdirectory/mysql/ r,
/yourdirectory/mysql/** rwk,
Salvare il file con il comando
:wq
Modifica il file my.cnf
sudo vim /etc/mysql/my.cnf
Sostituisci dove / var / lib / con / yourdirectory / quindi salva con il comando
:wq
finalmente avviare mysql
sudo service mysql start
@vedi ulteriori informazioni su raid0, ottimizzazione ici
Questa soluzione funziona in Windows 7 utilizzando Workbench. Per farlo, avrai bisogno dei privilegi di amministratore. Crea una giunzione (come una scorciatoia) dove vuoi veramente archiviare i tuoi dati
Apri Workbench e seleziona INSTANCE - Startup / Shutdown Arresta il server
Installa Junction Master da https://bitsum.com/junctionmaster.php
Passare a C: \ ProgramData \ MySQL \ MySQL Server 5.6
Fare clic con il tasto destro su Dati e selezionare "SPOSTA e quindi LINK cartella per ..." Accettare la destinazione del punto di avviso su "La nuova directory di dati qui senza virgolette" Fare clic su SPOSTA E COLLEGAMENTO
Ora vai a "La tua nuova directory di dati qui senza le virgolette"
Fai clic destro su Dati Vai alla scheda sicurezza Fai clic su Modifica Fai clic su Aggiungi tipo SERVIZIO DI RETE quindi Verifica nomi Fai clic su OK Fai clic sulla casella di controllo Consenti controllo completo e poi su OK
Torna a Workbench e avvia il server
Questo metodo ha funzionato per me usando MySQL Workbench 6.2 su Windows 7 Enterprise.
Tutto come diceva @utente1341296, oltre a ...
È meglio non cambiare /etc/mysql/my.cnf
Invece si desidera creare un nuovo file /etc/mysql/conf.d/ext.cnf
(qualsiasi nome, ma l'estensione dovrebbe essere cnf
)
E inserisci il tuo cambiamento:
[mysqld]
datadir=/vagrant/mq/mysql
In questo modo
Nel caso in cui sei un utente Windows e sei arrivato qui per scoprire che tutte le risposte sono per utenti Linux, non rimanere deluso! Non ti lascerò perdere tempo come ho fatto io.
Un po 'di cazzate prima della soluzione:
MySQL utilizza una directory di dati per archiviare i dati di diversi database creati. Bene, alla fine, deve archiviarli sotto forma di file con alcuni giocolieri aggiunti nell'applicazione e nel formato file per garantire che le promesse del database apprese nelle classi Database siano intatte.
Ora vuoi assicurarti che ci sia abbastanza spazio per archiviare grandi database che potresti creare in futuro, e così hai pensato, Ehi! Voglio inserirlo in un'altra unità che ha più spazio.
Quindi fai quanto segue.
Passaggio 1 : arresto del 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)
Passaggio - 2 : scoprire la directory dei dati corrente
Goto C:\ProgramData\MySQL\MySQL Server 8.0
Per impostazione predefinita, dovrebbe esserci una cartella qui denominata Data
, questa è quella utilizzata da MySQL nelle impostazioni predefinite (a condizione che non abbiano trovato un'altra posizione migliore), ma diamo un'occhiata.
Trova il my.ini
file, dovrebbe essere proprio lì.
Aprilo in un editor (forse Notepad ++).
Fai un CTRL + F per scoprirlo datadir
nel file.
Qualunque cosa sia menzionata qui è l'ubicazione attuale attualmente utilizzata da MySQL per la directory dei dati. Questo è ciò che vuoi cambiare.
Passaggio 3 : sostituirlo con una nuova directory di dati.
Supponiamo che tu desideri che la tua nuova directory di dati sia W: __ MySQL_Data. Cambiamo il
datadir
valore nel my.ini
file con questo valore. Mantieni il valore precedente commentato in modo da non doverlo ricordare.
# Path to the database root
# datadir=C:/ProgramData/MySQL/MySQL Server 8.0/Data
datadir=W:/__MySQL_Data
Ora usa xcopy
per copiare il valore predefinito datadir
in W:\
. Avvia il prompt dei comandi (Window + R, cmd, Enter)
>> xcopy "\C:\ProgramData\MySQL\MySQL Server 8.0" "W:\" /E /H /K /O /X
E rinominare la cartella copiata con 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 i permessi sulla cartella copiata, in modo che quando si riavvia MySQL80
, non darà uno stupido errore: "Il servizio MySQL80 sul computer locale si è avviato e poi interrotto. Alcuni servizi si arrestano automaticamente se non sono utilizzati da altri servizi o programmi. " - Cortesia: Microsoft
Passaggio 4 : riavvio del servizio
Well, go back to the Services Manager to Start again,
"MySQL80" that you stopped, to restart it again.
Step - 5 : Fatto! Ora torna al lavoro !!
Ho spesso bisogno di farlo quando aggiorno le macchine, passando da una scatola all'altra. Oltre a spostare / var / lib / mysql in una posizione migliore, ho spesso bisogno di ripristinare vecchie tabelle DB da una vecchia installazione di MySQL. Per fare questo ...
Abbiamo dovuto spostare MySQL nella /home
directory perché era mappato da un altro disco fisico. Al fine di rendere live più semplice, invece di cambiare directory in my.cnf, abbiamo mappato la nuova directory /home/mysql
al posto della directory originale/var/lib/mysql
. Funziona per noi come un incantesimo (testato su CentOS 7.1).
Crea la nuova directory e imposta le autorizzazioni corrette.
mkdir -p /home/mysql
chmod 755 /home/mysql
chown mysql:mysql /home/mysql
Arresta MySQL se in esecuzione.
systemctl stop mysql
Sposta la directory dei dati.
mv -f /var/lib/mysql/* /home/mysql
Crea un mount permanente ed eseguilo.
echo "/home/mysql /var/lib/mysql none bind 0 0" >> /etc/fstab
mount -a
Riavvia il server.
systemctl start mysql
Se vuoi farlo a livello di codice (nessuna immissione manuale del testo con gedit) ecco una versione per un file Docker basato sulla risposta di user1341296 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
Disponibile sull'hub Docker qui: https://hub.docker.com/r/richardjecooke/ruby-mysql-in-memory/
Innanzitutto, dovresti sapere dov'è il tuo file di configurazione? dov'è il tuo file di configurazione?
SE hai installato con apt-get o yum install。
il file di configurazione potrebbe apparire in
/etc/mysql/my.cnf
file di dati potrebbe apparire in
/ Var / lib / mysql
e quello che dovresti fare è
e poi i lavori fatti.
Ma se non lo hai installato con apt o yum, la directory potrebbe non piacerti e puoi trovare i file mysql con
dov'è mysql
In SuSE 13.1, funziona perfettamente per spostare la directory dei dati mysql altrove, ad esempio in / home / esempio_utente /, e per dargli un nome più informativo:
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 sospetto che anche quello non fosse necessario.
Per uno degli ambienti ho cambiato la directory dei dati mysql in una nuova posizione, ma durante il riavvio del server mysql, ci voleva tempo. Quindi ho controllato la porta e ho scoperto che altri processi erano in ascolto sulla porta mysql. Quindi ho interrotto il processo e riavviato il server mysql e ha funzionato bene.
Ho seguito i passaggi seguenti per cambiare la directory dei dati che ha funzionato in modo eccellente. cambia la directory dei dati mysql in Linux
I passaggi precedenti sono di base e di base. Li ho seguiti e ho ancora ricevuto l'errore "Impossibile avviare mysql".
Affinché la nuova cartella memorizzi i dati mysql, è necessario assicurarsi che la cartella disponga delle autorizzazioni e della proprietà mysql: mysql.
Inoltre, deve controllare le autorizzazioni e la proprietà della directory principale di mysql se, ad esempio, avere / data / mysql /. Qui / data / directory dovrebbe essere root: root. Ho risolto l'errore di "mysql impossibile avviare" dopo aver cambiato la proprietà della directory padre di / mysql. Il sistema operativo nella mia macchina virtuale è RHEL 7.6.
È anche possibile collegare in modo simbolico il datadir. Almeno in macOS, ambiente di sviluppo.
(homebrew) ad es
# 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
Riavvia mysql.
Se stai usando SE Linux, impostalo in modalità permissiva modificando / etc / selinux / config e cambiando SELINUX = applicando SELINUX = permissivo
datadir
proprietà