Répliquer RDS-MySQL sur un hôte non amazonien?

16

J'ai une base de données MySQL (5.1) assez grande fonctionnant dans Amazon en tant qu'instance RDS. Je travaille sur sa migration hors d'Amazon. Pour cela, j'aimerais configurer le nouveau matériel en tant que réplique en lecture seule de l'instance RDS.

Je sais que RDS prend en charge la réplication dans RDS. Existe-t-il un moyen de le configurer pour qu'il se réplique sur un hôte qui n'est pas dans RDS?

Leopd
la source
Toutes vos données sont-elles InnoDB ???
RolandoMySQLDBA
Disons "oui, tout est dans innodb" - assez proche de vrai pour ce forum. ;)
Leopd

Réponses:

3

Si vous avez le scénario suivant

  • toutes vos données sont innodb
  • la journalisation binaire est activée sur RDS

vous pouvez créer un utilisateur dans RDS comme celui-ci

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

Si Amazon n'autorise pas «%» pour le nom d'hôte, vous aurez besoin d'une adresse IP publique spécifique

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

Ensuite, mysqldump les données de RDS en une seule transaction

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

Exécutez la commande CHANGE MASTER TO en utilisant leopd@'xxx.xx.xx.xxxx 'en tant qu'utilisateur (xxx.xx.xx.xxxx est l'adresse 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;

Chargez les données sur un nouveau serveur. Ne vous inquiétez pas pour master_log_file = 'slsnbj' et master_log_pos = 1. La ligne 22 du vidage aura le fichier journal et la position corrects.

Exécutez START SLAVE; sur le nouveau serveur

Il devrait commencer à fonctionner. Vous devrez peut-être vous soucier des considérations relatives au pare-feu.

Essaie !!!

MISE À JOUR 2012-03-23 ​​17:11 EDT

Il ne vous reste qu'une seule chance. Voyez si vous pouvez définir ce dernier privilège avec ceci:

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

Peut-être que cela est bloqué pour les utilisateurs qui ont% dans la colonne hôte de mysql.user.

Vous devrez peut-être créer un autre utilisateur avec une adresse IP publique dure comme je l'ai suggéré plus tôt

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

Il est possible que les esclaves de réplication dans RDS doivent également être RDS.

RolandoMySQLDBA
la source
Une fois connecté en tant que root, les GRANT REPLICATION SLAVErésultats sont obtenusERROR 1045 (28000): Access denied for user 'root'@'%' (using password: YES)
Leopd
Veuillez courir SHOW GRANTS. Avez-vous tous les privilèges ? ?
RolandoMySQLDBA
Ceci est en cours d' exécution en tant qu'utilisateur racine RDS, qui a tous les privilèges qui sont possibles: 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. On dirait qu'Amazon ne le permet tout simplement pas.
Leopd
Mise à jour de ma réponse en fonction de votre dernier commentaire ...
RolandoMySQLDBA
1
@Radek l'affiche originale (OP) a répondu le 23 mars: dba.stackexchange.com/a/15492/877
RolandoMySQLDBA