************************************************** ***** ***********
Teil eins, Aufbau mehrerer MySQL-Dienste auf einem Server
*********** ***** *****************************************
1. Einführung
Es gibt einen mysqld_multi-Befehl, mit dem mehrere MySQL-Dienste auf einem physischen Server ausgeführt werden können. Ich habe ihn heute selbst getestet und bestanden. Ich bin wirklich glücklich. Jetzt werde ich den Betriebsablauf mit Ihnen teilen.
Betriebssystem: Linux 2.6.13 (Slackware), andere Versionen von Linux sollten ähnlich sein. Installation des MySQL 4.0.17-Quellprogramms (ich glaube, die neueste Version 5.1.* ist auch verfügbar. Fast, versuchen Sie es in ein paar Tagen noch einmal.)
Planung: 4 MySQL-Dienste ausführen:
Servernamen übernehmen : db-app (IP ist 192.168.0.100),
Übernehmen Sie den Servernamen: db-app2 (IP ist 192.168.0.101),
Im Folgenden geht es bis zum zweiten Teil um MySQL db-app,
Zweitens, Vorbereitung
Installation mit MySQL-Quellprogramm, nehmen wir an, dass die Option configura während der Installation verwendet wird?
./configure - -prefix=/usr/local/mysql --datadir=/usr /local/mysql/data1 --sysconfdir=/etc
Hinweis: --prefix installiert MYSQL nach /usr/local/mysql,
--datadir generiert die Datenbank nach /usr/local /mysql/data1
sysconfdir gibt den Suchpfad der von MySQL verwendeten my.cnf-Konfigurationsdatei als /etc an
Andere MySQL-Installationsvorgänge werden weggelassen.
Im MySQL-Verwaltungshandbuch heißt es: Jeder MySQL-Dienst kann unabhängig sein, daher ruft jeder eine andere Startoption in my.cnf auf Der unten erwähnte GNR-Wert verwendet unterschiedliche Ports und generiert Die jeweiligen Socket-Dateien und Dienstdatenbanken sind unabhängig (weitere Informationen finden Sie im englischen Verwaltungshandbuch auf der offiziellen MySQL-Website
mysqld_multi). ist ein Dienstprozess, der mehrere MySQL-Programme verwaltet. Verschiedene Unix-Sockets können an verschiedenen Ports lauschen. Es kann den aktuellen Dienststatus starten, stoppen und überwachen.
----Das Programm sucht nach dem Abschnitt [mysqld#] in my.cnf (oder der in --config-file angepassten Konfigurationsdatei). „#“ kann eine beliebige positive Ganzzahl sein. Diese positive ganze Zahl ist die unten erwähnte Segmentsequenz, also GNR. Die Seriennummer des Segments wird als Parameter von mysqld_multi verwendet, um verschiedene Segmente zu unterscheiden, sodass Sie den Start und Stopp eines bestimmten MySQL-Prozesses steuern oder dessen Berichtsinformationen abrufen können. Die Parameter in diesen Gruppen sind genau wie die Parameter der Gruppen, die zum Starten eines MySQLd erforderlich sind. Wenn Sie jedoch mehrere Dienste verwenden, müssen Sie für jeden Dienst einen Unix-Socket oder -Port angeben (Auszug aus http://mifor.4dian.org Verwendung des Programms mysqld_multi zum Verwalten mehrerer MySQL-Dienste).
Wie Sie dem obigen Text entnehmen können, ist die my.cnf-Konfigurationsdatei der wichtigste der zahlreichen MySQL-Dienste.
Jetzt poste ich meine my.cnf-Datei.- -- --------------------
[mysqld_multi]
mysqld = /usr/local/mysql/bin /mysqld_safe
mysqladmin = /usr/local/mysql/bin/mysqladmin
user = mysql (Verwenden Sie ein Konto, um alle MySQL-Server zu starten, da dasselbe Konto verwendet wird. Was ist dieses Konto? ? Es muss ein Konto sein, das von jedem MySQL-Dienst verwendet wird, vorzugsweise ein Verwaltungskonto. Das folgende Passwort ist dasselbe wie)
password = mypaswd
[mysqld1]
port = 3306
socket = /tmp/mysql.sock1
pid-file=/usr/local/mysql/data1/db-app1.pid
log =/usr/local/mysql/data1/db-app.log
datadir = /usr/local/mysql/data
user = mysql
[ mysqld2]
port = 3307
socket = /tmp/mysql.sock2
pid-file = /usr/local/mysql/data2/db-app2.pid
datadir = /usr/local/mysql/data2
log=/usr/local/mysql/data2/db-app.log
user = mysql
[mysqld3]
port = 3308
socket = /tmp/mysql.sock3
pid-file = /usr/local/mysql/data3/ db-app3.pid3
datadir = /usr/local/mysql/data3
log=/usr/local/mysql/data3/db-app.log
user = mysql
[mysqld4]
port = 3309
socket = /tmp/mysql.sock4
pid-file = /usr/ local/mysql/data3/db-app4.pid
datadir = /usr/local/mysql/data4
log=/usr/local/mysql/data4/db-app.log
user = mysql
[mysqldump]
quick
max_allowed_packet = 16M
[mysql]
no-auto-rehash
[isamchk]
key_buffer = 128M
sort_buffer_size = 128M
read_buffer = 2M
write_buffer = 2M
[myisamchk]
key_buffer = 128M
sort_buffer_size = 128M
read_buffer = 2M
write_b Puffer = 2M
[mysqlhotcopy]
interactive-timeout
In meiner Konfigurationsdatei gibt es mysqld1, mysqld2, mysqld3, mysqld4. Das heißt, ich werde 4 MySQL-Dienste auf verschiedenen Ports desselben Servers starten – 3306-3309. Der von jedem Datenverzeichnis angegebene Datenbankdateipfad ist unterschiedlich und jeder hat seine eigene unterschiedliche Protokolldatei. Einige andere Einstellungen können den ursprünglichen Inhalt von my.cnf verwenden
ok, die wichtige my.cnf wurde bearbeitet, erstellen Sie jetzt separate Ordner und anfängliche Datenbanken für verschiedene MySQL-Dienste
[mysqld1] ist ein Standardverzeichnis, es war bereits vorhanden, als wir MySQL installiert haben, also machen Sie sich keine Sorgen darüber
[mysqld2], erstellen Sie einfach ein Verzeichnis dafür Der konfigurierte Pfad. Das Verzeichnis wird in MySQL-Verwaltungsrechte geändert
db-app:/ # mkdir /usr/local/mysql/data2
Build a Datenbank können wir die Standard-MySQL-Datenbank kopieren, um andere MySQL-Konten zu verwenden, und andere Datenbanken entsprechend der Anwendung erstellen
db-app:/ # cp /usr/local/mysql/data1/mysql /usr /local/mysql/data2 -R
db-app:/ # chmod mysql.mysql /usr/local/mysql/data2 -R
[mysqld3],[ mysqld4] , das Gleiche.
Wir können sehen, ob diese Verzeichnisse existieren
db-app:/ # ls -l /usr/local/mysql/
drwxr-xr-x 6 mysql mysql 4096 9. April 17:54 data4
drwxr-x--- 2 mysql mysql 4096 9. April 17:14 data1
drwxr-xr - x 3 mysql mysql 4096 9. Apr. 17:54 data2
drwxr-xr-x 3 mysql mysql 4096 9. Apr. 17:54 data3
Jetzt kann es über mysqld_multi gestartet werden.
Drei, mysqld_multi-Befehl. Verwenden Sie die folgenden Parameter, um mysqld_multi zu starten: (Hinweis: Dieser Befehl befindet sich im Bin-Verzeichnis von MySQL, wie oben erwähnt./configure --prefix =/usr/local/mysql, daher sollte sich die Datei in /usr/local/mysq/bin befinden, was vom Pfad abhängt, den Sie bei der Installation angegeben haben)
db-app:/ # mysqld_multi [options] { start|stop|report} [GNR[,GNR]...]
start, stop und report beziehen sich auf die Vorgänge, die Sie ausführen möchten. Sie können einen Vorgang für einen einzelnen Dienst oder für mehrere Dienste angeben, im Unterschied zur GNR-Liste, die den Optionen folgt. Wenn keine GNR-Liste angegeben ist, arbeitet mysqld_multi in allen Diensten gemäß der Optionsdatei.
Der Wert jedes GNR ist die Sequenznummer der Gruppe oder der Sequenznummernbereich einer Gruppe. Der Wert dieses Elements muss die letzte Zahl des Gruppennamens sein. Wenn der Gruppenname beispielsweise mysqld17 lautet, ist der Wert dieses Elements 17. Wenn Sie einen Bereich angeben, verwenden Sie „-“ (Bindestrich), um den zu verbinden zwei Zahlen. Wenn der Wert von GNR 10-13 beträgt, bezieht er sich auf die Gruppen mysqld10 bis 13. In der Befehlszeile können mehrere Gruppen oder Gruppenbereiche angegeben werden, getrennt durch "," (Komma). Es dürfen keine Leerzeichen (z. B. Leerzeichen oder Tabulatoren) vorhanden sein. Parameter, die auf Leerzeichen folgen, werden ignoriert. (Hinweis: Der GNR-Wert ist der Wert in mysqld#, den wir in my.cnf definiert haben. Ich habe hier nur 1-4
db-app:/ # /usr/local.) /mysq /bin/mysqld_multi --config-file=/etc/my.cnf start 1 startet nur den ersten MySQL-Dienst und die zugehörigen Dateien werden von mysql1 in my.cnf festgelegt -app: / # /usr/local/mysq/bin/mysqld_multi --config-file=/etc/my.cnf stop 1 Starten und stoppen Sie den ersten MySQL-Dienst
db-app:/ # /usr /local/mysq/bin/mysqld_multi --config-file=/etc/my.cnf start 1-4, starte den 1. bis 4. MySQL-Dienst, der eigentlich alles ist, was ich hier habe
db- app:/ # /usr/local/mysq/bin/mysqld_multi --config-file=/etc/my.cnf Bericht 1-4
Start anzeigen:
db-app:/ # ps aux
root 10467 0,0 0,2 2712 1300 pts/0 S 18:59 0:00 /bin/sh /usr/local/mysql/ bin/mysqld_safe -- port=3306 --socket=/tmp/mysql.sock1
root 10475 0.0 0.2 2712 1300 pts/0 S 18:59 0:00 /bin/sh /usr/local/mysql /bin/mysqld_safe - -port=3307 --socket=/tmp/mysql.sock2
root 10482 0,0 0,2 2716 1300 pts/0 S 18:59 0:00 /bin/sh /usr/local/ mysql/bin/mysqld_safe --port=3308 --socket=/tmp/mysql.sock3
root 10487 0.0 0.2 2716 1300 pts/0 S 18:59 0:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --port=3309 --socket=/tmp/mysql.sock4
.................................................
Viertens: Client-Zugriff
Jeder Client-Zugriff muss den Zugriffsport angeben, um auf den angegebenen Datenbankdienst zuzugreifen. Andernfalls wird MYSQL vom MySQL-Standardport (3306) bereitgestellt gebraucht.
************************************************ **** ****************
Teil 2, Erstellen mehrerer MySQL-Hauptdienste auf einem Server
***** ****** ********************************************** **
Tipp: Erstellen Sie ein Konto speziell für die folgende Master-Slave-Replikation. Die in diesem Beispiel verwendete Kontoreplikation hat das Passwort: „1234567890“, das es ermöglicht, „select_priv“, „reload_priv“ und „process_priv“ zu haben , grant_priv, super_priv, repl_slave_priv, repl_client_priv Berechtigungen und kann über jeden Client aufgerufen werden, dh der Zugriffsclient ist „%“.
Der Hauptzweck besteht darin, den Inhalt in my.cnf zu ändern, sodass jedes MySQL seine eigene Bin-Log-Datei und seine eigene Betriebsumgebung generieren kann. Fügen Sie nun den gesamten Inhalt von my.cnf ein zu mysql für verwandte Parameter = /tmp/mysql .sock
[mysqld_multi]
mysqld = /usr/local/mysql/bin/mysqld_safe
mysqladmin = /usr/local/ mysql/bin/mysqladmin
user = mysql
password = mypasswd
[mysqld1]
port = 3306
socket = / tmp/mysql.sock1
Skip-Locking
pid-file=/usr/local/mysql/data/net-app1a.pid
datadir = /usr/local /mysql/data
log=/usr/local/mysql/data/net-app1.log
user = mysql
log-slow-queries=/usr/ local/mysql/data /slowquery.log
long_query_time = 2
key_buffer = 256M
max_allowed_packet = 1M
table_cache = 512
sort_buffer_size = 2M
read_buffer_size = 2M 2
max_connections=500
log-bin
log-bin=/usr/local/mysql/data /app-net1_1-bin
server-id = 1
[mysqld2]
port = 3307
socket = /tmp/mysql .sock2
pid-file = /usr/local/mysql/data2 /net-app1b.pid
datadir = /usr/local/mysql/data2
log= /usr/local/mysql/data2/net-app1.log
user = mysql
log-slow-queries=/usr/local/mysql/data2/slowquery.log
long_query_time = 10
key_buffer = 128M
max_allowed_packet = 1M
table_cache = 512
sort_buffer_size = 1M
read_buffer_size = 1M
myisam_sort_buffer_size = 32M
thread_cache = 32
query_cache_size = 16M
thread_concurrency = 2
max_connections=300
log-bin
log-bin=/usr/local/ mysql/data2/app-net1_2-bin
server-id = 1
[ mysqld3]
port = 3308
socket = / tmp/mysql.sock3
Skip-Locking
pid-file = /usr/local/mysql /data3/net-app1c.pid
datadir = /usr/local /mysql/data3
log=/usr/local/mysql/data3/net-app1.log
user = mysql
log-bin
log-bin=/usr/local/mysql/data3/app-net1_3-bin
server-id = 1
[mysqld4]
port = 3309
socket = /tmp/mysql.sock4
skip-locking
pid -file = /usr/local/mysql/data1/app-net1d.pid
datadir = /usr/local/mysql/data1
log=/usr/local/mysql/data1/ net-app1.log
user = mysql
log-bin
log-bin=/usr/local/mysql/data1/app-net1_4-bin
server-id = 1
[mysqldump]
schnell
max_allowed_packet = 16M
[mysql]
keine automatische Wiederaufbereitung
#Entfernen Sie das nächste Kommentarzeichen, wenn Sie mit SQL nicht vertraut sind
#safe-updates
[isamchk]
key_buffer = 128M
sort_buffer_size = 128M
read_buffer = 2M
write_buffer = 2M
[myisamchk]
key_buffer = 128M
sort_b buffer_size = 128M
read_buffer = 2M
write_buffer = 2M
[mysqlhotcopy]
interactive-timeout
* *********************
Das Starten mehrerer MySQL-Dienste ist dasselbe,
db-app:/ # /usr/local/mysq/bin/mysqld_multi --config-file=/etc/my.cnf start 1-4
******************** ***** *****************************************
Teil Drei: Erstellen Sie mehrere MySQL-Slave-Dienste auf einem Server
****************************** ****** ***************************
Vorauswahlvorbereitung für den Aufbau des Slave-Servers: It Es wird empfohlen, mysqld_multi zu verwenden, um alle MySQL-Dateien auf dem Master-Server zu stoppen, mit Ausnahme des Datenbankverzeichnisses (in diesem Artikel gibt es 4 Datenverzeichnisse, datadir = data1 - data1 in /usr/local/mysql/). . Sowohl der Master als auch die Slaves verwenden denselben Datenverzeichnispfad.
Verwenden Sie den Tar-Befehl, um jede Datenbank zu kapseln und sie über den SFTP-Befehl auf den Slave-Server (db-app1 192.168.0.101) zu übertragen.
Die folgenden Vorgänge sind für Referenz:
Operationen auf dem db-app-Host
db-app:/ # tar -cf data1.tar /usr/local/mysql/data1
db-app :/ # tar -cf data2.tar /usr/local/mysql/data2
db-app:/ # tar -cf data3.tar /usr/local/mysql/data3
db -app: / # tar -cf data4.tar /usr/local/mysql/data4
Vorgang auf db-app1-Host
db-app1:/ # tar xvf data1.tar
db-app1:/ # tar xvf data2.tar
db-app1:/ # tar xvf data3.tar
db-app1:/ # tar xvf data4.tar
Bestätigen Sie gleichzeitig, ob das Systemkonto MySQL über Betriebsberechtigungen für das MySQL-Datenverzeichnis im Master/Slave-Server verfügt. Wenn Sie dies nicht bestätigen können, können Sie es direkt ändern Das Eigentum an diesen Verzeichnissen kann.
Vorgänge auf dem db-app-Host
db-app:/ # chown mysql.mysql /usr/local/mysql/data1 -R
db-app: / # chown mysql.mysql /usr/local/mysql/data2 -R
db-app:/ # chown mysql.mysql /usr/local/mysql/data3 -R
db- app :/ # chown mysql.mysql /usr/local/mysql/data4 -R
Vorgang auf db-app1-Host
db-app1:/ # chown mysql /usr /local/mysql/data1 -R
db-app2:/ # chown mysql.mysql /usr/local/mysql/data2 -R
db-app3:/ # chown mysql.mysql /usr/local/mysql/data3 -R
db-app4:/ # chown mysql.mysql /usr/local/mysql/data4 -R
Das Folgende ist From the Gesamter Inhalt von /etc/my.cnf auf dem Server
Tipp: In my.cnf wird unten ein Konto erwähnt: repl, das Passwort lautet: „1234567890“, dieses Konto wurde oben speziell erstellt.
Tatsächlich sind sie alle gleich. Die Hauptsache besteht darin, den Inhalt in my.cnf zu ändern, sodass jedes Slave-MySQL sein eigenes Bin-Protokoll über verschiedene Ports des Haupt-MySQL erhalten kann, um das zu aktualisieren selbst erstellte Datenbankinhalte. Fügen Sie nun den gesamten Inhalt meiner my.cnf (vom Server) ein. Informationen zu den zugehörigen Parametern finden Sie im offiziellen MySQL-Handbuch
#port = 3306
#socket = /tmp/mysql.sock
[mysqld_multi]
mysqld = /usr/local/ mysql/ bin/mysqld_safe
mysqladmin = /usr/local/mysql/bin/mysqladmin
user = mysql
password = netmoniit
[mysqld1]
port = 3306
socket = /tmp/mysql.sock1
Skip-Locking
pid-file=/usr/local/mysql/data /net -app1a.pid
datadir = /usr/local/mysql/data
log=/usr/local/mysql/data/net-app1.log
user = mysql
log-slow-queries=/usr/local/mysql/data/slowquery.log
long_query_time = 2
key_buffer = 256M
max_allowed_packet = 1M
table_cache = 512
sort_buffer_size = 2M
read_buffer_size = 2M
myisam_sort_buffer_size = 64M
thread_cache = 32 .
query_ca che_size = 32M
thread_concurrency = 2
max_connections=500
server-id = 2
master-host = 192.168.0.100
master-user = 'repl'
master-password = '1234567890'
master-port = 3309
report-host = net-app1
master-connect- erneut versuchen = 30
log-bin
log-slave-updates
[mysqld2]
port = 3307
socket = /tmp/mysql.sock2
pid-file = /usr/local/mysql/data2/net-app1b.pid
datadir = /usr/local/mysql/ data2
log=/usr/local/mysql/data2/net-app1.log
user = mysql
log-slow-queries=/usr/local/mysql /data2/slowQuery.log
long_query_time = 10
KEY_BUFFER = 128M
max_allowed_packet = 1m
table_cache = 512
sorte_buffer_buffer_buffer_buffer_size = 1M
read_buffer_size = 1M
myisam_sort_buffer_size = 32M
thread_cache = 32
query_cache_size = 16M .
thread_concurrency = 2
max_connections=300
server-id = 2
master-host = 192.168.0.100
master-user = 'repl'
master- Passwort = '1234567890'
master-port = 3309
report-host = net-app1
master-connect-retry = 30
log- bin
log-slave-updates
[mysqld3]
port = 3308
socket = /tmp/mysql.sock3
pid-file = /usr/local/mysql/data3/net-app1c.pid
datadir = /usr/local/mysql/data3
log=/usr /local/mysql/data3/net-app1.log
user = mysql
log-slow-queries=/usr/local/mysql/data3/slowquery.log
long_query_time = 10
key_buffer = 128M
max_allowed_packet = 1M
table_cache = 512
sort_buffer_size = 1M .
read_buffer_size = 1 Mio.
myisam_sort_buffer_size = 32M
thread_cache = 32
query_cache_size = 16M
thread_concurrency = 2
max_connections=300
Server-ID = 2
Master-Host = 192.168.0.100
Master-Benutzer = 'repl'
Master-Passwort = '1234567890'
Master-Port = 3309
report-host = net-app1
master-connect-retry = 30
log-bin
log-slave- Updates
[mysqld3]
port = 3308
socket = /tmp/mysql.sock4
pid-file = /usr/local /mysql/data4/net-app1d.pid
datadir = /usr/local/mysql/data4
log=/usr/local/mysql/data4/net-app1.log
user = mysql
log-slow-queries=/usr/local/mysql/data4/slowquery.log
long_query_time = 10
key_buffer = 128M
max_allowed_packet = 1M
table_cache = 512
sort_buffer_size = 1M
read_buffer_size = 1M
myisam_sort_buffer_size = 32M
thread_cache = 32
query_cache_size = 16M
thread_concurrency = 2
max_connections=300
server-id = 2
master-host = 192.168.0.100 = net-app1
master-connect-retry = 30
log-bin
log-slave-updates
[ mysqldump]
schnell
max_allowed_packet = 16M
[mysql]
no-auto-rehash
# Entfernen Sie das nächste Kommentarzeichen, wenn Sie mit SQL nicht vertraut sind
#safe-updates
[isamchk]
key_buffer = 128M 🎜> key_buffer = 128M
sort_buffer_size = 128M
read_buffer = 2M
write_buffer = 2M
[mysqlhotcopy]
Interaktiv- Timeout
*********************************** ********
Da Sie nun fertig sind, starten Sie die mehreren MySQL-Dienste jeweils auf den beiden Hosts. Auf diese Weise wird jede Änderung in MySQL jedes Master-Dienstes automatisch kopiert/aktualisiert die entsprechende Datenbank des Slave-Servers.
db-app:/ # /usr/local/mysq/bin/mysqld_multi --config-file=/etc/my.cnf start 1-4
db-app1 :/ # /usr/local/mysq/bin/mysqld_multi --config-file=/etc/my.cnf start 1-4
************ ********
Fünf, zukünftige Tests,
Als nächstes möchte ich eine Multi-Master- und Ein-Slave-MySQL-Server-Replikationslösung erstellen! ein paar Ratschläge? Meinungen!
Es gibt Master-Server Server A, Server B und Slave-Server Server C. A und B führen unterschiedliche Datenbankanwendungen aus, vorausgesetzt, die Datenbanknamen sind unterschiedlich. Server C (vorausgesetzt, dass auf diesen drei PCs nur ein MySQL-Dienst ausgeführt wird) umfasst alle MySQL-Benutzer der Server A und B mit denselben Zugriffsrechten und ist über die Master/Slave-Methode in einen MySQL-Dienst C integriert Datenbank.
Es ist fast so, als würde man das MySQL von zwei Master-Servern zu einem Slave-Server zusammenführen.
[Verwandte Empfehlungen]
1.
Kostenloses MySQL-Video-Tutorial
2 MySQL-Dienst Teil 2
3.
Ein Beispiel-Tutorial zur Verarbeitung speziell SQL-Anweisungen in MySQL
5. Detaillierte Erklärung, wie man SQL-Anweisungen schreibt, um Tabellen in verschiedenen Datenbanken zu löschenDas obige ist der detaillierte Inhalt vonErfahren Sie, wie Sie mehrere MySQL-Dienste auf einem Computer ausführen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!