ทำซ้ำ RDS-MySQL ไปยังโฮสต์ที่ไม่ใช่อเมซอนหรือไม่


16

ฉันมีฐานข้อมูล MySQL ขนาดใหญ่พอสมควร (5.1) ที่ทำงานใน Amazon เป็นอินสแตนซ์ของ RDS ฉันกำลังทำงานเพื่อย้ายมันออกจากอเมซอน ในการทำเช่นนั้นได้อย่างราบรื่นฉันต้องการตั้งค่าฮาร์ดแวร์ใหม่เป็นแบบจำลอง RDS แบบอ่านอย่างเดียว

ฉันรู้ว่า RDS รองรับการจำลองแบบภายใน RDS มีวิธีการกำหนดค่าให้ทำซ้ำไปยังโฮสต์ที่ไม่ได้อยู่ใน RDS หรือไม่?


ข้อมูลทั้งหมดของคุณคือ InnoDB หรือไม่?
RolandoMySQLDBA

สมมติว่า "ใช่มันคือทั้งหมดใน innodb" - ใกล้มากพอที่จะเป็นจริงสำหรับฟอรัมนี้ ;)
Leopd

คำตอบ:



8

ดูเหมือนว่า Amazon ได้เลือกที่จะห้ามไม่ให้ทำสิ่งนี้ในตอนนี้:

https://forums.aws.amazon.com/thread.jspa?threadID=46377&tstart=0


ในตอนท้ายของกระทู้ยืนยันว่ามี 5.6 เป็นไปได้และชี้ไปที่โพสต์บล็อกนี้: ruempler.eu/2013/07/07/ …
Diego F. Durán

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 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 ไม่อนุญาต
Leopd

อัปเดตคำตอบของฉันตามความคิดเห็นล่าสุดของคุณ ...
RolandoMySQLDBA

1
@ Radek โปสเตอร์ต้นฉบับ (OP) ตอบกลับเมื่อวันที่ 23 มีนาคม: dba.stackexchange.com/a/15492/877
RolandoMySQLDBA
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.