Lompati ke konten utama

Browser ini sudah tidak didukung.

Mutakhirkan ke Microsoft Edge untuk memanfaatkan fitur, pembaruan keamanan, dan dukungan teknis terkini.

Cara mengonfigurasikan Replikasi Data-in Azure Database for MySQL dalam Replikasi

  • Artikel
  • 10/05/2022
  • 10 menit untuk membaca

Dalam artikel ini

BERLAKU UNTUK:

Azure Database for MySQL - Server Tunggal

Penting

Azure Database for MySQL - Server Tunggal berada di jalur penghentian. Kami sangat menyarankan Anda untuk meningkatkan ke Azure Database for MySQL - Server Fleksibel. Untuk informasi selengkapnya tentang migrasi ke Azure Database for MySQL - Server Fleksibel, lihat Apa yang terjadi pada server tunggal Azure Database for MySQL?

Artikel ini menjelaskan cara menyiapkan Replikasi Data-in di Azure Database for MySQL dengan mengonfigurasikan server sumber dan replika. Artikel ini menganggap Anda sudah berpengalaman dengan database dan server MySQL.

Catatan

Artikel ini berisi referensi ke istilah slave, istilah yang tidak lagi digunakan Microsoft. Saat istilah dihapus dari perangkat lunak, kami akan menghapusnya dari artikel ini.

Untuk membuat replika di layanan Azure Database for MySQL, Replikasi Data-in menyinkronkan data dari server MySQL sumber lokal, di komputer virtual (VM), atau di layanan database cloud. Replikasi Data-in didasarkan pada replikasi berbasis posisi file log biner (binlog) atau berbasis-GTID asli MySQL. Untuk mempelajari selengkapnya tentang replikasi binlog, lihat Gambaran umum replikasi binlog MySQL.

Tinjau batasan dan persyaratan Replikasi data-in sebelum melakukan langkah-langkah dalam artikel ini.

Membuat instans Server Tunggal Azure Database for MySQL untuk digunakan sebagai replika

  1. Buat instans baru Server Tunggal Azure Database for MySQL (misalnya, replica.mysql.database.azure.com). Lihat Membuat Azure Database for MySQL menggunakan portal Azure untuk pembuatan server. Server ini adalah server "replika" untuk Replikasi Data-in.

    Penting

    Server Azure Database for MySQL harus dibuat dalam tingkat harga Tujuan Umum atau Dioptimalkan Memori karena replikasi data-in hanya didukung dalam tingkatan ini. GTID didukung pada versi 5.7 dan 8.0 dan hanya di server yang mendukung penyimpanan hingga 16 TB (Penyimpanan umum v2).

  2. Buat akun pengguna yang sama dan hak istimewa terkait.

    Akun pengguna tidak direplikasi dari server sumber ke server replika. Jika berencana memberi pengguna akses ke server replika, Anda perlu membuat semua akun dan hak istimewa terkait secara manual di server Azure Database for MySQL yang baru dibuat ini.

  3. Tambahkan alamat IP server sumber ke aturan firewall replika.

    Perbarui aturan firewall menggunakan portal Azure atau Azure CLI.

  4. Opsional - Jika ingin menggunakan Replikasi berbasis GTID dari server sumber ke server replika Azure Database for MySQL, Anda harus mengaktifkan parameter server berikut ini di server Azure Database for MySQL, seperti pada gambar portal di bawah ini:

Mengonfigurasikan server MySQL sumber

