Hallo Leute,
ich habe folgende Situation:
Ein MySQL-Server als Master und einen als Repication-Slave auf zwei getrennten Maschinen. Funktioniert prächtig bis gerade eben: Aus dummen Gründen schmiert mir der Master komplett ab, ich kann aber durch einen Serverneustart und einem Table-Repair alles wieder ins Lot bringen. Der Slave dagegen bekommt keinen Sync mehr, weil er versucht auf nicht existente Bin-Logs zuzugriefen (zu hoher index, die existieren garnicht). Ich wußte ja auch nicht genau zu welchem Zeitpunkt er den Sync verloren hat, deshalb konnte ich ihm keine neuen binlog-pos geben. Ich habe es jetzt so gemacht das ich auf dem Master einen Snapshot des Datenverzeichnisses (dank LVM nicht so das problem) auf den slave geschoben habe und die replikation neugestartet habe.
Ist das wirklich die einzige Lösung? Heißt das jedesmal wenn mir der Master abschmieren sollte (hoffe ja nicht das es zu oft passiert) hängt der Slave die Syhncronisation an den Nagel?
Danke schonmal
TO
Master schmiert ab, Slave syncrhonisiert nichtmehr
Re: Master schmiert ab, Slave syncrhonisiert nichtmehr
Normalerweise sollte der Slave die Replikation automatisch an der richtigen Stelle wieder aufnehmen. Wie sehen denn die beiden my.cnf aus? Waren die Binlogs am Master noch vollständig vorhanden oder versehentlich gelöscht?
PayPal.Me/JoeUser ● FreeBSD Remote Installation
Wings for Life ● Wings for Life World Run
„If there’s more than one possible outcome of a job or task, and one
of those outcomes will result in disaster or an undesirable consequence,
then somebody will do it that way.“ -- Edward Aloysius Murphy Jr.
Wings for Life ● Wings for Life World Run
„If there’s more than one possible outcome of a job or task, and one
of those outcomes will result in disaster or an undesirable consequence,
then somebody will do it that way.“ -- Edward Aloysius Murphy Jr.
Re: Master schmiert ab, Slave syncrhonisiert nichtmehr
Die Binlogs die der Slave wollte waren nicht da (existent war bis nummer 17, er wollte 25). Config sieht simpel aus:
Master:
Slave:
Dank dir schonmal
TO
Master:
Code: Select all
character-set-server = utf8
default-character-set = utf8
user = mysql
port = 3306
socket = /var/run/mysqld/mysqld.sock
pid-file = /var/run/mysqld/mysqld.pid
log-error = /var/log/mysql/mysqld.err
basedir = /usr
datadir = /var/lib/mysql
skip-locking
log-error = /var/log/mysql/error.log
log-slow-queries= /var/log/mysql/slow.log
long_query_time = 1
key_buffer = 800M
query_cache_size = 256M
table_cache = 3600
thread_cache_size = 384
sort_buffer_size = 25M
tmp_table_size = 800M
max_connect_errors=10000
max_connections=500
innodb_flush_log_at_trx_commit=0
innodb_buffer_pool_size=500M
max_allowed_packet = 1M
net_buffer_length = 8K
read_buffer_size = 256K
read_rnd_buffer_size = 512K
myisam_sort_buffer_size = 8M
language = /usr/share/mysql/english
set-variable = innodb_log_file_size=200M
bind-address = 10.1.20.6
log-bin=db-bin
server-id = 1
Code: Select all
character-set-server = utf8
default-character-set = utf8
user = mysql
port = 3306
socket = /var/run/mysqld/mysqld.sock
pid-file = /var/run/mysqld/mysqld.pid
log-error = /var/log/mysql/mysqld.err
basedir = /usr
datadir = /var/lib/mysql
skip-locking
log-error = /var/log/mysql/error.log
log-slow-queries= /var/log/mysql/slow.log
long_query_time = 1
key_buffer = 800M
query_cache_size = 256M
table_cache = 3600
thread_cache_size = 384
sort_buffer_size = 25M
tmp_table_size = 800M
max_connect_errors=10000
max_connections=500
innodb_flush_log_at_trx_commit=0
innodb_buffer_pool_size=500M
max_allowed_packet = 1M
net_buffer_length = 8K
read_buffer_size = 256K
read_rnd_buffer_size = 512K
myisam_sort_buffer_size = 8M
language = /usr/share/mysql/english
set-variable = innodb_log_file_size=200M
bind-address = 10.1.20.100
log-bin=db-bin
server-id = 2
log-slave-updates
log-warnings
TO
Re: Master schmiert ab, Slave syncrhonisiert nichtmehr
Füge mal folgende Optionen im Abschnitt [mysqld] hinzu:
Master:
Slave:
Master:
Code: Select all
sync_binlog = 1
binlog_cache_size = 1M
max_binlog_size = 100M
Code: Select all
master-host = <hostname>
master-user = <username>
master-password = <password>
master-port = 3306
sync_binlog = 1
binlog_cache_size = 1M
max_binlog_size = 100M
PayPal.Me/JoeUser ● FreeBSD Remote Installation
Wings for Life ● Wings for Life World Run
„If there’s more than one possible outcome of a job or task, and one
of those outcomes will result in disaster or an undesirable consequence,
then somebody will do it that way.“ -- Edward Aloysius Murphy Jr.
Wings for Life ● Wings for Life World Run
„If there’s more than one possible outcome of a job or task, and one
of those outcomes will result in disaster or an undesirable consequence,
then somebody will do it that way.“ -- Edward Aloysius Murphy Jr.
Re: Master schmiert ab, Slave syncrhonisiert nichtmehr
Das Problem ist nicht das ABschmieren des Masters, sondern der Verlust der Binlogs auf demselben. Wenn die vom Slave angefragten Binlogs auf dem Master verloren sind, ist der Slave wertlos und muß auf die von Dir beschriebene Weise neu aufgesetzt werden.theomega wrote:Ist das wirklich die einzige Lösung? Heißt das jedesmal wenn mir der Master abschmieren sollte (hoffe ja nicht das es zu oft passiert) hängt der Slave die Syhncronisation an den Nagel?
Re: Master schmiert ab, Slave syncrhonisiert nichtmehr
Hallo,
ich hatte ähnlich Probleme.
Das Problem ist , das bei dem Binlogs vom Slave von einer bestimmten Größe
ausgegangen wird, die du für die binlogs eingetragen hast. (Bei mir z.b. 1 GB)
Wenn der Master abschmiert, wird nicht die Binlog fortgeführt , die vor dem Crash aktuell war, sondern eine Nummer weiter angefangen.
Das sieht dann ungefähr so aus.
mydb-bin.001 Größe 1 GB
mydb-bin.002 Größe 324 MB (crash)
mydb-bin.003 Größe 420 MB (aktuelles File)
Wenn du
show slave status
eingibst, wirst du sehen,das der Wert Master_Log_File auf das File des
Crash liegt (mydb-bin) und zwar mit einen Wert read_master_log_pos höher
als existent, dadurch wird die Fehlermeldung verursagt.
Abhilfe:
auf dem slave folgendes ausführen:
slave stop;
change master to
master_log_file = mydb-bin.003,
master-log_pos = 4;
slave start;
Gruß,
Richard
ich hatte ähnlich Probleme.
Das Problem ist , das bei dem Binlogs vom Slave von einer bestimmten Größe
ausgegangen wird, die du für die binlogs eingetragen hast. (Bei mir z.b. 1 GB)
Wenn der Master abschmiert, wird nicht die Binlog fortgeführt , die vor dem Crash aktuell war, sondern eine Nummer weiter angefangen.
Das sieht dann ungefähr so aus.
mydb-bin.001 Größe 1 GB
mydb-bin.002 Größe 324 MB (crash)
mydb-bin.003 Größe 420 MB (aktuelles File)
Wenn du
show slave status
eingibst, wirst du sehen,das der Wert Master_Log_File auf das File des
Crash liegt (mydb-bin) und zwar mit einen Wert read_master_log_pos höher
als existent, dadurch wird die Fehlermeldung verursagt.
Abhilfe:
auf dem slave folgendes ausführen:
slave stop;
change master to
master_log_file = mydb-bin.003,
master-log_pos = 4;
slave start;
Gruß,
Richard