Replikować RDS-MySQL na hoście innym niż Amazon?

16

Mam dość dużą bazę danych MySQL (5.1) działającą w Amazon jako instancja RDS. Pracuję nad przeniesieniem go z Amazon. Aby to zrobić płynnie, chciałbym skonfigurować nowy sprzęt jako replikę instancji RDS tylko do odczytu.

Wiem, że RDS obsługuje replikację w ramach RDS. Czy istnieje sposób skonfigurowania replikacji na hoście, który nie jest w RDS?

Leopd
źródło
Czy wszystkie twoje dane InnoDB ???
RolandoMySQLDBA
Powiedzmy „tak, to wszystko w innodb” - wystarczająco blisko, aby było prawdziwe dla tego forum. ;)
Leopd

Odpowiedzi:

3

Jeśli masz następujący scenariusz

  • wszystkie twoje dane są innodb
  • masz włączone rejestrowanie binarne na RDS

możesz utworzyć użytkownika w RDS w ten sposób

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

Jeśli Amazon nie zezwala na „%” dla nazwy hosta, potrzebny będzie konkretny publiczny adres IP

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

Następnie mysqldump dane z RDS jako pojedynczą transakcję

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

Uruchom komendę CHANGE MASTER TO, używając jako adresu użytkownika leopd@'xxx.xx.xx.xxxx (xxx.xx.xx.xxxx to adres IP 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;

Załaduj dane na nowy serwer. Nie przejmuj się plikiem master_log_file = 'slsnbj' i master_log_pos = 1. Wiersz 22 zrzutu będzie miał poprawny plik dziennika i położenie.

Uruchom START SLAVE; na nowym serwerze

Powinno zacząć działać. Być może będziesz musiał się martwić o względy zapory.

Spróbuj !!!

AKTUALIZACJA 23.03.2012 17:11 EDT

Masz tylko jedną szansę. Sprawdź, czy możesz ustawić ten ostatni przywilej za pomocą:

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

Być może jest to blokowane dla użytkowników, którzy mają% w kolumnie hosta mysql.user.

Może być konieczne utworzenie innego użytkownika z twardym publicznym adresem IP, jak zasugerowałem wcześniej

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

Możliwe, że urządzenia slave do replikacji w RDS również muszą być RDS.

RolandoMySQLDBA
źródło
Po zalogowaniu jako root, GRANT REPLICATION SLAVEwynikiERROR 1045 (28000): Access denied for user 'root'@'%' (using password: YES)
Leopd
Proszę biegnij SHOW GRANTS. Czy masz wszystkie przywileje . ?
RolandoMySQLDBA
To działa jako użytkownik root RDS, który ma wszystkie przywileje, które są możliwe: 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. Wygląda na to, że Amazon po prostu na to nie pozwala.
Leopd
Zaktualizowałem moją odpowiedź w oparciu o twój ostatni komentarz ...
RolandoMySQLDBA
1
@Radek, oryginalny plakat (OP), odpowiedział na nie 23 marca: dba.stackexchange.com/a/15492/877
RolandoMySQLDBA