Langkah-langkah berikut ini mempersiapkan dan mengonfigurasikan server MySQL yang dihosting secara lokal, di komputer virtual, atau layanan database yang dihosting oleh penyedia cloud lain untuk Replikasi Data-in. Server ini adalah "sumber" untuk Replikasi data-in.

  1. Tinjau persyaratan server sumber sebelum melanjutkan.

  2. Pastikan bahwa server sumber mengizinkan lalu lintas masuk dan keluar pada port 3306, dan memiliki alamat IP publik, DNS dapat diakses secara publik, atau memiliki nama domain yang sepenuhnya memenuhi syarat (FQDN).

    Uji konektivitas ke server sumber dengan mencoba menyambungkan dari alat seperti baris perintah MySQL yang dihosting di komputer lain atau dari Azure Cloud Shell yang tersedia di portal Azure.

    Jika organisasi Anda memiliki kebijakan keamanan yang ketat dan tidak akan mengizinkan semua alamat IP di server sumber mengaktifkan komunikasi dari Azure ke server sumber, Anda mungkin dapat menggunakan perintah di bawah ini untuk menentukan alamat IP server MySQL.

    1. Masuk ke server Azure Database for MySQL menggunakan alat seperti baris perintah MySQL.

    2. Jalankan kueri berikut.

      mysql> SELECT @@global.redirect_server_host;
      

      Di bawah ini adalah beberapa contoh output:

      +-----------------------------------------------------------+
      | @@global.redirect_server_host                             |
      +-----------------------------------------------------------+
      | e299ae56f000.tr1830.westus1-a.worker.database.windows.net |
       +-----------------------------------------------------------+
      
    3. Keluar dari baris perintah MySQL.

    4. Untuk mendapatkan alamat IP, jalankan perintah berikut di utilitas ping:

      ping <output of step 2b>
      

      Contohnya:

      C:\Users\testuser> ping e299ae56f000.tr1830.westus1-a.worker.database.windows.net
      Pinging tr1830.westus1-a.worker.database.windows.net (**11.11.111.111**) 56(84) bytes of data.
      
    5. Konfigurasikan aturan firewall server sumber untuk menyertakan alamat IP yang dikeluarkan pada langkah sebelumnya di port 3306.

      Catatan

      Alamat IP ini mungkin berubah karena operasi pemeliharaan/penyebaran. Metode konektivitas ini hanya untuk pelanggan yang tidak mampu mengizinkan semua alamat IP pada port 3306.

  3. Aktifkan pengelogan biner.

    Periksa apakah pengelogan biner telah diaktifkan pada sumber dengan menjalankan perintah berikut:

    SHOW VARIABLES LIKE 'log_bin';
    

    Jika variabel log_bin dikembalikan dengan nilai "ON", pengelogan biner diaktifkan di server Anda.

    Jika log_bin dikembalikan dengan nilai "OFF" dan server sumber berjalan secara lokal atau di komputer virtual tempat Anda dapat mengakses file konfigurasi (my.cnf), Anda dapat mengikuti langkah-langkah di bawah ini:

    1. Temukan file konfigurasi MySQL (my.cnf) di server sumber. Misalnya: /etc/my.cnf

    2. Buka file konfigurasi untuk mengeditnya dan menemukan bagian mysqld dalam file.

    3. Di bagian mysqld, tambahkan baris berikut:

      log-bin=mysql-bin.log
      
    4. Mulai ulang server sumber MySQL agar perubahan diterapkan.

    5. Setelah server dimulai ulang, verifikasikan bahwa pengelogan biner diaktifkan dengan menjalankan kueri yang sama seperti sebelumnya:

      SHOW VARIABLES LIKE 'log_bin';
      
  4. Konfigurasikan pengaturan server sumber.

    Replikasi Data-in mengharuskan parameter lower_case_table_names konsisten antara server sumber dan replika. Parameter ini adalah 1 secara default di Azure Database for MySQL.

    SET GLOBAL lower_case_table_names = 1;
    

    Opsional - Jika ingin menggunakan Replikasi berbasis GTID, Anda harus memeriksa apakah GTID diaktifkan di server sumber. Anda dapat menjalankan perintah berikut ini terhadap server MySQL sumber untuk melihat apakah gtid_mode adalah ON.

    show variables like 'gtid_mode';
    

    Penting

    Semua server sudah mengatur gtid_mode ke nilai default OFF. Anda tidak perlu mengaktifkan GTID di server MySQL sumber khusus untuk menyiapkan Replikasi Data-in. Jika GTID sudah diaktifkan di server sumber, Anda dapat secara opsional menggunakan replikasi berbasis GTID untuk menyiapkan Replikasi Data-in juga dengan Server Tunggal Azure Database for MySQL. Anda dapat menggunakan replikasi berbasis file untuk menyiapkan replikasi data-in bagi semua server terlepas dari konfigurasi gitd_mode di server sumber.

  5. Buat peran replikasi baru dan siapkan izin.

    Buat akun pengguna pada server sumber yang dikonfigurasi dengan hak istimewa replikasi. Tindakan ini dapat dilakukan melalui perintah SQL atau alat seperti MySQL Workbench. Pertimbangkan apakah Anda berencana untuk mereplikasi dengan SSL, karena ini perlu ditentukan saat membuat pengguna. Lihat dokumentasi MySQL untuk memahami cara menambahkan akun pengguna di server sumber.

    Dalam perintah berikut, peran replikasi baru yang dibuat dapat mengakses sumber dari komputer apa pun, bukan hanya komputer yang menjadi host sumber itu sendiri. Hal ini dilakukan dengan menentukan "[email protected]'%'" dalam perintah buat pengguna. Lihat dokumentasi MySQL untuk mempelajari selengkapnya tentang menentukan nama akun.

    Perintah SQL

    Replikasi dengan SSL

    Untuk meminta SSL bagi semua koneksi pengguna, gunakan perintah berikut untuk membuat pengguna:

    CREATE USER 'syncuser'@'%' IDENTIFIED BY 'yourpassword';
    GRANT REPLICATION SLAVE ON *.* TO ' syncuser'@'%' REQUIRE SSL;
    

    Replikasi tanpa SSL

    Jika SSL tidak diperlukan untuk semua koneksi, gunakan perintah berikut untuk membuat pengguna:

    CREATE USER 'syncuser'@'%' IDENTIFIED BY 'yourpassword';
    GRANT REPLICATION SLAVE ON *.* TO ' syncuser'@'%';
    

    MySQL Workbench

    Untuk membuat peran replikasi di MySQL Workbench, buka panel Pengguna dan Hak Istimewa dari panel Manajemen, lalu pilih Tambahkan Akun.

    Ketikkan nama pengguna ke dalam bidang Nama Masuk.

    Pilih panel Peran Administratif, lalu pilih Slave Replikasi dari daftar Hak Istimewa Global. Kemudian pilih Terapkan untuk membuat peran replikasi.

  6. Atur server sumber ke mode baca-saja.

    Sebelum mulai merekam cadang database, server harus ditempatkan dalam mode baca-saja. Sementara dalam mode baca-saja, sumber tidak akan dapat memproses transaksi tulis apa pun. Evaluasi dampaknya ke bisnis Anda dan jadwalkan jendela baca-saja dalam waktu di luar puncak jika perlu.

    FLUSH TABLES WITH READ LOCK;
    SET GLOBAL read_only = ON;
    
  7. Dapatkan nama dan offset file log biner.

    Jalankan perintah show master status untuk menentukan nama dan offset file log biner saat ini.

     show master status;
    

    Hasilnya tampak mirip dengan di bawah ini. Pastikan mencatat nama file biner untuk digunakan di langkah-langkah selanjutnya.

