MySQL Exportiert die aktuelle Konfiguration in eine Datei

11

Wir haben unsere Datei my.cnf verloren und uns gefragt, ob es eine Möglichkeit gibt, eine Kopie aus der aktuell ausgeführten MySQL-Instanz zu exportieren.

Vielen Dank!

Samspot
quelle

Antworten:

16

Drei (3) Optionen

OPTION 1: Innerhalb des MySQL-Clients

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

Dadurch werden alle Optionen in der Textdatei erfasst.

OPTION 2: Über die Linux-Befehlszeile

ps -ef | grep mysqld | grep -v grep

Dies zeigt Optionen an, mit denen mysqld gestartet wurde, wie von mysqld_safe festgelegt

OPTION 3: Fragen Sie den Server direkt

mysqld --help --verbose

Am unteren Rand der Anzeige 'mysqld --help --verbose' sehen Sie die aktuellen Einstellungen, die mysqld aus my.cnf geladen oder standardmäßig auf geladen hat.

RolandoMySQLDBA
quelle
-1 Entschuldigung, aber das macht keinen Sinn. Warum speichern Sie SHOW VARIABLES in einer Textdatei, durchsuchen dann die Prozessliste, tun nichts mit den Ergebnissen und sagen dann, lesen Sie das Hilfe-Flag für mysqld?
Coops
@Coops - Das sind drei verschiedene Dinge. Der erste erfasst die SHOW VARIABLES in einer Textdatei. Mit der zweiten Option können Sie sehen, welche Optionen beim Start von mysql durch /etc/init.d/mysql angegeben werden. Mit der dritten können Sie in der unteren Hälfte des Displays sehen, mit was mysqld gerade arbeitet. Es liegt an Samspot, diese Optionen in /etc/my.cnf über diese Anzeigen festzulegen. Sollte ich etwas geschrieben haben, um /etc/my.cnf zu automatisieren und neu zu generieren?
RolandoMySQLDBA
Ihre erste Zeile lautet "Alle folgenden Schritte ausführen" und schlägt vor, dass Sie eine schrittweise Anleitung bereitstellen, um eine Antwort auf die Frage zu erhalten. Sie erklären auch nicht, was jeder Schritt tut oder wie er die Frage beantwortet, was zur Verwirrung beiträgt! :-)
Coops
Entschuldigen Sie die Verwirrung, die durch die Art und Weise verursacht wurde, wie ich meine Antwort ursprünglich geschrieben habe.
RolandoMySQLDBA
Obwohl die Regeneration von my.cnf der beste Fall wäre (ich hatte gehofft, dass MySQL dies tun könnte), sind dies wirklich großartige Informationen, die wir wiederherstellen können. Ich hatte versucht, nach diesen Informationen zu googeln, aber alles, was ich finden konnte, waren Artikel über das Sichern der Datenbank. Vielen Dank!
Samspot
3

Diese Anleitung gilt für die Aktie Mariadb auf Centos 7.1.

Im Folgenden wird beschrieben, wie Sie die aktuellen Einstellungen eines Computers in einer aktuellen oder zukünftigen Neuinstallation sichern oder replizieren.

Auf dem Computer, von dem wir die Einstellungen kopieren möchten, können wir Folgendes ausführen:

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

Auf einem anderen Computer können wir den Mariadb-Server installieren und ausführen:

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

Dann legen wir beide Dateien in einem Verzeichnis ab, das in diesem Beispiel "/ a /" ist.

Dann rennen wir:

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

Wenn keine Ausgabe erfolgt, sind die beiden Dateien identisch. Dies bedeutet, dass alle Einstellungen auf beiden Computern auf ihrer Standardeinstellung sind.

Wenn eine Ausgabe erfolgt, werden einige Zeilen nicht eingerückt, während einige Zeilen eingerückt werden.

Die nicht eingerückten Zeilen sind nur in der ersten Datei vorhanden, die hier /a/mysql_current_settings.txt lautet.

Die Einrückungszeilen sind nur in der zweiten Datei vorhanden, die hier /a/mysql_default_settings.txt lautet.

Jetzt kennen wir alle Einstellungen, mit Ausnahme einiger Einstellungen, die in der Befehlszeile festgelegt wurden, mit der mysqld gestartet wurde. Diese Einstellungen können aus Dateien /etc/my.cnf oder /etc/my.cnf.d/* oder einem benutzerdefinierten Skript oder einem Alias ​​usw. stammen. In jedem Fall können wir sie mit dem folgenden Befehl anzeigen:

ps -ef | grep mysqld

Jetzt kennen wir die wenigen Einstellungen, die wir bei einer neuen Installation ändern müssen, um sie als die alte zu konfigurieren.


Hier folgen einige weitere Details.

Unter centos 7.1 zeigt der folgende Befehl alle aktuellen Einstellungen an, mit Ausnahme einiger Einstellungen, die in der Befehlszeile festgelegt wurden, mit der mysqld gestartet wurde:

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

Insgesamt zeigt es:

im ersten Teil die Einstellungen, die wir als ersten Parameter nach "mysqld" verwenden können, wenn wir es starten;

im zweiten Teil die zur Kompilierungszeit festgelegten Einstellungen;

im dritten teil die aktuellen einstellungen.

Auch wenn in der letzten Zeile der Ausgabe Folgendes angegeben ist: Geben Sie Folgendes ein, um zu sehen, welche Werte ein laufender MySQL-Server verwendet:

    mysqladmin variables -uroot -p

Dieser Befehl zeigt nicht an, zB Bindungsadresse, selbst wenn wir ihn in /etc/my.cnf ändern und mysql neu starten.

Auch der folgende Befehl zeigt viele Einstellungen, aber nicht "Bindungsadresse":

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

Beachten Sie, dass mysqld unter centos 7.1 nicht in $ PATH enthalten ist.

Salvador
quelle
2

Hier ist meine Lieblingsmethode, um eine aktuelle my.cnf zu generieren:

{ 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

Dies funktioniert jedoch unter Mac OS X nicht zuverlässig.

Dadurch wird ein sauberes Variablenprotokoll ausgegeben, das auskommentiert und zum Import in Ihre my.cnf bereit ist.

Ursprüngliche Quelle: http://www.askapache.com/mysql/view-mysql-variables-my-cnf.html

Ryan
quelle
Einige Hinweise: 1. bsdmainutils müssen installiert werden 2. Warnung: Es schreibt Version des MySQL-Clients, nicht Server
Gadelat
Für die Serverversion lautet der Befehl mysqld -V|sed 's,^.*\(V.*\)\ for.*,\1,'. Ich bin mir nicht sicher, ob es wichtig ist, da ich denke, dass sowohl Client als auch Server zusammen installiert sind. Was ist der Zweck von {{{1und 1}}}?
beppe9000