¿Replicar RDS-MySQL a un host que no sea de Amazon?

16

Tengo una base de datos MySQL (5.1) bastante grande que se ejecuta en Amazon como una instancia de RDS. Estoy trabajando en migrarlo fuera de Amazon. Para hacerlo sin problemas, me gustaría configurar el nuevo hardware como una réplica de solo lectura de la instancia de RDS.

Sé que RDS admite la replicación dentro de RDS. ¿Hay alguna forma de configurarlo para que se replique en un host que no está en RDS?

Leopd
fuente
¿Todos sus datos son InnoDB?
RolandoMySQLDBA
Digamos "sí, todo está en innodb", lo suficientemente cerca de cierto para este foro. ;)
Leopd

Respuestas:

3

Si tienes el siguiente escenario

  • todos tus datos son innodb
  • Tiene el registro binario habilitado en RDS

podrías crear un usuario en RDS como este

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

Si Amazon no permite '%' para el nombre de host, necesitará una dirección IP pública específica

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

A continuación, mysqldump los datos de RDS como una sola transacción

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

Ejecute el comando CHANGE MASTER TO con leopd@'xxx.xx.xx.xxxx 'como usuario (xxx.xx.xx.xxxx es la dirección IP de 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;

Cargue los datos en un nuevo servidor. No se preocupe por master_log_file = 'slsnbj' y master_log_pos = 1. La línea 22 del volcado tendrá el archivo de registro y la posición correctos.

Ejecute START SLAVE; en el nuevo servidor

Debería comenzar a funcionar. Puede que tenga que preocuparse por las consideraciones de firewall.

Darle una oportunidad !!!

ACTUALIZACIÓN 2012-03-23 ​​17:11 EDT

Solo te queda una oportunidad. Vea si puede establecer ese último privilegio con esto:

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

Quizás esto se esté bloqueando para los usuarios que tienen% en la columna de host de mysql.user.

Es posible que necesite crear otro usuario con una IP pública rígida como sugerí anteriormente

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

Es posible que los esclavos de replicación en RDS también sean RDS.

RolandoMySQLDBA
fuente
Cuando GRANT REPLICATION SLAVEERROR 1045 (28000): Access denied for user 'root'@'%' (using password: YES)
inicia
Por favor corre SHOW GRANTS. ¿Tienes todos los privilegios en . ?
RolandoMySQLDBA
Esto se ejecuta como el usuario root RDS, que tiene todos los privilegios que son posibles: 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. Parece que Amazon simplemente no permite esto.
Leopd
Actualicé mi respuesta en base a tu último comentario ...
RolandoMySQLDBA el
1
@Radek el póster original (OP) lo respondió el 23 de marzo: dba.stackexchange.com/a/15492/877
RolandoMySQLDBA