Mencadangkan dan memulihkan server sumber

  1. Tentukan database dan tabel mana yang ingin direplikasikan ke Azure Database for MySQL dan lakukan rekam cadang dari server sumber.

    Anda dapat menggunakan mysqldump untuk mencadangkan database dari server utama. Untuk detailnya, lihat Buang & Pulihkan. Tidak perlu merekam cadang pustaka MySQL dan pustaka uji.

  2. Opsional - Jika ingin menggunakan Replikasi berbasis gtid, Anda harus mengidentifikasi GTID dari transaksi terakhir yang dieksekusi di primer. Anda dapat menggunakan perintah berikut ini untuk mencatat GTID dari transaksi terakhir yang dieksekusi di server master.

    show global variables like 'gtid_executed';
    
  3. Atur server sumber ke mode baca/tulis.

    Setelah database dicadangkan, ubah server MySQL sumber kembali ke mode baca/tulis.

    SET GLOBAL read_only = OFF;
    UNLOCK TABLES;
    
  4. Pulihkan file cadangan ke server baru.

    Pulihkan file cadangan ke server yang dibuat di layanan Azure Database for MySQL. Lihat Dump & Restore untuk mengetahui cara memulihkan file dump ke server MySQL. Jika file cadangan cukup besar, unggah ke komputer virtual di Azure dalam wilayah yang sama dengan server replika Anda. Pulihkan file ke server Azure Database for MySQL dari komputer virtual.

  5. Opsional - Catat GTID server yang dipulihkan di Azure Database for MySQL untuk memastikannya sama dengan server utama. Anda dapat menggunakan perintah berikut ini untuk mencatat GTID dari nilai GTID yang dibersihkan di server replika Azure Database for MySQL. Nilai gtid_purged seharusnya sama dengan gtid_executed di master yang dicatat pada langkah 2 agar replikasi berbasis GTID berfungsi.

    show global variables like 'gtid_purged';
    

