Реплицировать RDS-MySQL на хост, не принадлежащий Amazon?

16

У меня довольно большая база данных MySQL (5.1), работающая в Amazon как экземпляр RDS. Я работаю над переносом его из Amazon. Для этого я бы хотел настроить новое оборудование как реплику только для чтения экземпляра RDS.

Я знаю, что RDS поддерживает репликацию в RDS. Есть ли способ настроить его для репликации на хост, которого нет в RDS?

Leopd
источник
Все ваши данные InnoDB ???
RolandoMySQLDBA
Допустим, «да, это все в innodb» - достаточно близко к истине для этого форума. ;)
Леопд

Ответы:

3

Если у вас есть следующий сценарий

  • все ваши данные innodb
  • у вас включено двоичное ведение журнала на RDS

Вы можете создать пользователя в RDS, как это

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

Если Amazon не разрешает использовать «%» для имени хоста, вам потребуется конкретный публичный IP-адрес

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

Затем mysqldump данные из RDS в виде одной транзакции

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

Запустите команду CHANGE MASTER TO, используя leopd@'xxx.xx.xx.xxxx 'в качестве пользователя (xxx.xx.xx.xxxx - это 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;

Загрузите данные на новый сервер. Не беспокойтесь о master_log_file = 'slsnbj' и master_log_pos = 1. Строка 22 дампа будет иметь правильный файл журнала и положение.

Запустите START SLAVE; на новом сервере

Это должно начать работать. Возможно, вам придется беспокоиться о соображениях брандмауэра.

Попробуйте!

ОБНОВЛЕНИЕ 2012-03-23 ​​17:11 ПО ВОСТОЧНОМУ ВРЕМЕНИ

У вас есть только один шанс. Посмотрите, можете ли вы установить эту последнюю привилегию с помощью этого:

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

Возможно, это блокируется для пользователей, которые имеют% в столбце хоста mysql.user.

Вам может потребоваться создать другого пользователя с жестким публичным IP-адресом, как я предлагал ранее

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

Возможно, что ведомые устройства репликации в RDS также должны быть RDS.

RolandoMySQLDBA
источник
При входе в систему с правами администратора, GRANT REPLICATION SLAVEприводитERROR 1045 (28000): Access denied for user 'root'@'%' (using password: YES)
Leopd
Пожалуйста, беги SHOW GRANTS. У вас есть все привилегии на . ?
RolandoMySQLDBA
Это работает как корневой пользователь RDS, который имеет все привилегии, которые можно: 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. Похоже, Amazon просто не позволяет этого.
Леопд
Обновил мой ответ на основании вашего последнего комментария ...
RolandoMySQLDBA
1
@Radek, оригинальный постер (OP) ответил на него 23 марта: dba.stackexchange.com/a/15492/877
RolandoMySQLDBA