Risposte:
In base alla progettazione, un processo mysqld non può ascoltare contemporaneamente due master diversi.
Il comando CAMBIA MASTER TO consente solo di impostare un master come sorgente da leggere.
Per emularlo, dovresti alternare tra i due Master in modo programmatico. Come si fa a farlo ?
Ecco l'idea di base
Configura la replica da M1 a S1 e quindi da M2 a S1 in questo modo
Ogni volta che passi da un Master a un altro, devi registrare due valori da SHOW SLAVE STATUS\G
Questi due valori rappresentano l'ultima istruzione SQL che proveniva dal Master e che doveva essere eseguita sullo Slave.
C'è una grande cautela: fintanto che M1 e M2 stanno aggiornando database reciprocamente esclusivi, questo algoritmo dovrebbe andare bene.
La soluzione di Rolando ha molti avvertimenti. Il primo essendo uno stream di replica non si replica necessariamente mentre l'altro funziona. Questo ti darà periodi di tempo in cui lo schiavo non è sincronizzato. Ora devi giocare un delicato gesto di bilanciamento per assicurarti che ognuno abbia abbastanza tempo per recuperare quando ha il suo "turno".
Come descritto, devi anche ricoprire il ruolo di custode delle posizioni dei registri per tornare a. Questo sembra davvero errato, aprendo la finestra per dati mancanti o incoerenti o addirittura rompendo la replica quando va storto (o causato da un errore "off by one" nella posizione del registro)
Consiglierei di eseguire più istanze mysql. Non c'è nulla che ti impedisca di eseguire due o più mysql sulla stessa macchina. Naturalmente non possono entrambi operare sulla stessa porta. Non vedo davvero questo come un problema, poiché ogni client e libreria ti consente di specificare qualcosa di diverso da 3306.
Basta specificare port = 3307 (o qualunque altra cosa in uno dei file .cnf).
È inoltre necessario assicurarsi che i pool di buffer configurati individualmente e le altre configurazioni di memoria non siano in contrasto tra loro. Questo è in realtà un vantaggio, poiché è possibile ottimizzare con maggiore precisione tali impostazioni in base ai requisiti specifici dei singoli database che vengono replicati.
In questo modo hai solo due flussi di replica in esecuzione nello stesso server; mai dietro, nessun libro richiesto, nessuno script di "scambio" richiesto.
Il fan in (replica multi-source) sarà supportato da MySQL 5.7.
Una versione lab è disponibile qui: http://labs.mysql.com/
È possibile utilizzare MariaDB che può essere utilizzato come sostituto sul posto per MySql. Lo supporta dalla versione 10.2
Il problema con il supporto di Mysql 5.7 è la necessità di GTID, il che significa che anche il master DEVE essere cambiato, nel caso di MariaDb non è così.
Esempio / HowTo link: http://www.skysql.com/blogs/dean-ellis/multi-source-replication-mariadb-100