Menautkan server sumber dan replika untuk memulai Replikasi Data-in

  1. Atur server sumber.

    Semua fungsi Replikasi Data-in dilakukan dengan prosedur tersimpan. Anda dapat menemukan semua prosedur di Prosedur Tersimpan Replikasi Data-in. Prosedur tersimpan dapat dijalankan di shell MySQL atau MySQL Workbench.

    Untuk menautkan dua server dan memulai replikasi, masuk ke server replika target di layanan Azure DB for MySQL dan atur instans eksternal sebagai server sumber. Tindakan ini dilakukan menggunakan prosedur tersimpan mysql.az_replication_change_master di server Azure DB for MySQL.

    CALL mysql.az_replication_change_master('<master_host>', '<master_user>', '<master_password>', <master_port>, '<master_log_file>', <master_log_pos>, '<master_ssl_ca>');
    

    Opsional - Jika ingin menggunakan Replikasi berbasis gtid, Anda harus menggunakan perintah berikut ini untuk menautkan kedua server

    call mysql.az_replication_change_master_with_gtid('<master_host>', '<master_user>', '<master_password>', <master_port>, '<master_ssl_ca>');
    
    • master_host: nama host server sumber

    • master_user: nama pengguna untuk server sumber

    • master_password: kata sandi untuk server sumber

    • master_port: nomor port tempat server sumber mendengarkan koneksi. (3306 adalah port default tempat MySQL mendengarkan)

    • master_log_file: nama file log biner dari menjalankan show master status

    • master_log_pos: posisi log biner dari menjalankan show master status

    • master_ssl_ca: konteks sertifikat CA. Jika tidak menggunakan SSL, teruskan dalam string kosong.

      Sebaiknya teruskan parameter ini sebagai variabel. Untuk informasi selengkapnya, lihat contoh berikut ini.

    Catatan

    Jika server sumber dihosting di Azure VM, atur "Izinkan akses ke layanan Azure" ke "ON" untuk memungkinkan server sumber dan replika berkomunikasi satu sama lain. Pengaturan ini dapat diubah dari opsi Keamanan koneksi. Untuk informasi selengkapnya, lihat Mengelola aturan firewall menggunakan portal.

    Contoh

    Replikasi dengan SSL

    Variabel @cert dibuat dengan menjalankan perintah MySQL berikut:

    SET @cert = '-----BEGIN CERTIFICATE-----
    PLACE YOUR PUBLIC KEY CERTIFICATE'`S CONTEXT HERE
    -----END CERTIFICATE-----'
    

    Replikasi dengan SSL diatur antara server sumber yang dihosting di domain "companya.com" dan server replika yang dihosting di Azure Database for MySQL. Prosedur tersimpan ini dijalankan pada replika.

    CALL mysql.az_replication_change_master('master.companya.com', 'syncuser', '[email protected]!', 3306, 'mysql-bin.000002', 120, @cert);
    

    Replikasi tanpa SSL

    Replikasi tanpa SSL diatur antara server sumber yang dihosting di domain "companya.com" dan server replika yang dihosting di Azure Database for MySQL. Prosedur tersimpan ini dijalankan pada replika.

    CALL mysql.az_replication_change_master('master.companya.com', 'syncuser', '[email protected]!', 3306, 'mysql-bin.000002', 120, '');
    
  2. Siapkan pemfilteran.

    Jika ingin melewati proses replikasi beberapa tabel dari file master, perbarui parameter server replicate_wild_ignore_table di server replika Anda. Anda dapat menyediakan lebih dari satu pola tabel menggunakan daftar yang dipisahkan koma.

    Tinjau Dokumentasi MySQL untuk mempelajari selengkapnya tentang parameter ini.

    Untuk memperbarui parameter, Anda dapat menggunakan portal Microsoft Azure atau Azure CLI.

  3. Mulai replikasi.

    Panggil prosedur tersimpan mysql.az_replication_start untuk memulai replikasi.

    CALL mysql.az_replication_start;
    
  4. Periksa status replikasi.

    Panggil perintah show slave status pada server replika untuk melihat status replikasi.

    show slave status;
    

    Jika status Slave_IO_Running dan Slave_SQL_Running adalah "yes" dan nilai Seconds_Behind_Master adalah "0", replikasi bekerja dengan baik. Seconds_Behind_Master menunjukkan seberapa terlambat replikanya. Jika nilainya bukan "0", artinya replika sedang memproses pembaruan.

