MySQL Replikation verschluckt sich an Syntax Error

chrigu
Posts: 14
Joined: 2005-01-28 15:35

MySQL Replikation verschluckt sich an Syntax Error

Post by chrigu »

Hallo zusammen,
Ich habe eine simple Master-Slave Umgebung am laufen. Der Slave ist virtuell, jetzt ist mir dort die Festplatte vollgelaufen.
Der MySQL-Server ist wahrscheinlich nicht mehr sauber gestoppt worden. Auf jedenfall habe ich die Festplatte getauscht und den MySQL-Server wieder gestartet.
Leider will jetzt die Replikation nicht mehr. Folgenden Fehler erhalte ich auf dem Slave:

Code: Select all

Replicate_Wild_Ignore_Table:
                 Last_Errno: 1064
                 Last_Error: Error 'You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'nly_cookies";b:1;s:13:"cache_limiter";s:7:"nocache";s:7:"timeout";i:0;}s:' at line 1' on query. Default database: ':16:"use_only_cookies";b:1;s:13:"cache_limiter";s:7:"nocache";s:7:"timeout";i:0;}s:'. Query: 'nly_cookies";b:1;s:13:"cache_limiter";s:7:"nocache";s:7:"timeout";i:0;}s:'
               Skip_Counter: 0
        Exec_Master_Log_Pos: 94675783
            Relay_Log_Space: 7149468979
            Until_Condition: None
             Until_Log_File:
              Until_Log_Pos: 0
         Master_SSL_Allowed: No


Hat jemand eine Ahnung, wie dieses Problem lösen kann?

Gruss,
Chrigu
Top

User avatar
Joe User
Project Manager
Project Manager
Posts: 11519
Joined: 2003-02-27 01:00
Location: Hamburg

Re: MySQL Replikation verschluckt sich an Syntax Error

Post by Joe User »

Holzhammer, Backup anlegen:
Stoppe den Slave, lösche die Slave-Logs, starte den Slave ohne Replikation, leere die zu replizierenden DBs im Slave, lasse den Slave die Daten direkt aus dem Master komplett neu beziehen und anschliessend restarte den Slave mit Replikation.
Ist unschön und isotopp wird mich dafür virtuell schlagen, aber es sollte funktionieren...
Top

chrigu
Posts: 14
Joined: 2005-01-28 15:35

Re: MySQL Replikation verschluckt sich an Syntax Error

Post by chrigu »

Joe User wrote:..lasse den Slave die Daten direkt aus dem Master komplett neu beziehen..

Danke für die Antwort. Wie forciere ich den Slave, dass er alle Daten vom Master holt?
Top

User avatar
Joe User
Project Manager
Project Manager
Posts: 11519
Joined: 2003-02-27 01:00
Location: Hamburg

Re: MySQL Replikation verschluckt sich an Syntax Error

Post by Joe User »

Code: Select all

$ mysql -uroot -p
> LOAD DATA FROM MASTER;
> QUIT;
$
Top

chrigu
Posts: 14
Joined: 2005-01-28 15:35

Re: MySQL Replikation verschluckt sich an Syntax Error

Post by chrigu »

Ok, ich habe folgendes gemacht:

In der /etc/mysql/my.cnf
# Replikation
#server-id = 2
#report-host = mensa.phbern.ch

Alle Binlogs gelöscht
$ rm mensa-relay-bin.*

Die master.info + relay-log.info gelöscht.
Alle Datenbanken geleert (muss ich die mysql und information_schema auch?)

Die Master-Daten neu konfiguriert:
CHANGE MASTER TO MASTER_HOST="1.2.3.4", MASTER_PORT=3306, MASTER_USER="mysql_slave", MASTER_PASSWORD="secret";
[Warning] Neither --relay-log nor --relay-log-index were used; so replication may break when this MySQL server acts as a slave and has his hostname changed!! Please use '--relay-log=mensa-relay-bin' to avoid this problem.

Anschliessend den MySQL-Server neu gestartet. In der MySQL-Shell: LOAD DATA FROM MASTER;
Es passiert nichts, keine Fehlermeldung, aber auch keine Daten in den Tabellen..

War das Vorgehen nicht richtig? Oder habe ich etwas zuviel gelöscht?

Gruss,
Chrigu
Top

User avatar
Joe User
Project Manager
Project Manager
Posts: 11519
Joined: 2003-02-27 01:00
Location: Hamburg

Re: MySQL Replikation verschluckt sich an Syntax Error

Post by Joe User »

