Replicar o RDS-MySQL em um host que não seja da Amazon?


16

Eu tenho um banco de dados MySQL (5.1) bastante grande sendo executado na Amazon como uma instância do RDS. Estou trabalhando na migração para fora da Amazon. Para fazer isso sem problemas, gostaria de configurar o novo hardware como uma réplica somente leitura da instância do RDS.

Eu sei que o RDS suporta replicação no RDS. Existe alguma maneira de configurá-lo para replicar para um host que não esteja no RDS?


Todos os seus dados são InnoDB ???
RolandoMySQLDBA 22/03

Digamos "sim, está tudo no innodb" - próximo o suficiente para ser verdade neste fórum. ;)
Leopd 23/03

Respostas:




3

Se você tiver o seguinte cenário

  • todos os seus dados são innodb
  • você tem o log binário ativado no RDS

você pode criar um usuário no RDS como este

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

Se a Amazon não permitir '%' para o nome do host, você precisará de um endereço IP público específico

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

Em seguida, o mysqldump extrai os dados do RDS como uma única transação

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

Execute o comando CHANGE MASTER TO usando leopd@'xxx.xx.xx.xxxx 'como o usuário (xxx.xx.xx.xxxx é o endereço IP do 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;

Carregue os dados em um novo servidor. Não se preocupe com o master_log_file = 'slsnbj' e o master_log_pos = 1. A linha 22 do despejo terá o arquivo de log e a posição corretos.

Execute START SLAVE; no novo servidor

Deve começar a funcionar. Talvez você precise se preocupar com considerações de firewall.

De uma chance !!!

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

Você só tem uma chance. Veja se você pode definir esse último privilégio com isso:

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

Talvez isso esteja sendo bloqueado para usuários que possuem% na coluna host do mysql.user.

Pode ser necessário criar outro usuário com um IP público rígido, como sugeri anteriormente

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

É possível que os escravos de replicação no RDS também devam ser RDS.


Quando logado como root, GRANT REPLICATION SLAVE resulta emERROR 1045 (28000): Access denied for user 'root'@'%' (using password: YES)
Leopd 23/03

Por favor corra SHOW GRANTS. Você tem todos os privilégios ativados ??
RolandoMySQLDBA 23/03

Isso está sendo executado como usuário raiz do RDS, que possui todos os privilégios possíveis: 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 a Amazon simplesmente não permite isso.
Leopd


11
@Radek, o pôster original (OP) respondeu em 23 de março: dba.stackexchange.com/a/15492/877
RolandoMySQLDBA
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.