Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Cadangkan MySQL Amazon RDS

RDS bahkan tidak mengizinkan pengguna master SUPER hak istimewa, dan ini diperlukan untuk menjalankan FLUSH TABLES WITH READ LOCK . (Ini adalah keterbatasan RDS yang disayangkan).

Pernyataan gagal dihasilkan oleh --master-data opsi, yang tentu saja diperlukan jika Anda ingin dapat mempelajari koordinat binlog yang tepat di mana pencadangan dimulai. FLUSH TABLES WITH READ LOCK memperoleh kunci baca global pada semua tabel, yang memungkinkan mysqldump untuk START TRANSACTION WITH CONSISTENT SNAPSHOT (seperti halnya dengan --single-transaction ) lalu SHOW MASTER STATUS untuk mendapatkan koordinat log biner, setelah itu melepaskan kunci baca global karena memiliki transaksi yang akan menjaga data yang terlihat dalam keadaan konsisten dengan posisi log tersebut.

RDS merusak mekanisme ini dengan menolak SUPER hak istimewa dan tidak memberikan solusi yang jelas.

Ada beberapa opsi peretasan yang tersedia untuk mengatasi ini dengan benar, tidak ada yang menarik:

  • melakukan backup selama periode lalu lintas rendah. Jika koordinat binlog tidak berubah antara saat Anda memulai pencadangan dan setelah pencadangan mulai menulis data ke file keluaran atau server tujuan (dengan asumsi Anda menggunakan --single-transaction ) maka ini akan berhasil karena Anda tahu koordinatnya tidak berubah saat proses sedang berjalan.

  • amati posisi binlog pada master tepat sebelum memulai pencadangan, dan gunakan koordinat ini dengan CHANGE MASTER TO . Jika binlog_format master Anda diatur ke ROW maka ini akan berfungsi, meskipun Anda mungkin harus melewati beberapa kesalahan awal, tetapi tidak harus memiliki kesalahan selanjutnya. Ini berfungsi karena replikasi berbasis baris sangat deterministik dan akan berhenti jika mencoba memasukkan sesuatu yang sudah ada atau menghapus sesuatu yang sudah hilang. Setelah melewati kesalahan, Anda akan berada di koordinat binlog yang sebenarnya di mana snapshot yang konsisten sebenarnya dimulai.

  • seperti pada item sebelumnya, tetapi, setelah memulihkan cadangan, coba tentukan posisi yang benar dengan menggunakan mysqlbinlog --base64-output=decode-rows --verbose untuk membaca binlog master pada koordinat yang Anda peroleh, memeriksa slave baru Anda untuk melihat peristiwa mana yang harus telah dieksekusi sebelum snapshot benar-benar dimulai, dan menggunakan koordinat yang ditentukan dengan cara ini untuk CHANGE MASTER TO .

  • gunakan proses eksternal untuk mendapatkan kunci baca pada setiap tabel di server, yang akan menghentikan semua penulisan; perhatikan bahwa posisi binlog dari SHOW MASTER STATUS telah berhenti bertambah, mulai pencadangan, dan lepaskan kunci tersebut.

Jika Anda menggunakan salah satu dari pendekatan ini selain mungkin yang terakhir, sangat penting bagi Anda untuk melakukan perbandingan tabel untuk memastikan bahwa slave Anda identik dengan master setelah dijalankan. Jika Anda menemukan kesalahan replikasi berikutnya... maka itu tidak terjadi.

Mungkin opsi teraman -- tetapi juga mungkin yang paling menjengkelkan karena sepertinya itu tidak perlu -- adalah memulai dengan membuat replika baca RDS dari master RDS Anda. Setelah selesai dan disinkronkan ke master, Anda dapat menghentikan replikasi pada replika baca RDS dengan menjalankan prosedur tersimpan yang disediakan RDS, CALL mysql.rds_stop_replication yang diperkenalkan di RDS 5.6.13 dan 5.5.33 yang tidak memerlukan SUPER hak istimewa.

Dengan slave replika RDS dihentikan, ambil mysqldump Anda dari replika baca RDS, yang sekarang akan memiliki kumpulan data yang tidak berubah sebagai kumpulan koordinat master tertentu. Pulihkan cadangan ini ke slave off-site Anda lalu gunakan koordinat master replika baca RDS dari SHOW SLAVE STATUS Exec_Master_Log_Pos dan Relay_Master_Log_File sebagai CHANGE MASTER TO . Anda koordinat.

Nilai yang ditampilkan di Exec_Master_Log_Pos pada budak adalah awal dari transaksi berikutnya atau acara untuk diproses , dan di situlah budak baru Anda perlu mulai membaca master.

Kemudian Anda dapat menonaktifkan replika baca RDS setelah slave eksternal Anda aktif dan berjalan.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Menerapkan struktur data hierarkis dalam database

  2. Konfigurasikan kumpulan koneksi GlassFish JDBC untuk menangani failover Amazon RDS Multi-AZ

  3. Jenis kolom apa yang harus digunakan untuk menyimpan data serial dalam db mysql?

  4. MySQL Workbench tidak menampilkan hasil kueri

  5. MySQL memilih tanggal yang diformat dari bidang milidetik