Ich habe einen Master, der 298 Relay-Bin-Dateien hat, die noch heute aktuell sind und 298 Tage zurückreichen.
In der .cnf gibt es keine Relay-Log-Definitionen
und
mysql> show variables like '%relay%';
+---------------------------------+----------------+
| Variable_name | Value |
+---------------------------------+----------------+
| innodb_overwrite_relay_log_info | OFF |
| max_relay_log_size | 0 |
| relay_log | |
| relay_log_index | |
| relay_log_info_file | relay-log.info |
| relay_log_purge | ON |
| relay_log_space_limit | 0 |
+---------------------------------+----------------+
Der Reset-Slave löscht sie, aber dann werden sie gerade wieder regeneriert.
Irgendeine Idee, was das verursacht? Wie kann ich damit aufhören?
BEARBEITET AN ANFRAGEN
Allgemeine Kritik am CNF ist willkommen, aber lassen Sie uns das OP-Thema im Auge behalten.
---- cnf request
[mysqld]
character_set_server = utf8
max_connections=200
max_user_connections=160
max_connect_errors=10000
userstat_running = 1
log_warnings
slow_query_log=1
slow_query_log_file=/var/log/mysql/mysql-slow.log
long_query_time=2
innodb_file_per_table
innodb_open_files=2048
innodb_additional_mem_pool_size=1M
innodb_buffer_pool_size=512M
innodb_log_buffer_size=1M
innodb_log_file_size=128M
innodb_autoextend_increment=16
innodb_flush_method=O_DIRECT
datadir=/var/lib/mysql/
tmpdir=/var/lib/mysql_ramdisk
server-id=2
log-bin = /var/log/mysql/mysql-bin
log-bin-index = /var/log/mysql/mysql.index
key_buffer_size = 800M
preload_buffer_size = 256K
max_allowed_packet = 8M
table_cache = 512
sort_buffer_size = 8M
join_buffer_size = 8M
read_buffer_size = 2M
read_rnd_buffer_size = 2M
thread_cache_size = 32
query_cache_size = 32M
query_cache_limit = 16M
myisam_sort_buffer_size = 2000M
tmp_table_size = 64M
max_heap_table_size = 64M
---- now for the cli requests
mysql> show slave status\G
Empty set (0.00 sec)
mysql> show master status;
+---------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+---------------------+----------+--------------+------------------+
| awesome-bin.xxxxxxx | yyyyyyyy | | |
+---------------------+----------+--------------+------------------+
1 row in set (0.00 sec)
---- version
mysql> select version();
+--------------------+
| version() |
+--------------------+
| 5.1.47-rel11.1-log |
+--------------------+
1 row in set (0.00 sec)
mysql
replication
atxdba
quelle
quelle
RESET SLAVE
auf Master mit vielen Relais-Protokollen hat es für mich getan.Antworten:
Wenn ein Master über Relay-Protokolle verfügt, muss der Master auch ein Slave inmitten einer Replikationstopologie sein (dh Master / Master, Daisy-Chained-Replikation).
Was könnte dazu führen, dass Relay-Protokolle so wachsen?
ZERBROCHENE REPLIKATION
Die MySQL-Replikation ist unterbrochen, wenn der E / A-Thread oder der SQL-Thread unter diesen SZENARIEN stirbt:
skip-slave-start
aktiviert gestartetSTOP SLAVE
;SHOW SLAVE STATUS\G
zeigt dir dasLast_Errno
undLast Error
Es ist die Situation Nr. 3 , die das Problem darstellt. Wenn der SQL-Thread aufgrund eines SQL-Fehlers stirbt, gibt es in MySQL Replication keinen integrierten Mechanismus, der die Trennung des E / A-Threads auslöst .
EMPFEHLUNG
Die einzige vernünftige Möglichkeit, das Wachstum von Relay-Protokollen zu steuern, besteht darin, das Limit festzulegen
Durch Festlegen von relay_log_space_limit wird eine Obergrenze von 4G festgelegt.
Wenn ein Relaisprotokoll vollständig verarbeitet wird
EPILOG
Wenn der Master früher ein Slave war und es nicht mehr sein muss, deaktivieren Sie ihn einfach.
Wenn der Master ein Slave ist, korrigieren Sie den SQL-Fehler.
Ich würde dies vorschlagen, wenn der SQL-Fehler im Weg ist:
Führen Sie dann
SHOW SLAVE STATUS\G
jede Minute aus, um festzustellen, ob die Relaisprotokolle verarbeitet und gedreht werden.quelle
Ohne Ihre my.cnf zu sehen, ist es unmöglich, diese Frage zu beantworten, aber ich würde auch vorschlagen, Ihre SHOW SLAVE STATUS \ G-Ausgabe zu veröffentlichen - ist es möglich, dass Ihr Slave tatsächlich unglaublich weit zurückliegt? Das würde die Relaisprotokolle behalten. Läuft der SQL Slave-Thread?
quelle
Könnte es sein, dass die Datei my.cnf falsch konfiguriert ist und Master-Binärprotokolle als Relay-Protokolle bezeichnet werden?
Oder Ihr Master verfügt über fest codierte Replikationseinstellungen in der Datei my.cnf, die beim Neustart der MySQL-Instanz übernommen werden.
EDIT: Haben Sie den tatsächlichen binlog-Dateinamen in der
show master status
Ausgabe maskiert ? Ich frage, weil die Einstellung in my.cnf nicht mit dem binlog-Namen übereinstimmt. Wenn ja, können Sie den tatsächlichen Dateinamen und die Ausgabe vonshow slave status
Aaron angeben? Bisher fällt in Ihrer my.cnf-Datei nichts auf, außer dass der Name für bin-log nicht übereinstimmt.quelle
Führen Sie den Befehl RESET SLAVE aus. Es werden die Relaisprotokolle bereinigt und ein neues neu generiert. Aber es wird nicht das neue verwenden. Sie können überprüfen, indem Sie später den Befehl FLUSH LOGS ausführen. Der Server erstellt kein zweites Relay-Protokoll.
quelle