chrigu wrote:Alle Datenbanken geleert (muss ich die mysql und information_schema auch?)

Nur, wenn die beiden Tabellen ebenfalls repliziert werden sollen.
chrigu wrote:Die Master-Daten neu konfiguriert:

Ich würde die Daten in der my.cnf hinterlegen:

Code: Select all

[mysqld]
master-host                 = 1.2.3.4
master-user                 = mysql_slave
master-password             = secret
master-port                 = 3306
log-bin                     = mysql-bin
server-id                   = 2
back_log                    = 50
sync_binlog                 = 1
binlog_cache_size           = 1M
max_binlog_size             = 100M
slave_compressed_protocol   = 1
replicate-wild-do-table     = %.%
replicate-wild-ignore-table = mysql.%
replicate-wild-ignore-table = information_shema.%
#skip-networking
#skip-name-resolve
log_slave_updates

chrigu wrote:Anschliessend den MySQL-Server neu gestartet. In der MySQL-Shell: LOAD DATA FROM MASTER;
Es passiert nichts, keine Fehlermeldung, aber auch keine Daten in den Tabellen.

Hilft ein `START SLAVE`? Was sagen die Logs (Master/Slave) dazu?



BTW: http://dev.mysql.com/doc/refman/5.0/en/replication.html
Top

chrigu
Posts: 14
Joined: 2005-01-28 15:35

Re: MySQL Replikation verschluckt sich an Syntax Error

Post by chrigu »

Konfiguration geändert, Server neu gestartet:

Code: Select all

