Повторити RDS-MySQL на хості, що не є Amazon?


16

У мене досить велика база даних MySQL (5.1), що працює в Amazon як екземпляр RDS. Я працюю над міграцією її з Амазонії. Щоб зробити це плавно, я хотів би встановити нове обладнання як репліку для екземпляра RDS лише для читання.

Я знаю, що RDS підтримує реплікацію в RDS. Чи є якийсь спосіб налаштувати його на реплікацію на хост, якого немає в RDS?


Чи всі ваші дані 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';

Далі, mysqld викиньте дані з 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 EDT

У вас залишився лише один шанс. Перевірте, чи можете ви встановити останню привілей за допомогою цього:

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.


Якщо увійти в систему як root, 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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.