[MySQL] Erreur de réplication

Le
JKB
Bonjour à tous,

Je viens de migrer une ancienne base MySQL vers un MySQL 5.1. Sur le
même serveur, j'ai une base maître et une réplique (accessible en
lecture seule) lancées par mysql_multi.

Maître : 3306/TCP
Réplique : 3307/TCP

J'ai installé la base maître depuis un dump de l'ancienne et mis les
tables de permissions à jour. Elle fonctionne parfaitement.

J'ai relancé hier soir la réplique qui a commencé à rattraper la
base maître jusqu'à une erreur que je trouve assez incompréhensible.
J'ai repassé la requête fautive à la main et ça me renvoie une
erreur.

mysql> CREATE TABLE `QRTZ_BLOB_TRIGGERS` ( `TRIGGER_NAME` varchar(150)
NOT NULL, `TRIGGER_GROUP` varchar(150) NOT NULL, `BLOB_DATA` blob,
PRIMARY KEY (`TRIGGER_NAME`,`TRIGGER_GROUP`), KEY `TRIGGER_NAME`
(`TRIGGER_NAME`,`TRIGGER_GROUP`), CONSTRAINT
`QRTZ_BLOB_TRIGGERS_ibfk_1` FOREIGN KEY (`TRIGGER_NAME`,
`TRIGGER_GROUP`) REFERENCES `QRTZ_TRIGGERS` (`TRIGGER_NAME`,
`TRIGGER_GROUP`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
ERROR 1005 (HY000): Can't create table 'ma_base.QRTZ_BLOB_TRIGGERS'
(errno: 150)
mysql>

En googlisant un peu, j'ai trouvé qu'il pouvait y avoir un problème
de FOREIGN KEY, ce que je veux bien admettre. Sauf que les deux
bases partagent le même fichier de configuration (au port et
id_server près) et que je ne vois pas comment me sortir de la chose.
Il est hors de question d'arrêter la base principale pour copier les
données sur la réplique, ce serait trop simple

Une idée ?

Cordialement,

JKB

--
Si votre demande me parvient sur carte perforée, je titiouaillerai très
volontiers une réponse
=> http://grincheux.de-charybde-en-scylla.fr
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Sebastien Lardiere
Le #23263081
On 04/06/2011 08:26 AM, JKB wrote:
Bonjour à tous,




Bonjour,

Je viens de migrer une ancienne base MySQL vers un MySQL 5.1. Sur le
même serveur, j'ai une base maître et une réplique (accessible en
lecture seule) lancées par mysql_multi.



[...]
J'ai repassé la requête fautive à la main et ça me renvoie une
erreur.

mysql> CREATE TABLE `QRTZ_BLOB_TRIGGERS` ( `TRIGGER_NAME` varchar(150)
NOT NULL, `TRIGGER_GROUP` varchar(150) NOT NULL, `BLOB_DATA` blob,
PRIMARY KEY (`TRIGGER_NAME`,`TRIGGER_GROUP`), KEY `TRIGGER_NAME`
(`TRIGGER_NAME`,`TRIGGER_GROUP`), CONSTRAINT
`QRTZ_BLOB_TRIGGERS_ibfk_1` FOREIGN KEY (`TRIGGER_NAME`,
`TRIGGER_GROUP`) REFERENCES `QRTZ_TRIGGERS` (`TRIGGER_NAME`,
`TRIGGER_GROUP`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
ERROR 1005 (HY000): Can't create table 'ma_base.QRTZ_BLOB_TRIGGERS'
(errno: 150)
mysql>




Il semblerait en effet que la définition de ce qu'est une clé étrangère
soit différente en fonction des versions de MySQL. Ici, il est possible
qu'il manque un index sur la table cible ; mais peut-être que la commande

show innodb status;

pourrait nous apporter des éléments.

--
Sébastien
JKB
Le #23263951
Le Wed, 06 Apr 2011 15:45:58 +0200,
Sebastien Lardiere
On 04/06/2011 08:26 AM, JKB wrote:
Bonjour à tous,




Bonjour,

Je viens de migrer une ancienne base MySQL vers un MySQL 5.1. Sur le
même serveur, j'ai une base maître et une réplique (accessible en
lecture seule) lancées par mysql_multi.



[...]
J'ai repassé la requête fautive à la main et ça me renvoie une
erreur.

mysql> CREATE TABLE `QRTZ_BLOB_TRIGGERS` ( `TRIGGER_NAME` varchar(150)
NOT NULL, `TRIGGER_GROUP` varchar(150) NOT NULL, `BLOB_DATA` blob,
PRIMARY KEY (`TRIGGER_NAME`,`TRIGGER_GROUP`), KEY `TRIGGER_NAME`
(`TRIGGER_NAME`,`TRIGGER_GROUP`), CONSTRAINT
`QRTZ_BLOB_TRIGGERS_ibfk_1` FOREIGN KEY (`TRIGGER_NAME`,
`TRIGGER_GROUP`) REFERENCES `QRTZ_TRIGGERS` (`TRIGGER_NAME`,
`TRIGGER_GROUP`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
ERROR 1005 (HY000): Can't create table 'ma_base.QRTZ_BLOB_TRIGGERS'
(errno: 150)
mysql>




Il semblerait en effet que la définition de ce qu'est une clé étrangère
soit différente en fonction des versions de MySQL. Ici, il est possible
qu'il manque un index sur la table cible ; mais peut-être que la commande



Je ne vois pas comment. Les deux mysql sont indentiques et la table
maître ne pose pas de problème...

show innodb status;



==================================== 110406 20:21:33 INNODB MONITOR OUTPUT
==================================== Per second averages calculated from the last 44 seconds
----------
SEMAPHORES
----------
OS WAIT ARRAY INFO: reservation count 3053, signal count 3022
Mutex spin waits 0, rounds 50163, OS waits 1757
RW-shared spins 2411, OS waits 1051; RW-excl spins 1551, OS waits 229
------------------------
LATEST FOREIGN KEY ERROR
------------------------
110406 8:15:10 Error in foreign key constraint of table
/QRTZ_BLOB_TRIGGERS:
FOREIGN KEY (`TRIGGER_NAME`, `TRIGGER_GROUP`) REFERENCES
`QRTZ_TRIGGERS` (`TRIGGER_NAME`, `TRIGGER_GROUP`) ) ENGINE=InnoDB
DEFAULT CHARSET=utf8:
Cannot resolve table name close to:
(`TRIGGER_NAME`, `TRIGGER_GROUP`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8
------------
TRANSACTIONS
------------
Trx id counter 0 14824
Purge done for trx's n:o < 0 12137 undo n:o < 0 0
History list length 5
LIST OF TRANSACTIONS FOR EACH SESSION:
---TRANSACTION 0 0, not started, process no 11020, OS thread id
2311781232
MySQL thread id 8, query id 27961 localhost 127.0.0.1 root
show innodb status
--------
FILE I/O
--------
I/O thread 0 state: waiting for i/o request (insert buffer thread)
I/O thread 1 state: waiting for i/o request (log thread)
I/O thread 2 state: waiting for i/o request (read thread)
I/O thread 3 state: waiting for i/o request (write thread)
Pending normal aio reads: 0, aio writes: 0,
ibuf aio reads: 0, log i/o's: 0, sync i/o's: 0
Pending flushes (fsync) log: 0; buffer pool: 0
26 OS file reads, 14480 OS file writes, 12558 OS fsyncs
0.00 reads/s, 0 avg bytes/read, 0.00 writes/s, 0.00 fsyncs/s
-------------------------------------
INSERT BUFFER AND ADAPTIVE HASH INDEX
-------------------------------------
Ibuf: size 1, free list len 0, seg size 2,
0 inserts, 0 merged recs, 0 merges
Hash table size 4425293, node heap has 125 buffer(s)
0.00 hash searches/s, 0.00 non-hash searches/s
---
LOG
---
Log sequence number 0 664228398
Log flushed up to 0 664228398
Last checkpoint at 0 664228398
0 pending log writes, 0 pending chkp writes
11414 log i/o's done, 0.00 log i/o's/second
----------------------
BUFFER POOL AND MEMORY
----------------------
Total memory allocated 1522989570; in additional pool allocated 37001344
Dictionary memory allocated 26781864
Buffer pool size 65536
Free buffers 31566
Database pages 33845
Modified db pages 0
Pending reads 0
Pending writes: LRU 0, flush list 0, single page 0
Pages read 64, created 33781, written 46141
0.00 reads/s, 0.00 creates/s, 0.00 writes/s
No buffer pool page gets since the last printout
--------------
ROW OPERATIONS
--------------
0 queries inside InnoDB, 0 queries in queue
1 read views open inside InnoDB
Main thread process no. 11020, id 2320694128, state: sleeping
Number of rows inserted 2616459, updated 0, deleted 0, read 0
0.00 inserts/s, 0.00 updates/s, 0.00 deletes/s, 0.00 reads/s
----------------------------
END OF INNODB MONITOR OUTPUT
===========================
JKB

--
Si votre demande me parvient sur carte perforée, je titiouaillerai très
volontiers une réponse...
=> http://grincheux.de-charybde-en-scylla.fr
Sebastien Lardiere
Le #23265791
On 04/06/2011 08:24 PM, JKB wrote:

Il semblerait en effet que la définition de ce qu'est une clé étrangère
soit différente en fonction des versions de MySQL. Ici, il est possible
qu'il manque un index sur la table cible ; mais peut-être que la commande



Je ne vois pas comment. Les deux mysql sont indentiques et la table
maître ne pose pas de problème...



Je ne vois pas non plus, mais MySQL n'a pas fini de me suprendre …


show innodb status;



==================================== > 110406 20:21:33 INNODB MONITOR OUTPUT
==================================== [...]
------------------------
LATEST FOREIGN KEY ERROR
------------------------
110406 8:15:10 Error in foreign key constraint of table
/QRTZ_BLOB_TRIGGERS:
FOREIGN KEY (`TRIGGER_NAME`, `TRIGGER_GROUP`) REFERENCES
`QRTZ_TRIGGERS` (`TRIGGER_NAME`, `TRIGGER_GROUP`) ) ENGINE=InnoDB
DEFAULT CHARSET=utf8:
Cannot resolve table name close to:
(`TRIGGER_NAME`, `TRIGGER_GROUP`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8



Ah, il dit qu'il ne trouve pas la table. Est-ce qu'elle existe ? Et si
oui, est-elle bien en InnoDB ?

--
Sébastien
JKB
Le #23266561
Le Thu, 07 Apr 2011 13:50:33 +0200,
Sebastien Lardiere
On 04/06/2011 08:24 PM, JKB wrote:

Il semblerait en effet que la définition de ce qu'est une clé étrangère
soit différente en fonction des versions de MySQL. Ici, il est possible
qu'il manque un index sur la table cible ; mais peut-être que la commande



Je ne vois pas comment. Les deux mysql sont indentiques et la table
maître ne pose pas de problème...



Je ne vois pas non plus, mais MySQL n'a pas fini de me suprendre …



Je vois que je ne suis pas le seul ;-)


show innodb status;



==================================== >> 110406 20:21:33 INNODB MONITOR OUTPUT
==================================== > [...]
------------------------
LATEST FOREIGN KEY ERROR
------------------------
110406 8:15:10 Error in foreign key constraint of table
/QRTZ_BLOB_TRIGGERS:
FOREIGN KEY (`TRIGGER_NAME`, `TRIGGER_GROUP`) REFERENCES
`QRTZ_TRIGGERS` (`TRIGGER_NAME`, `TRIGGER_GROUP`) ) ENGINE=InnoDB
DEFAULT CHARSET=utf8:
Cannot resolve table name close to:
(`TRIGGER_NAME`, `TRIGGER_GROUP`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8



Ah, il dit qu'il ne trouve pas la table. Est-ce qu'elle existe ? Et si
oui, est-elle bien en InnoDB ?



Oui, elle existe. Entre temps, j'ai fait un méchant tar pour copier
physiquement le maître sur l'esclave. Mais j'aurais bien aimé
comprendre...

JKB

--
Si votre demande me parvient sur carte perforée, je titiouaillerai très
volontiers une réponse...
=> http://grincheux.de-charybde-en-scylla.fr
Sebastien Lardiere
Le #23268651
On 04/07/2011 07:13 PM, JKB wrote:


Je ne vois pas non plus, mais MySQL n'a pas fini de me suprendre …



Je vois que je ne suis pas le seul ;-)




C'est bien la seule chose qui soit constant dans cet outil, la capacité
à surprendre …

Ah, il dit qu'il ne trouve pas la table. Est-ce qu'elle existe ? Et si
oui, est-elle bien en InnoDB ?



Oui, elle existe. Entre temps, j'ai fait un méchant tar pour copier
physiquement le maître sur l'esclave. Mais j'aurais bien aimé
comprendre...




Et donc, ça fonctionne, là ? S'il n'y a pas de problème, pas besoin de
solutions ( ou l'inverse, je ne sais plus … )

--
Sébastien
JKB
Le #23268721
Le Fri, 08 Apr 2011 16:29:20 +0200,
Sebastien Lardiere
On 04/07/2011 07:13 PM, JKB wrote:


Je ne vois pas non plus, mais MySQL n'a pas fini de me suprendre …



Je vois que je ne suis pas le seul ;-)




C'est bien la seule chose qui soit constant dans cet outil, la capacité
à surprendre …

Ah, il dit qu'il ne trouve pas la table. Est-ce qu'elle existe ? Et si
oui, est-elle bien en InnoDB ?



Oui, elle existe. Entre temps, j'ai fait un méchant tar pour copier
physiquement le maître sur l'esclave. Mais j'aurais bien aimé
comprendre...




Et donc, ça fonctionne, là ? S'il n'y a pas de problème, pas besoin de
solutions ( ou l'inverse, je ne sais plus … )



Oui, ça fonctionne parfaitement (enfin, pour un MySQL, il ne faut
pas trop regarder dans les détails). En tout cas, la réplication est
correcte.

JKB

--
Si votre demande me parvient sur carte perforée, je titiouaillerai très
volontiers une réponse...
=> http://grincheux.de-charybde-en-scylla.fr
Publicité
Poster une réponse
Anonyme