Aug  7 11:24:57 mensa mysqld[7129]: 070807 11:24:57 [Note] /usr/sbin/mysqld: Normal shutdown
Aug  7 11:24:57 mensa mysqld[7129]:
Aug  7 11:24:57 mensa mysqld[7129]: 070807 11:24:57  InnoDB: Starting shutdown...
Aug  7 11:24:59 mensa mysqld[7129]: 070807 11:24:59  InnoDB: Shutdown completed; log sequence number 31 3993095067
Aug  7 11:24:59 mensa mysqld[7129]: 070807 11:24:59 [Note] /usr/sbin/mysqld: Shutdown complete
Aug  7 11:24:59 mensa mysqld[7129]:
Aug  7 11:24:59 mensa mysqld_safe[7423]: ended
Aug  7 11:25:00 mensa mysqld_safe[7513]: started
Aug  7 11:25:00 mensa mysqld[7516]: 070807 11:25:00  InnoDB: Started; log sequence number 31 3993095067
Aug  7 11:25:00 mensa mysqld[7516]: 070807 11:25:00 [Warning] Neither --relay-log nor --relay-log-index were used; so replication may break when this MySQL server acts as a slave and has his hostname changed!! Please use '--relay-log=mensa-relay-bin' to avoid this problem.
Aug  7 11:25:00 mensa mysqld[7516]: 070807 11:25:00 [Note] /usr/sbin/mysqld: ready for connections.
Aug  7 11:25:00 mensa mysqld[7516]: Version: '5.0.22-Debian_0ubuntu6.06.3-log'  socket: '/var/run/mysqld/mysqld.sock'  port: 3306  Debian Etch distribution
Aug  7 11:25:00 mensa mysqld[7516]: 070807 11:25:00 [Note] Slave SQL thread initialized, starting replication in log 'FIRST' at position 0, relay log './mensa-relay-bin.000001' position: 4
Aug  7 11:25:00 mensa mysqld[7516]: 070807 11:25:00 [Note] Slave I/O thread: connected to master 'mysql_slave@192.41.150.31:3306',  replication started in log 'FIRST' at position 4
Aug  7 11:25:01 mensa mysqld[7516]: 070807 11:25:01 [ERROR] Slave: Error 'Table 'sis-horde.horde_sessionhandler' doesn't exist' on query. Default database: 'sis-horde'. Query: 'REPLACE INTO horde_sessionhandler (session_id, session_data, session_lastmodified) VALUES ('9355fc6c6d58b9356633c1ee8b9f859f', 'imp|a:28:{s:5:"cache";a:1:{s:12:"folder_cache";a:1:{s:32:"6aa9fd5fc6f265f77b20644e8e966d8c";s:32:"c0c416a3d1f4bc0bb7d2820905d39549";}}s:4:"pass";s:16:":û��v�G�4F��";s:11:"_logintasks";i:0;s:4:"user";s:31:"b.freiburghaus@gymhmsschadau.ch";s:8:"uniquser";s:31:"b.freiburghaus@gymhmsschadau.ch";s:6:"server";s:9:"localhost";s:3:"acl";b:0;s:5:"admin";b:0;s:5:"quota";b:0;s:4:"port";i:143;s:8:"protocol";s:10:"imap/notls";s:8:"smtphost";s:9:"localhost";s:8:"smtpport";i:25;s:10:"maildomain";s:0:"";s:13:"base_protocol";s:4:"imap";s:11:"thismailbox";s:15:"INBOX.sent-mail";s:7:"mailbox";s:15:"INBOX.sent-mail";s:6:"stream";i:0;s:11:"file_upload";i:2097152;s
Aug  7 11:25:01 mensa mysqld[7516]: listavail";b:0;s:1
Aug  7 11:25:01 mensa mysqld[7516]: 070807 11:25:01 [ERROR] Error running query, slave SQL thread aborted. Fix the problem, and restart the slave SQL thread with "SLAVE START". We stopped at log 'mysql-bin.002974' position 98
Aug  7 11:25:01 mensa /etc/mysql/debian-start[7555]: Running MySQL upgrade script in the background...
Aug  7 11:25:01 mensa /etc/mysql/debian-start[7560]: This script updates all the mysql privilege tables to be usable by
Aug  7 11:25:01 mensa /etc/mysql/debian-start[7560]: MySQL 4.0 and above.
Aug  7 11:25:01 mensa /etc/mysql/debian-start[7560]:
Aug  7 11:25:01 mensa /etc/mysql/debian-start[7560]: This is needed if you want to use the new GRANT functions,
Aug  7 11:25:01 mensa /etc/mysql/debian-start[7560]: CREATE AGGREGATE FUNCTION, stored procedures, or
Aug  7 11:25:01 mensa /etc/mysql/debian-start[7560]: more secure passwords in 4.1
Aug  7 11:25:01 mensa /etc/mysql/debian-start[7560]:
Aug  7 11:25:06 mensa /etc/mysql/debian-start[7560]: done
Aug  7 11:25:06 mensa /etc/mysql/debian-start[7582]: Checking for crashed MySQL tables in the background.


LOAD DATA FROM MASTER;

Code: Select all

Aug  7 11:26:27 mensa mysqld[7516]: 070807 11:26:27 [Note] Slave I/O thread killed while reading event
Aug  7 11:26:27 mensa mysqld[7516]: 070807 11:26:27 [Note] Slave I/O thread exiting, read up to log 'mysql-bin.002982', position 64020771


START SLAVE;

Code: Select all

Aug  7 11:27:27 mensa mysqld[7516]: 070807 11:27:27 [Note] Slave I/O thread: connected to master 'mysql_slave@192.41.150.31:3306',  replication started in log 'mysql-bin.002982' at position 64020771
Aug  7 11:27:27 mensa mysqld[7516]: 070807 11:27:27 [Note] Slave SQL thread initialized, starting replication in log 'mysql-bin.002974' at position 98, relay log './mensa-relay-bin.000003' position: 235
Aug  7 11:27:27 mensa mysqld[7516]: 070807 11:27:27 [ERROR] Slave: Error 'Table 'sis-horde.horde_sessionhandler' doesn't exist' on query. Default database: 'sis-horde'. Query: 'REPLACE INTO horde_sessionhandler (session_id, session_data, session_lastmodified) VALUES ('9355fc6c6d58b9356633c1ee8b9f859f', 'imp|a:28:{s:5:"cache";a:1:{s:12:"folder_cache";a:1:{s:32:"6aa9fd5fc6f265f77b20644e8e966d8c";s:32:"c0c416a3d1f4bc0bb7d2820905d39549";}}s:4:"pass";s:16:":û��v�G�4F��";s:11:"_logintasks";i:0;s:4:"user";s:31:"b.freiburghaus@gymhmsschadau.ch";s:8:"uniquser";s:31:"b.freiburghaus@gymhmsschadau.ch";s:6:"server";s:9:"localhost";s:3:"acl";b:0;s:5:"admin";b:0;s:5:"quota";b:0;s:4:"port";i:143;s:8:"protocol";s:10:"imap/notls";s:8:"smtphost";s:9:"localhost";s:8:"smtpport";i:25;s:10:"maildomain";s:0:"";s:13:"base_protocol";s:4:"imap";s:11:"thismailbox";s:15:"INBOX.sent-mail";s:7:"mailbox";s:15:"INBOX.sent-mail";s:6:"stream";i:0;s:11:"file_upload";i:2097152;s
Aug  7 11:27:27 mensa mysqld[7516]: listavail";b:0;s:1
Aug  7 11:27:27 mensa mysqld[7516]: 070807 11:27:27 [ERROR] Error running query, slave SQL thread aborted. Fix the problem, and restart the slave SQL thread with "SLAVE START". We stopped at log 'mysql-bin.002974' position 98


Das Problem scheint also zu sein, dass der Slave beginnt zu replizieren, bevor alle Daten vom Master gelesen sind!
Er nimmt die Information aus dem relay-log.info.. Muss ich diese Datei löschen?

Gruss,
Chrigu
Top

theomega
Userprojekt
Userprojekt
Posts: 704
Joined: 2003-01-27 14:36

Re: MySQL Replikation verschluckt sich an Syntax Error

Post by theomega »

Sehr interessant:
Da wollte ich gerade genau den gleichen Beitrag aufmachen weil heute nacht genug das gleiche bei mir passiert ist: Der Slave verschluckt sich an einem Query und will nichtmehr weiter. Wie kann sowas eigentlich passieren, ich mein eigentlich sollten in den Binlog doch nur wirklich funktionierende Queries oder nicht?
Ist ja auch kein Zustand wenn sowas öfters passiert....

Und ich habe den MySQL-Server NICHT neugestartet, ich habe rein garnichts geändert.

Haben evtl die Profis hier einen Tipp bzw eine Erklärung?

Danke
TO
Top

User avatar
Joe User
Project Manager
Project Manager
Posts: 11519
Joined: 2003-02-27 01:00
Location: Hamburg

Re: MySQL Replikation verschluckt sich an Syntax Error

Post by Joe User »

Auf dem Slave:

Code: Select all

/etc/init.d/mysql stop
cd /var/lib
tar xzf mysql.tar.gz mysql
rm -r /var/lib/mysql/*
rm /var/log/mysql/*
/etc/init.d/mysql start
/usr/bin/mysql_secure_installation
/etc/init.d/mysql restart

Danach http://dev.mysql.com/doc/refman/5.0/en/ ... howto.html
Eventuell benötigt der mysql_slave-User mehr Rechte, das Maximum ist:

Code: Select all

GRANT SUPER,REPLICATION CLIENT,REPLICATION SLAVE,PROCESS,FILE,RELOAD,SELECT ON *.* TO 'mysql_slave'@'1.2.3.4' IDENTIFIED BY 'secret';




theomega wrote:Haben evtl die Profis hier einen Tipp bzw eine Erklärung?

Da auch ich kein MySQL-Profi bin, musst Du wohl auf isotopp warten.
Top

chrigu
Posts: 14
Joined: 2005-01-28 15:35

Re: MySQL Replikation verschluckt sich an Syntax Error

Post by chrigu »

Ok, klappt alles nicht. Da der Slave unbedingt wieder laufen muss und ich keine Zeit zum weiter basteln habe, mache ich es mit der Holzhammer-Methode.
Master stoppen, Verzeichnis packen, auf Slave schieben, und Replikation einstellen.
Eine Frage habe ich aber noch. Wofür ist die Datei ibdata1 da?
Das Ding braucht tierisch viel Platz, ca. 15GB!
Kann man diese Grösse irgendwie schlau begrenzen?
Top

User avatar
Joe User
Project Manager
Project Manager
Posts: 11519
Joined: 2003-02-27 01:00
Location: Hamburg

Re: MySQL Replikation verschluckt sich an Syntax Error

Post by Joe User »

chrigu wrote:Eine Frage habe ich aber noch. Wofür ist die Datei ibdata1 da?
Das Ding braucht tierisch viel Platz, ca. 15GB!
Kann man diese Grösse irgendwie schlau begrenzen?

http://dev.mysql.com/doc/refman/5.0/en/ ... ation.html
Top

chrigu
Posts: 14
Joined: 2005-01-28 15:35

Re: MySQL Replikation verschluckt sich an Syntax Error

Post by chrigu »

Hi,
Ok die MySQL-Doku zu InnoDB habe ich gelesen.
Eine Verständnisfrage: Es ist nicht möglich, diese Files generell in der Grösse zu beschränken?
Irgendein File muss autoextend sein?

Gruss,
Chrigu
Top

User avatar
Joe User
Project Manager
Project Manager
Posts: 11519
Joined: 2003-02-27 01:00
Location: Hamburg

Re: MySQL Replikation verschluckt sich an Syntax Error

Post by Joe User »

Du kannst die Grösse(n) generell beschränken, nur beschränkst Du damit auch die Gesamtgrösse aller InnoDB-Tabellen.
Top