Prosedur tersimpan lain yang berguna untuk operasi Replikasi Data-in

Menghentikan replikasi

Untuk menghentikan replikasi antara sumber dan server replika, gunakan prosedur tersimpan berikut:

CALL mysql.az_replication_stop;

Hapus hubungan replikasi

Untuk menghapus hubungan antara sumber dan server replika, gunakan prosedur tersimpan berikut ini:

CALL mysql.az_replication_remove_master;

Lompati kesalahan replikasi

Untuk melompati kesalahan replikasi dan memperbolehkan replikasi untuk dilanjutkan, gunakan prosedur tersimpan berikut ini:

CALL mysql.az_replication_skip_counter;

Opsional - Jika ingin menggunakan Replikasi berbasis gtid, gunakan prosedur tersimpan berikut ini untuk melewatkan transaksi

call mysql. az_replication_skip_gtid_transaction(‘<transaction_gtid>’)

Prosedur ini dapat melompati transaksi untuk GTID yang diberikan. Jika format GTID tidak benar atau transaksi GTID telah dijalankan, prosedur akan gagal dijalankan. GTID untuk transaksi dapat ditentukan dengan mengurai log biner untuk memeriksa peristiwa transaksi. MySQL menyediakan utilitas mysqlbinlog untuk mengurai log biner dan menampilkan kontennya dalam format teks, yang dapat digunakan untuk mengidentifikasi GTID transaksi.

Penting

Prosedur ini hanya dapat digunakan untuk melewati satu transaksi, dan tidak dapat digunakan untuk melewati set gtid atau set gtid_purged.

Untuk melompati transaksi berikutnya setelah posisi replikasi saat ini, gunakan perintah berikut untuk mengidentifikasi GTID transaksi berikutnya seperti yang ditunjukkan di bawah ini.

SHOW BINLOG EVENTS [IN 'log_name'] [FROM pos][LIMIT [offset,] row_count]

Langkah berikutnya

  • Pelajari selengkapnya tentang Replikasi Data-in untuk Azure Database for MySQL.