Replika RDS-MySQL ke host non-amazon?

16

Saya memiliki database MySQL (5.1) yang cukup besar yang berjalan di Amazon sebagai instance RDS. Saya sedang berusaha memigrasikannya dari Amazon. Untuk melakukannya dengan lancar saya ingin mengatur perangkat keras baru sebagai replika read-only dari instance RDS.

Saya tahu RDS mendukung replikasi dalam RDS. Apakah ada cara untuk mengkonfigurasinya untuk mereplikasi ke host yang tidak ada dalam RDS?

Leopd
sumber
Apakah semua data Anda InnoDB ???
RolandoMySQLDBA
Katakanlah "ya, semuanya ada di innodb" - cukup dekat untuk berlaku untuk forum ini. ;)
Leopd

Jawaban:

3

Jika Anda memiliki skenario berikut ini

  • semua data Anda adalah innodb
  • Anda mengaktifkan pencatatan biner pada RDS

Anda bisa membuat pengguna di RDS seperti ini

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

Jika Amazon tidak mengizinkan '%' untuk nama host, Anda akan memerlukan alamat IP publik tertentu

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

Selanjutnya, mysqldump data dari RDS sebagai satu transaksi

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

Jalankan perintah CHANGE MASTER TO TO menggunakan leopd@'xxx.xx.xx.xxxx 'sebagai pengguna (xxx.xx.xx.xxxx adalah alamat 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;

Muat data ke server baru. Jangan khawatir tentang master_log_file = 'slsnbj' dan master_log_pos = 1. Baris 22 dari dump akan memiliki file dan posisi log yang benar.

Jalankan MULAI BUDAK; di server baru

Seharusnya mulai bekerja. Anda mungkin harus khawatir tentang pertimbangan firewall.

Cobalah !!!

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

Anda hanya memiliki satu peluang tersisa. Lihat apakah Anda dapat mengatur hak istimewa terakhir dengan ini:

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

Mungkin ini diblokir untuk pengguna yang memiliki% di kolom host mysql.user.

Anda mungkin perlu membuat pengguna lain dengan IP publik yang keras seperti yang saya sarankan sebelumnya

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

Mungkin replikasi budak di RDS juga harus RDS.

RolandoMySQLDBA
sumber
Ketika login sebagai root, GRANT REPLICATION SLAVEmenghasilkanERROR 1045 (28000): Access denied for user 'root'@'%' (using password: YES)
Leopd
Tolong jalankan SHOW GRANTS. Apakah Anda memiliki semua hak istimewa di . ?
RolandoMySQLDBA
Ini berjalan sebagai user root RDS, yang memiliki semua hak istimewa yang mungkin: 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. Sepertinya Amazon tidak mengizinkan ini.
Leopd
Memperbarui jawaban saya berdasarkan komentar terakhir Anda ...
RolandoMySQLDBA
1
@Radek the original poster (OP) menjawabnya kembali pada tanggal 23 Maret: dba.stackexchange.com/a/15492/877
RolandoMySQLDBA