Mysql Esporta la configurazione corrente in un file


11

Abbiamo perso il nostro file my.cnf e ci chiedevamo se esiste un modo per esportare una copia dall'istanza mysql attualmente in esecuzione.

Grazie!

Risposte:


16

Tre (3) opzioni

OPZIONE 1: dall'interno del client mysql

mysql -uroot -A -e"SHOW GLOBAL VARIABLES;" > MySQLCurrentSettings.txt

Ciò acquisirà tutte le opzioni nel file di testo.

OPZIONE 2: dalla riga di comando di Linux

ps -ef | grep mysqld | grep -v grep

Questo mostrerà le opzioni che mysqld è iniziata come impostato da mysqld_safe

OPZIONE 3: chiedere direttamente al server

mysqld --help --verbose

Nella parte inferiore del display 'mysqld --help --verbose', vedrai le impostazioni correnti mysqld caricate da my.cnf o predefinite su.


-1 Mi dispiace, ma questo non ha senso. Perché stai scaricando SHOW VARIABLES su un file di testo, quindi greping la process list e non fai nulla con i suoi risultati, quindi dici di leggere il flag di aiuto su mysqld?
Coops il

@Coops - Sono tre cose separate. Il primo acquisisce SHOW VARIABLES in un file di testo. Il secondo consente di vedere quali opzioni sono specificate da /etc/init.d/mysql all'avvio di mysql. Il terzo consente di vedere nella metà inferiore del display con cosa sta funzionando mysqld. Spetta a samspot fare il lavoro di gamba per impostare quelle opzioni in /etc/my.cnf da questi display. Avrei dovuto scrivere qualcosa per automatizzare e rigenerare /etc/my.cnf?
RolandoMySQLDBA,

La tua linea di partenza è "fai tutto quanto segue" suggerendo di fornire una guida passo-passo per ottenere una risposta alla domanda. Inoltre, non spieghi cosa fa ogni passaggio o come risponde alla domanda, aggiungendo confusione! :-)
Coops

Ci scusiamo per la confusione causata dal modo in cui ho scritto la mia risposta in origine.
RolandoMySQLDBA,

Anche se rigenerare my.cnf sarebbe il caso migliore (avevo sperato che mysql potesse farlo), questa è davvero un'ottima informazione per noi da recuperare. Avevo provato a cercare su google queste informazioni ma tutto quello che riuscivo a trovare erano articoli sul backup del database. Grazie!
samspot

3

Queste istruzioni sono per lo stock mariadb su centos 7.1.

Ecco come eseguire il backup o replicare le impostazioni correnti di una macchina su una nuova installazione, presente o futura.

Sulla macchina da cui vogliamo copiare le impostazioni, possiamo eseguire:

/usr/libexec/mysqld --help --verbose > mysql_current_settings.txt

Su un altro computer, possiamo installare mariadb-server ed eseguire:

/usr/libexec/mysqld --help --verbose > mysql_default_settings.txt

Quindi inseriamo entrambi i file in una directory, che in questo esempio è "/ a /".

Quindi corriamo:

comm -3 <(sort /a/mysql_current_settings.txt) <(sort /a/mysql_default_settings.txt)

Se non viene generato alcun output, i due file sono identici. Ciò significa che tutte le impostazioni, su entrambe le macchine, sono predefinite.

Se c'è qualche output, allora alcune righe non saranno rientrate, mentre alcune righe saranno rientrate.

Le righe non rientrate sono presenti solo nel primo file, che qui è /a/mysql_current_settings.txt.

Le righe di rientro sono presenti solo nel secondo file, che qui è /a/mysql_default_settings.txt.

Ora conosciamo tutte le impostazioni, ad eccezione di alcune impostazioni impostate nella riga di comando che ha avviato mysqld. Queste impostazioni possono provenire dai file /etc/my.cnf o /etc/my.cnf.d/*, da uno script personalizzato o da un alias, ecc. In ogni caso, possiamo vederli con il seguente comando:

ps -ef | grep mysqld

Ora conosciamo le pochissime impostazioni che dobbiamo modificare in una nuova installazione per configurarla come quella precedente.


Ecco alcuni altri dettagli.

Su centos 7.1, il seguente comando mostra tutte le impostazioni correnti, ad eccezione di alcune impostazioni che sono state impostate nella riga di comando che ha avviato mysqld:

/usr/libexec/mysqld --help --verbose

In totale, mostra:

nella prima parte, le impostazioni che possiamo usare come primo parametro dopo "mysqld" quando lo avviamo;

nella seconda parte, le impostazioni vengono impostate al momento della compilazione;

nella terza parte, le impostazioni correnti.

Anche se l'ultima riga del suo output dice: per vedere quali valori sta usando un server MySQL in esecuzione, digitare:

    mysqladmin variables -uroot -p

quel comando non mostra, fe, bind-address, anche se lo cambiamo in /etc/my.cnf e riavviamo mysql.

Inoltre, il seguente comando mostra molte impostazioni ma non "bind-address":

mysql -uroot -p -e"SHOW VARIABLES;"

Si noti che, su centos 7.1, mysqld non è in $ PATH.


2

Ecco il mio modo preferito per generare un my.cnf corrente:

{ echo -e "# MYSQL VARIABLES {{{1\n##\n# MYSQL `mysql -V|sed 's,^.*\(V.*\)\, for.*,\1,'` - By: `logname`@`hostname -f` on `date +%c`\n##"; for l in {a..z}; do echo '#'; mysql -NBe "SHOW GLOBAL VARIABLES LIKE '${l}%'" | sed 's,\t,^= ,' | column -ts^ | tr "\n" '@' | eval $(echo "sed '" "s,@\("{a..u}{a..z}"\),\n\n\1,;" "'") | eval $(echo "sed '" "s,@\(innodb_"{a..z}{a..z}"\),\n\n\1,;" "'") | tr '@' "\n" | sed 's,^,# ,g'; done; echo -e "#\n##\n# MYSQL VARIABLES }}}1"; } | tee ~/mysql-variables.log

Tuttavia, questo non funziona in modo affidabile per Mac OS X.

Questo produrrà un registro delle variabili pulito, commentato, pronto per l'importazione in my.cnf.

Fonte originale: http://www.askapache.com/mysql/view-mysql-variables-my-cnf.html


Alcune note: 1. È necessario installare bsdmainutils 2. Avvertenza: scrive la versione del client mysql, non del server
gadelat,

Per la versione del server il comando è mysqld -V|sed 's,^.*\(V.*\)\ for.*,\1,'. Non sono sicuro che sia importante poiché penso che sia il client che il server siano installati insieme. Qual è lo scopo di {{{1e 1}}}?
beppe9000,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.