2011-01-08 9 views
5

Ich habe zwei mysql-Instanzen auf der gleichen Maschine. Die Installationen befinden sich in/usr/loca/mysql1 und/usr/local/mysql2.Ändern der Standard-My.CNF-Pfad in Mysql

Ich habe separate my.cnf-Dateien in/etc/mysql1 und/etc/mysql2. Ich habe die erste Instanz von meinem SQL mit der Quelldistribution und mit der Option --prefix =/usr/local/mysql1 installiert. Die zweite, die ich vom Kopieren und Einfügen des gleichen Verzeichnisses nach/usr/local/mysql2 bekam.

Wenn ich den mysql-Daemon auf /usr.local/mysql/libexec starte, liest er die Datei my.cnf in/etc/mysql1. Und wenn ich den mysql-Daemon in/usr/local/mysql2 starte, liest er dieselbe my.cnf-Datei. Ich habe separate Portnummern und .sock-Dateien, die in der .cnf-Datei an diesen beiden Orten definiert sind.

Ich kann die Datei my.cnf an der zweiten Stelle mit der Option --defaults-file =/etc/mysql2/my.cnf beim Start von mysqld lesen. Ich muss das nicht jedes Mal eingeben, wenn ich den Daemon starte.

Wenn ich mehr Instanzen habe, wie kann ich die richtige my.cnf Datei zeigen, um jeden mysql-Daemon zu lesen. Was ist der Grund hinter mysqld-Links mit der my.cnf-Datei?

Wie kann ich den Speicherort der Datei my.cnf für jede Instanz vordefinieren?

+0

Schreiben Sie einfach zwei separate mysqld (oder mysqlmanager) Start-Skript, die sich voneinander trennen – ajreal

+0

Was ist Ihr Betriebssystem? –

Antwort

6

Wie Sie bereits festgestellt haben, hat MySQL einen kompilierten Suchpfad für seine Konfigurationsdatei. Obwohl Sie sich selbst neu kompilieren könnten, haben Sie auch die --defaults-Datei Option zu mysqld entdeckt, die es anweist, einen völlig anderen Konfigurationspfad zu verwenden. Zusammen mit --data-dir bedeutet dies, dass Sie mehrere Instanzen von MySQL starten können, die an verschiedene Ports (und Adressen, falls gewünscht) gebunden sind und mit völlig separaten Datensätzen arbeiten, während Sie dieselben Binärdateien und Bibliotheken bearbeiten.

Traditionell werden die meisten Betriebssystemverteilungen ein einzelnes Init-Skript zum Starten der "Standard" -Instanz von MySQL bündeln; das heißt, das, das am "üblichen" Ort und mit dem Standard-Konfigurationspfad installiert ist. Obwohl dies für den häufigsten Fall gedacht ist, ist das, was Sie suchen, ein wenig anders. Daher müssen Sie separate Skripts erstellen, um die separaten Instanzen zu starten.

Wenn Sie viele MySQL-Instanzen auf demselben Rechner bereitstellen möchten (und ich muss mich fragen, warum), dann sollten Sie vielleicht ein benutzerdefiniertes Init-Skript schreiben, das jede Möglichkeit hat, "zu entdecken" von diesen (vielleicht indem sie irgendein Verzeichnis untersuchen, das ein "allgemeines" Layout enthält), und Schleifen dann über ihnen, jedes anfangend. Natürlich muss das gleiche Init-Skript dann in der Lage sein, jedes von ihnen zu lokalisieren und ordnungsgemäß herunterzufahren.

0

Ich denke, der einzige sichere Weg besteht darin, aus der Quelle mit der Präfix-Option zu kompilieren. Entweder das, oder erstellen Sie ein Bash-Skript, das mysql2 mit der Option --defaults-file startet und dann dieses stattdessen zum Starten verwendet.

Allerdings ist es nicht gut, eine andere Installation zu erstellen, wie Sie es getan haben. Wenn Sie ein Paket kompilieren, ist der PREFIX fest in der ausführbaren Datei codiert. Wenn es also nach einer Ressource sucht, beginnt es mit diesem Präfix, sofern es nicht mit Befehlszeilenoptionen angegeben wird.

Also, wenn ich du wäre, würde ich nur von der Quelle mit einem neuen Präfix neu kompilieren.