RDS-MySQL auf einen Nicht-Amazon-Host replizieren?


16

Ich habe eine ziemlich große MySQL (5.1) -Datenbank, die in Amazon als RDS-Instanz ausgeführt wird. Ich arbeite daran, es von Amazon zu migrieren. Um das reibungslos zu machen, möchte ich die neue Hardware als schreibgeschütztes Replikat der RDS-Instanz einrichten.

Ich weiß, dass RDS die Replikation innerhalb von RDS unterstützt. Gibt es eine Möglichkeit, es für die Replikation auf einem Host zu konfigurieren, der sich nicht in RDS befindet?


Sind alle Ihre Daten InnoDB ???
RolandoMySQLDBA

Sagen wir "Ja, es ist alles in Innodb" - nah genug, um für dieses Forum wahr zu sein. ;)
Leopd

Antworten:




3

Wenn Sie das folgende Szenario haben

  • Alle Ihre Daten sind innodb
  • Sie haben die binäre Protokollierung für RDS aktiviert

Sie können einen Benutzer in RDS wie folgt erstellen

GRANT REPLICATION SLAVE,REPLICATION CLIENT ON *.* TO 'leopd'@'%' IDENTIFIED BY 'repl_password'; 

Wenn Amazon '%' für den Hostnamen nicht zulässt, benötigen Sie eine bestimmte öffentliche IP-Adresse

GRANT REPLICATION SLAVE,REPLICATION CLIENT ON *.* TO 'leopd'@'xxx.xx.xx.xxx';

Als nächstes mysqldump die Daten aus RDS als einzelne Transaktion

mysqldump -u... -p... --single-transaction --master-data=1 --all-databases --routines --triggers > /root/MySQLData.sql

Führen Sie den Befehl CHANGE MASTER TO mit leopd@'xxx.xx.xx.xxxx 'als Benutzer aus (xxx.xx.xx.xxxx ist die IP-Adresse von RDS).

CHANGE MASTER TO
master_host = 'xxx.xx.xx.xxxx',
master_port = 3306,
master_user = 'leopd',
master_passwowrd = 'repl_pass'
master_log_file='slsnbj',
master_log_pos=1;

Laden Sie die Daten auf einen neuen Server. Machen Sie sich keine Sorgen um master_log_file = 'slsnbj' und master_log_pos = 1. Zeile 22 des Dumps enthält die richtige Protokolldatei und Position.

START SLAVE ausführen; auf dem neuen Server

Es sollte funktionieren. Möglicherweise müssen Sie sich über Firewall-Überlegungen Gedanken machen.

Versuche es !!!

UPDATE 2012-03-23 ​​17:11 EDT

Sie haben nur noch eine Chance. Sehen Sie, ob Sie dieses letzte Privileg folgendermaßen festlegen können:

UPDATE mysql.user SET Repl_slave_priv = 'Y' WHERE user='root' AND host='%';
FLUSH PRIVILEGES;

Möglicherweise wird dies für Benutzer blockiert, die% in der Hostspalte von mysql.user haben.

Möglicherweise müssen Sie einen anderen Benutzer mit einer festen öffentlichen IP-Adresse erstellen, wie ich zuvor vorgeschlagen habe

GRANT REPLICATION SLAVE,REPLICATION CLIENT ON *.* TO 'leopd'@'xxx.xx.xx.xxx';

Es ist möglich, dass Replikations-Slaves in RDS auch RDS sein müssen.


Wenn GRANT REPLICATION SLAVEERROR 1045 (28000): Access denied for user 'root'@'%' (using password: YES)
du

Bitte lauf SHOW GRANTS. Hast du alle Privilegien an . ?
RolandoMySQLDBA

Diese läuft als RDS - Root - Benutzer, die alle Privilegien hat , die möglich sind: GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, RELOAD, PROCESS, REFERENCES, INDEX, ALTER, SHOW DATABASES, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, REPLICATION CLIENT, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, CREATE USER, EVENT, TRIGGER ON *.* TO 'root'@'%' IDENTIFIED BY PASSWORD <snip> WITH GRANT OPTION. Sieht so aus, als würde Amazon dies einfach nicht zulassen.
Leopd

Meine Antwort wurde basierend auf Ihrem letzten Kommentar aktualisiert ...
RolandoMySQLDBA

1
@Radek, das Originalposter (OP) antwortete am 23. März: dba.stackexchange.com/a/15492/877
RolandoMySQLDBA
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.